繁体   English   中英

Java Swings在Tabs之间共享JTextField值

[英]Java Swings Sharing JTextField values across Tabs

我试图跨选项卡共享JTextField值。

我在Tabbed Pane中添加了3个面板。当我在Tab1中的Text Feild中输入一些值并单击Tab3时,我应该能够将Text Feild传递给Tab3。

源代码文件的详细信息如下。

在文件TTM.java中

public class TTM extends JPanel {

    private void createBBT() {
        createDisplayD();
        pane.setBorder(null);
        pane.addTab("DisPlay", panel1);
        pane.addTab("Recall", panel2);
        createBen();
        pane.addTab("Ben", panel3);
    }

    public void createDisplayD() {
        panel1 = new JPanel();
        panel1.setOpaque(true);
        panel1.setBorder(BorderFactory.createLineBorder(new Color(240, 255, 240)));
        panel1.add(new SComponent(user, region));
    }
}

在上面代码块的最后一行中调用的SComponent.java中的代码如下所示

public class SComponent extends JPanel implements PropertyChangeListener {

    public SComponent(String user, String region) {

        br = addTextField("br", 2, gridbag, v2, 
        ...);

   cu = addTextField("cu", 10, gridbag, v2,
        ...);

   search = new JButton("Search");
        search.setMnemonic('L');
        search.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pmSearch();
            }
        });



    private void pmSearch() {

        sParams.put(Cu_Key, cu.getText());
        sParams.put(Br_Key, br.getText());

    }
}

因此,在上面的代码中,我们可以看到Cu和br值被添加到地图中,然后用于从db中获取数据。这发生在选项卡1中。

但是在Tab3中我应该得到这些值,详情如下。

public class TTM extends JPanel {

    private void createBen() {
        panel3 = new JPanel();
        panel3.setOpaque(true);
        panel3.setBorder(BorderFactory.createLineBorder(new Color(240, 255, 240)));
        panel3.add(new SBenComponent());
    }
}

因此,在上面的上下文中,如何将SComponent.java中的cu和br值赋予TTM.java文件或SBenComponent()(SBenComponent.java),它位于上面代码的最后一行。

如果我没有明确说明问题或者它不是一个有效的问题,请提前致谢并对不起。

当我在Tab1中的Text Feild中输入一些值并单击Tab3时,我应该能够将Text Feild传递给Tab3。

您无法传递组件,因为组件只能属于单个容器。 但是你可以分享模型:

JTextField tab1TextField = new JTextField(...);
JTextField tab2TextField = new JTextField(...);
tab2TextField.setDocume( tab1TextField.getDocument() );

现在,当您在任一文本字段中输入文本时,另一个文本字段会自动更新,因为它们共享同一个文档。

您需要查看Mediator模式 它是一个单例类型对象,您可以使用对根组件的引用加载它。 然后,mediadator调解对其他远程GUI组件的调用。

您还可以通过所有面板的构造函数传递最高组件(即框架)。 然后,当您有对框架的引用时,您可以构建访问其他面板和组件的方法。

如果我理解你正确地做了这样的事情。

JTextField br, cu; //top of class

//inside method

   br = addTextField("br", 2, gridbag, v2, ...);

   cu = addTextField("cu", 10, gridbag, v2,...);

然后使用class.br引用; 或class.cu;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM