sky*_*ork 11 java user-interface swing awt
我想知道是否有可能实现一个方形但旋转90度的GUI面板(可能是JPanel).显然,将有一个包含该面板的顶层容器,并且在视觉上主面板是这个旋转的方形面板.
更具体地说,我将一个面板(称为"A")划分为4个相等的方形子面板,并用JLabel填充这些子面板,我正在考虑使用GridLayout.最后,我会将"A"旋转90度以达到我想要的效果.
从我对其他类似问题的阅读中,您似乎无法旋转JPanel本身,但您可以旋转其中包含的内容.这适用于我的情况吗?如果有人可以指出,将不胜感激.谢谢.
tra*_*god 13
关键的事情似乎是在旋转图形上下文后绘制组件.这是一个例子:

附录1:正如@Atreys评论的那样,旋转的组件被绘制出来,但是互动性很差.如果组件必须保持可用,则还应转换事件坐标.比较这(相当)更复杂的示例该镜组件.
附录2:如果您还需要变换鼠标坐标,此示例可能会有所帮助.
附录3:或者,考虑这里drawString()检查的例子.
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/** @see https://stackoverflow.com/questions/6333464 */
public class RotatePanel extends JPanel {
public RotatePanel() {
this.setPreferredSize(new Dimension(320, 240));
this.add(new JLabel("Hello World!", JLabel.CENTER));
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int w2 = getWidth() / 2;
int h2 = getHeight() / 2;
g2d.rotate(-Math.PI / 2, w2, h2);
super.paintComponent(g);
}
private void display() {
JFrame f = new JFrame("RotatePanel");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(this);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new RotatePanel().display();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8065 次 |
| 最近记录: |