NetBeans& Swing - 动态添加JPanel到JDialog

时间:2012-02-16 15:55:37

标签: java swing netbeans jpanel jdialog

我正在NetBeans中设计一个应用程序,如下面的屏幕截图所示。

enter image description here

当用户点击JFrame上的JButton时,会弹出一个JDialog,要求用户使用数字键盘输入数值。我希望JDialog动态添加2个JPanel。 JPanel 1将包含一个输入文本框。 JPanel 2将包含一个数字小键盘。我用这种方式设计它们,这样我就可以在需要时重复使用数字键盘。我面临的问题是动态显示弹出的JDialog上的这两个JPanel。 JDialog弹出空白。请看下面的代码。谢谢大家,感谢您的帮助

这是JDialog的示例代码:

public class MyDialog extends javax.swing.JDialog {

    public MyDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();

        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {//Add JPanel 2 (Numeric Keypad) to JDialog
                Container contentPane = getContentPane();
                NumericKeypadPanel nkp = new NumericKeypadPanel();
                nkp.setLayout(new java.awt.BorderLayout());
                contentPane.removeAll();
                contentPane.add(nkp);
                contentPane.validate();
                contentPane.repaint();
            }
        });
    }

这是JPanel 2(数字小键盘)的示例代码:

public class NumericKeypadPanel extends javax.swing.JPanel {

    /** Creates new form NumericKeypadPanel */
    public NumericKeypadPanel() {
        initComponents();//Draws 10 number buttons
    }
}

2 个答案:

答案 0 :(得分:3)

basicall有两种方式

1)通过在屏幕上保持JComponent大小(以像素为单位)添加新的JDialog,所有JCompoenets 或者其中一部分可能会缩小

2)通过调用JDialog调整pack()的大小,然后JDialog将调整大小

both my a.m. rulles works使用Standard LayoutManagersAbsoluteLayout除外)

答案 1 :(得分:1)

NumericKeypadPanel的initComponents()函数是什么?如果它实际上没有创建组件,那么您不会在对话框中看到任何内容。我在NumericKeypadPanel的构造函数中添加了一行来更改此面板的背景颜色,实际上,它在对话框中显示为绿色面板。

public NumericKeypadPanel() {
    //initComponents();//Draws 10 number buttons
    setBackground(Color.green);
}