Java добавление компонентов в JOptionPane

Я пытаюсь создать пользовательскую панель для простого диалога ввода данных. Я создал пользовательскую панель, в которую я добавил свои метки и текстовые поля. Я пытаюсь добавить его в JOptionPane для отображения.

Когда я вызываю его, мои компоненты не отображаются, но отображаются кнопки JOptionPane. Как правильно это сделать? Заранее спасибо!!

Здесь я создаю свою пользовательскую панель и вызываю JOptionPane:

    public class ListenCustEdit implements ActionListener {
    @Override
    @SuppressWarnings("empty-statement")
    public void actionPerformed(ActionEvent e) {
        TestPanel panel = new TestPanel();
        int input = JOptionPane.showConfirmDialog(frame, panel, "Edit Customer:"
                        ,JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
        if (input == 0) {
            // OK
            JOptionPane.showMessageDialog(frame,"Changes savewd");
        } else {
            // Cancel
            JOptionPane.showMessageDialog(frame, "No changes were saved");
        }
    }
}

Вот мой класс панели:

public class TestPanel extends JPanel {

JTextField custIdTextField;
JTextField companyTextField;
JTextField firstNameTextField;
JTextField lastNameTextField;

public TestPanel() {
    initUI();
}

public final void initUI() {

    // create the panel and set the layout
    JPanel main = new JPanel();
    main.setLayout(new GridLayout(4,4));

    // create the labels
    JLabel custIdLabel = new JLabel("Cust Id: ");
    JLabel companyLabel = new JLabel("Company: ");
    JLabel firstNameLabel = new JLabel("First Name: ");
    JLabel lastNameLabel = new JLabel("Last Name: ");

    // create the text fields
    custIdTextField = new JTextField();
    companyTextField = new JTextField();
    firstNameTextField = new JTextField();
    lastNameTextField = new JTextField();

    // add componets to panel
    main.add(custIdLabel);
    main.add(custIdTextField);
    main.add(companyLabel);
    main.add(companyTextField);
    main.add(firstNameLabel);
    main.add(firstNameTextField);
    main.add(lastNameLabel);
    main.add(lastNameTextField);
}

3 ответа

Решение

Вам нужно добавить основную панель в свою TestPanel.

public final void initUI() {
    // ...
    add(main);
}

В initUI вы создаете JPanel (называемый "основным") и наполняете его компонентами, но ничего не делаете с ним. Вам нужно либо добавить "main" к реальному экземпляру TestPanel, либо просто пропустить этап создания "главной" панели вообще.

Первый способ:

public final void initUI() {
    // ... everything as before, then 
    this.add(main);
}

Второй способ:

public final void initUI() {
    this.setLayout(new GridLayout(4,4));

    // create the labels
    JLabel custIdLabel = new JLabel("Cust Id: ");
    JLabel companyLabel = new JLabel("Company: ");
    JLabel firstNameLabel = new JLabel("First Name: ");
    JLabel lastNameLabel = new JLabel("Last Name: ");

    // create the text fields
    custIdTextField = new JTextField();
    companyTextField = new JTextField();
    firstNameTextField = new JTextField();
    lastNameTextField = new JTextField();

    // add componets to panel
    this.add(custIdLabel);
    this.add(custIdTextField);
    this.add(companyLabel);
    this.add(companyTextField);
    this.add(firstNameLabel);
    this.add(firstNameTextField);
    this.add(lastNameLabel);
    this.add(lastNameTextField);
}

("Это" не является строго необходимым, но я добавил их для иллюстрации.)

Надеюсь это поможет!

Вы не добавили основную панель в свой экземпляр TestPanel в конструкторе.

Другие вопросы по тегам