2012-02-16 30 views
1

我设计在NetBeans中的应用程序,如下面的截图所示。的NetBeans和摇摆 - 动态添加的JPanel到的JDialog

enter image description here

当用户点击JFrame上一个JButton,一个JDialog弹出,询问用户输入使用数字键盘的数值。我想JDialog动态添加2个JPanel。 JPanel 1将包含一个用于输入的文本框。 JPanel 2将包含一个数字小键盘。我以这种方式设计它们,以便在需要时可以重复使用数字键盘。我面临的问题是在弹出的JDialog上动态显示这2个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 
    } 
} 

回答

3

basicall有两种方法

1)通过在屏幕上保持JDialog大小(像素),它们的所有JCompoenets 或部分可以收缩

2添加新JComponent)通过调用pack()调整JDialog,然后JDialog将通过使用Standard LayoutManagers调整大小

both my a.m. rulles works(但0除外)

+0

谢谢mKorbel – jadrijan 2012-02-16 16:18:20

+0

很高兴为您效劳 – mKorbel 2012-02-16 16:30:30

1

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

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

的initComponents()函数是绘制数字按钮。我意外地想出了解决方案。在NetBeans中,您可以简单地将自定义的JPanel拖放到JDialog或JFrame上。解决方案非常简单,我从未想过它。我需要更多地使用NetBeans来发现所有隐藏的功能。 – jadrijan 2012-02-16 16:17:15