コツをつかむためだけに簡単なUIを書いています。2 つのタブを持つタブ付きウィンドウがあります。1 つには整数をカウントアップするボタンがあり、もう 1 つには整数の内容を表示するテキスト フィールドがあります。または、少なくともそれが計画です。
すべてを 1 つのクラスに詰め込むと、すべてがうまく機能します。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);
}
}
これらすべてが 1 つのクラス (およびサブクラス) にある場合は、Tab2 から tfCount にアクセスして、tfCount.setText(content.getCounter()); を実行するだけで済みます。ただし、現在 tfCount は別のクラスにあり、Tab1 のインスタンスを Tab2 に渡さない限り (tabs.addTab("Two", new Tab2(content, Tab1); のように)) アクセスできません。代わりに、Tab1 が開かれるたびに Tab1 で tfCount.setText(content.getCounter()) を実行するメソッドを持つように、Tab1 が開かれるたびにそれ自体を再描画するか、またはそれらの行に沿って何かを取得しますか?もしそうなら、どうすればいいですか?