我无法作出其添加到一个JDialog当任何部件上的JLayeredPane apear。
我也一直无法找到网络资源,可显示这可能在代码合理大小的块来完成。 每一幅景象IV看着“索赔”可以做到这一点,然后显示了令人作呕的长期解决方案。
我要的是采取JLayered窗格,在它的图标添加一个按钮,把一个JLabel在此窗格以及。 英语我想停留在其文本的前面有一个图标的按钮。
这是AWT按钮,我一直无法找到制作寻找挥杆的JButton系统的一种方式。
编辑:你可以帮我出一些更具体。 我想我是一个littile含糊在我的岗位。
Button button = new Button("ok");
JDialog dialog = new JDialog(null,"Windows",Dialog.ModalityType.APPLICATION_MODAL);
dialog.getLayeredPane().add(button);
dialog.pack();
dialog.setVisible(true);
我似乎没有任何问题......
public class TestLayeredDialog {
public static void main(String[] args) {
new TestLayeredDialog();
}
public TestLayeredDialog() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setLayout(new BorderLayout());
dialog.add(new MyContent());
dialog.pack();
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
System.exit(0);
}
});
}
public class MyContent extends JLayeredPane {
public MyContent() {
JLabel label = new JLabel("Hello new world");
label.setSize(label.getPreferredSize());
label.setLocation(0, 0);
add(label);
Dimension size = getPreferredSize();
JButton button = new JButton("Click me");
button.setSize(button.getPreferredSize());
button.setLocation(size.width - button.getWidth(), size.height - button.getHeight());
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SwingUtilities.getWindowAncestor(MyContent.this).dispose();
}
});
add(button);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
}
}
请记住, JLayeredPane
没有一个布局管理器。 你成为负责管理的子组件的大小和位置,这就是问题所在。
更新了新的例子
public class TestLayeredDialog {
public static void main(String[] args) {
new TestLayeredDialog();
}
public TestLayeredDialog() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
}
JDialog dialog = new JDialog();
dialog.setModal(true);
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setLayout(new BorderLayout());
JLabel label = new JLabel("Hello new world");
label.setSize(label.getPreferredSize());
label.setLocation(0, 0);
dialog.getLayeredPane().add(label, new Integer(1));
dialog.setSize(100, 100);
dialog.setLocationRelativeTo(null);
dialog.setVisible(true);
System.exit(0);
}
});
}
}
的的分层窗格JRootPane
负责(其中包括)铺设的内容窗格和菜单栏。 它也可以用来(在某些情况下),显示之类的弹出窗口。
有一个通读如何使用根窗格
您可以选择将组件根窗格的分层窗格。 如果你这样做,那么你就应该知道,某些深被定义为用于特定的功能,你应该使用深处的预期。 否则,你的组件可能不与别人玩好。 下面是显示功能层和他们的关系的图:
利用这一点,意味着你与组件已经在屏幕上竞争。
除非你有很好的理由与此组件搞乱,我会建议你避免它作为1-这有可能在未来(组件的层位置)和2-改变,可能与被使用的其他部件干涉摇摆API
这个例子似乎与添加到构造以下行的工作:
this.addMouseListener(new MouseHandler(this));
this.add(new JLabel("Label"));
this.add(new JButton(UIManager.getIcon("html.pendingImage")));