当我的应用程序有多个相同的标签时,如何在选项卡中访问组件?(如何确定活动标签?)

时间:2012-08-02 23:35:37

标签: java swing tabs components

我编写了一个连接多个数据库的应用程序(查看link)。我分别有几个包含带有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()方法的“Connect”按钮有关:

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

                }
            });
        }

如果我的策略是真的,请告诉我吗?

1 个答案:

答案 0 :(得分: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组件并保留创建后需要访问的组件的引用。