-2

複数のデータベースに接続するアプリを作成しました(リンクを確認してください)。と私はそれぞれ、INPUTテキストフィールドを持つクエリパネルを含むいくつかのタブを持っています。次に、選択したタブの特定のテキストフィールドにアクセスして、関連するデータベースのクエリを実行したいのですが、どのようにアクセスできるかを教えてください。

次のようにjTabbedPaneに追加する必要があるJPanelのクラスを作成したことに言及する必要があります。

package testGUI_V2;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;
import static testGUI_V2.DialogBoxTest.service;

public class TabbedPane {
private String state;
private JLabel jLabel3;
private JTextField jTextField2;
private JTextPane jTextPane1;
private JButton jButton4;
private static int item = 0;
private int tabIndex;

public JPanel CreatePanel(){
    state = service.toUpperCase();
    tabIndex = item;
    JPanel inst1 = new JPanel();
    String tabTitle =String.format("Query Panel %d",item+1);
    inst1.setSize(302, 138);
    inst1.setLayout(null);
    inst1.setBorder(BorderFactory
                    .createTitledBorder(BorderFactory
                    .createEtchedBorder(BevelBorder.LOWERED), tabTitle));
    inst1.setPreferredSize(new java.awt.Dimension(321, 108));

        jLabel3 = new JLabel("Employee ID", SwingConstants.LEFT);
        inst1.add(jLabel3);
        jLabel3.setBounds(12, 15, 103, 26);
        jLabel3.setVisible(true);

        jTextField2 = new JTextField();
        inst1.add(jTextField2);
        jTextField2.setVisible(true);
        jTextField2.setBounds(109, 15, 93, 30);

        jTextPane1 = new JTextPane();
        inst1.add(jTextPane1);
        jTextPane1.setBounds(6, 50, 307, 50);

        jButton4 = new JButton("Search");
        inst1.add(jButton4);
        jButton4.setVisible(true);
        jButton4.setBounds(231, 15, 82, 29);
        //jButton4.addActionListener(search);

        item++;
        return inst1;
}
public JTextField getQueryJTextField(){
    return jTextField2;
}
public String getPanelState(){
    return state;
}
public int getTabIndex(){
    return tabIndex;
}
}

さらに、以下のコードは、TabbedPaneクラスのcreatePanel()メソッドを呼び出す[接続]ボタンに関連しています。

            {
            jButton2 = new JButton();
            getContentPane().add(jButton2);
            jButton2.setText("Connect");
            jButton2.setBounds(229, 50, 90, 29);
            jButton2.setVisible(false);
            jButton2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    LinkedFrame inst2 = new LinkedFrame(inst, true);
                    inst2.setLocationRelativeTo(rootPane);
                    inst2.setVisible(true);
                    if (Connector.getProcessStatue()) {
                        TabbedPane inst= new TabbedPane();
                        jPanel3.setVisible(true);
                        tabbedPane1.addTab(connectionItem,null ,info.get(inst.getTabIndex()));
                        info.add(inst.CreatePanel());
                        System.out.println(inst.getPanelState());
                        jButton2.setVisible(false);
                        jButton3.setVisible(true);
                        setSize(342, 265);
                    }

                }
            });
        }

私の戦略が正しいかどうかも教えてください。

4

1 に答える 1

1

私はほとんどの場合、GUIプログラミング用にJPanelのサブクラスを作成します。後で使用するためにコンポーネントにアクセスする必要がある場合は、JPanelクラスでこれらのコンポーネントへの参照を保持し、取得するデータのアクセサーメソッドを提供するようにします。

public class MyPanel extends JPanel {
  private JTextField myTextField = new JTextField();

  String getText() {
    return myTextField.getText();
  }
}

また、カスタムパネルを保持するためにJFrameのサブクラスを作成します。また、JPanelサブクラスと同様に、カスタムパネルのインスタンスへのプライベート参照を保持します。

public class MyFrame extends JFrame {
  private MyPanel myPanel = new MyPanel();

  public MyFrame() {
    this.add(myPanel);

    JButton someButton = new JButton("Do It!");
    someButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        String text = MyFrame.this.myPanel.getText();

        // Do something with the text
      }
    });
  }
}

MyPanelのインスタンスを含むクラスは、JFrameだけでなく、何でもかまいません。ただし、基本的な考え方が適用されます。Swingコンポーネントをサブクラス化し、作成後にアクセスする必要のあるコンポーネントの参照を保持します。

于 2012-08-02T23:45:17.137 に答える