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