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 в конструкторе.