我对一个扩展JDialog的类有一个奇怪的问题:
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()
返回{ {1}})。
请帮助:)
答案 0 :(得分:4)
只需将setVisible(true);
调用移至构造函数的末尾即可。
答案 1 :(得分:0)
删除getContentPane()
版本中的JDialog
次调用,它应该可以正常工作