NetBeans & Swing - динамически добавлять JPanel в JDialog - PullRequest
1 голос
/ 16 февраля 2012

Я проектирую приложение в NetBeans, как показано на снимке экрана ниже.

enter image description here

Когда пользователь нажимает JButton на JFrame, всплывающее окно JDialog спрашиваетпользователь вводит числовое значение с помощью цифровой клавиатуры.Я хотел бы, чтобы JDialog динамически добавлял 2 JPanels.JPanel 1 будет содержать текстовое поле для ввода.JPanel 2 будет содержать цифровую клавиатуру.Я разработал их таким образом, чтобы я мог использовать цифровую клавиатуру всякий раз, когда мне это нужно.Проблема, с которой я сталкиваюсь, заключается в динамическом отображении этих 2 JPanels на JDialog, который появляется.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 ]

3 голосов
/ 16 февраля 2012

есть два способа

1) добавить новый JComponent, удерживая на экране размер JDialog (в пикселях), все JCompoenets или часть из них может быть уменьшена

2) изменить размер JDialog, позвонив по номеру pack(), тогда JDialog будет изменен

обе мои амулеты работают с помощью Standard LayoutManagers (исключая AbsoluteLayout )

1 голос
/ 16 февраля 2012

Что находится в функции initComponents () панели NumericKeypadPanel? Если он на самом деле не создает компоненты, вы не увидите ничего в диалоге. Я добавил одну строку в конструктор NumericKeypadPanel, чтобы изменить цвет фона этой панели, и он действительно отображается в диалоговом окне в виде зеленой панели.

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