gpt4 book ai didi

java - 两个 JPanel 之间的通信

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:34 27 4
gpt4 key购买 nike

我有这个带有 BorderLayout 的“主”面板(我们称它为 AAA)和两个面板(BBBCCC) :

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

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 中输入一个数字并按下“确定”时,CCC 面板应填充适当数量的数据输入行。每行应包含两个文本字段、两个下拉列表和一个复选框。如果用户输入一些大数字,所有项目都在 JScrollPane 中,那就太好了。

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

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

最佳答案

你可能想错了。最好不要考虑正在通信的两个 JPanel,而更简单地考虑正在通信的两个 对象,它们将像任何其他两个对象一样进行通信 - - 通过影响状态的方法。通过让一个对象调用另一个对象的方法并将其信息发布给它,可以将此信息从一个对象推送到另一个对象,或者可以通过使用观察者设计模式将其从一个对象拉到另一个对象,例如可以实现的与可用的各种听众之一。我自己喜欢为此使用 PropertyChangeListener。因此,被观察对象将接受在其状态发生变化后收到通知的监听器,然后这些观察者将调用被观察对象的公共(public)方法以提取更改的信息。

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

关于java - 两个 JPanel 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com