JDialog不显示组件

时间:2012-09-27 17:17:29

标签: java swing jdialog contentpane

我对一个扩展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}})。

请帮助:)

2 个答案:

答案 0 :(得分:4)

只需将setVisible(true);调用移至构造函数的末尾即可。

答案 1 :(得分:0)

删除getContentPane()版本中的JDialog次调用,它应该可以正常工作