class MyDialog extends JDialog {
private static final long serialVersionUID = 11564288421L;
public MyDialog(JFrame owner, MyObject object) {
super(owner, true);
setSize(300, 200);
setLocationRelativeTo(owner);
String title = "Object ID: " + object.getId();
setTitle(title);
setVisible(true);
JLabel lblTitle = new JLabel(title);
lblTitle.setBounds(0, 0, this.getWidth(), 22);
lblTitle.setFont(new java.awt.Font("Tahoma", 1, 18));
lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
getContentPane().setLayout(null);
getContentPane().add(lblTitle);
}
}
当我把它与new MyDialog(existingJFrameInstance, existingMyObjectInstance);
,MyDialog
显示和良好同名,但没有什么在其ContentPane
。
如果我改变类分为:
class MyDialog extends JFrame {
private static final long serialVersionUID = 11564288421L;
public MyDialog(JFrame owner, MyObject object) {
super();
setSize(300, 200);
setLocationRelativeTo(owner);
String title = "Object ID: " + object.getId();
setTitle(title);
setVisible(true);
JLabel lblTitle = new JLabel(title);
lblTitle.setBounds(0, 0, this.getWidth(), 22);
lblTitle.setFont(new java.awt.Font("Tahoma", 1, 18));
lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
getContentPane().setLayout(null);
getContentPane().add(lblTitle);
}
}
一切工作就好了。我无法想象这里发生了什么:\
我需要窗口为模态,这就是为什么我必须用JDialog
而不是JFrame
。
我想一切可能的组合使用this.pack();
,this.validate();
,getContentPane().revalidate();
,getContentPane().repaint();
等等等等,我在EDT(SwingUtilities.isEventDispatchThread()
回报true
)。
请帮助:)
@tmh'setVisible(true);'必须是构造函数中的最后一行代码,否则显示'empty container' – mKorbel
确实,'setVisible(true)'应该是构造函数中的最后一行代码,否则您会注意到在控件显示的延迟,但在这种情况下,问题是'JDialog'的'getContentPane()'调用(通过测试确认) – higuaro
omg lol现在它工作...我不知道这个:D谢谢 – tmh