我正在编写一个简单的 UI 只是为了掌握事情的窍门。我有一个带有两个选项卡的选项卡式窗口,一个有一个计数整数的按钮,另一个有一个显示所述整数内容的文本字段。或者至少这是计划。
如果我把所有东西都塞进一个班级,一切都会很好。我可以从我的 actionlistener 访问选项卡 1,并通过按下选项卡 2 中的按钮更改选项卡 1 中的文本字段。但显然,我不希望我的整个程序都在一个类中。
在这里我不知道该怎么做:我需要告诉 Class Tab1 中的文本字段在 Class Tab2 中按下按钮时进行更改。在这里做什么是正确的?我的第一个想法是在创建Tab2时交出一个Tab1的实例,这样我就可以做tab1.changeText()。但是,一旦我获得更多相互交互的标签,那将很快变得混乱。所以,相反,我想在每次打开第一个选项卡时更新它的内容,但我不知道该怎么做。我也不知道这样做是否正确。所以,救命!
这是一些代码。“内容”是内容的一个实例,一个处理所有逻辑的类,比如添加到计数器。
主 GUI 类:
public class GUI extends JFrame {
//Stuff..
JTabbedPane tabs = new JTabbedPane();
tabs.addTab("One", new Tab1(content));
tabs.addTab("Two", new Tab2(content));
//Stuff..
表 1:
public class Tab1 extends JPanel {
public Tab1(Content content) {
JPanel tab1 = new JPanel();
//Stuff..
JTextField tfCount = new JTextField(content.getCounter(), 10);
tab1.add(tfCount);
this.add(tab1);
//Stuff..
选项卡 2:
public class Tab2 extends JPanel {
public Tab2(Content content) {
JPanel tab2 = new JPanel();
//Stuff..
JButton btnCount2 = new JButton("Count");
btnCount2.addActionListener(new TestListener(this.content));
tab2.add(btnCount2);
this.add(tab2);
}
private class TestListener implements ActionListener {
Content content;
public TestListener(Content content) {
this.content = content;
}
@Override
public void actionPerformed(ActionEvent e) {
this.content.addToCounter(1);
}
}
现在,如果所有这些都在一个类中(加上子类),我可以从 Tab2 访问 tfCount 并执行 tfCount.setText(content.getCounter());。但是,现在 tfCount 位于不同的类中,我无法访问它,除非我将 Tab1 的实例移交给 Tab2(如 tabs.addTab("Two", new Tab2(content, Tab1);)。我不能而是让 Tab1 在打开时重新绘制自身,例如在 Tab1 打开时执行 tfCount.setText(content.getCounter()) 的方法,或者类似的东西?如果是这样,我该怎么做?