微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 两个JPanel之间的通信

我有这个“主”面板(让我们称之为AAA)与BorderLayout,以及两个面板(BBB和CCC):
public class AAA extends JPanel {
    BBB pnlnorth = new BBB();
    CCC pnlCenter = new CCC();
    public AAA(){
        setLayout(new BorderLayout());
        add(pnlnorth,BorderLayout.norTH);
        add(pnlCenter,BorderLayout.CENTER);        
    }
}

Panel CCC目前为空,带有GridLayout.

我的面板BBB看起来像这样:

public class BBB extends JPanel {
    public BBB (){
        JLabel labNum = new JLabel("Number of items: ");
        JTextField txtNum = new JTextField();
        JButton cmdOK = new JButton("OK");
        txtNum.setColumns(5);
        cmdOK.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                /* ???????????? */
            }
        });
        add(labNum);
        add(txtNum);
        add(cmdOK);        
    }
}

用户在txtNum中输入一个数字并按“OK”时,面板CCC应填充适当数量的行以进行数据输入.每行应包含两个文本字段,两个下拉列表和一个复选框.如果用户输入一些大数字,那么所有项目都在JScrollPane中会很好.

我的问题:我应该如何在BBB中实现动作监听器?我不知道用户输入的是什么号码.因此,我不知道CCC的GridLayout中的精确行数(我只知道它应该有5列).我可以从BBB中的侦听器修改其布局吗?如何从面板BBB中的监听器向面板CCC添加组件?

当然,如果你有更好的解决方案(没有两个单独的面板),请告诉我:)

解决方法

你可能会想到这个错误.或许最好不要考虑两个正在通信的JPanel,而是更简单地说两个正在通信的对象,它们将与任何其他两个对象进行通信 – 通过影响状态的方法.通过让一个对象调用一个对象的方法并将其信息发布给另一个对象,可以将该信息从一个对象推送到另一个对象,或者可以通过使用观察者设计模式将其从一个对象拉到另一个对象.与各种可用的听众之一.我自己,我喜欢使用Propertychangelistener.因此,观察对象将接受一旦其状态被更改就被通知的侦听器,然后这些观察者将调用被观察者的公共方法提取已更改的信息.

例如,请查看this answer中的代码,或者甚至更好的the answer to this question.

原文地址:https://www.jb51.cc/java/239805.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐