2

シンプルなデータ入力ダイアログ用のカスタム パネルを作成しようとしています。ラベルとテキスト フィールドを追加するカスタム パネルを作成しました。表示用に 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);
}
4

3 に答える 3

4

メイン パネルを TestPanel に追加する必要があります。

public final void initUI() {
    // ...
    add(main);
}
于 2013-03-11T19:07:55.763 に答える
3

initUI では、JPanel (「メイン」と呼ばれる) を作成し、そこにコンポーネントを詰め込みますが、何もしません。「メイン」を TestPanel の実際のインスタンスに追加するか、「メイン」パネルを作成する手順を完全にスキップする必要があります。

最初の方法:

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

2 番目の方法:

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);
}

(「this.」は厳密には必要ありませんが、説明のために追加しました。)

お役に立てれば!

于 2013-03-11T19:09:58.523 に答える
1

コンストラクターで TestPanel インスタンスにメイン Panel を追加しませんでした。

于 2013-03-11T19:08:17.013 に答える