我正在开发一个设计关键系统的应用程序。主界面由复选框“矩阵”组成,显示锁和键之间的对应关系。可以为每个锁和密钥指定一个名称,以帮助将它们分发给适当的所有者。为了节省空间,我想稍微倾斜文本框中的锁名称。
我的初步尝试显示在屏幕截图中(边框涂成红色),以及我的目标是什么。 JXTransformer类允许我旋转字段,现在这些字段完全没有布局管理器。
问题是旋转的文本字段似乎有一个不透明的“背景”,它以随机方式遮盖其他文本字段。我不确定这是否是JXTransformer的工件,或者是否在Swing中不可能有组件重叠。
我非常感谢任何帮助或证明这确实是不可能的。
编辑:只是为了澄清,布局被冻结,不需要允许调整大小。
答案 0 :(得分:1)
这在某种程度上取决于您使用的Java版本。 Alexander Potochkin编写了一个名为JXLayer的库,您可以将其用于Java 7之前。您可以在此处找到对此的简短介绍: JXLayer introduction
现在已经发展成为JLayer,您现在可以在Java 7中找到它。您可以在以下页面找到一些基本的演示: JLayer video
基本上你可以做的是在你的组件上编写一个UI,它可以进行2D旋转。我过去曾成功使用过这种方法。
import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.LayerUI;
/**
* Example of rotation using {@link JLayer} in Java7.
*/
public class TiltedApproach {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Tilted components");
LayerUI<JComponent> layerUI = new RotateUI();
JPanel panel = new MyPanel();
JLayer<JComponent> jLayer = new JLayer<JComponent>(panel, layerUI);
frame.getContentPane().add(jLayer);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(800, 450));
frame.setLocationRelativeTo(null); // Center
frame.pack();
frame.setVisible(true);
}
});
}
static class MyPanel extends JPanel {
MyPanel() {
add(new JLabel("Hello"));
add(new JLabel("World"));
}
}
static class RotateUI extends LayerUI<JComponent> {
@Override
public void paint(Graphics g, JComponent c) {
Graphics2D g2 = (Graphics2D) g.create();
g2.rotate(0.4);
super.paint(g2, c);
g2.dispose();
}
}
}