-2

我编写了一个连接到多个数据库的应用程序(检查链接)。并且我分别有几个选项卡,其中包含带有 INPUT 文本字段的查询面板。现在我想访问选定选项卡中的特定文本字段以查询相关数据库...请让我现在如何访问它?

我应该提到我已经为 JPanel 创建了一个类,它应该被添加到 jTabbedPane 中,如下所示:

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 回答