一部のクラス (JPanel B からの入力のみを許可する場合は B の内部クラスが望ましい) は、ActionListener を実装する必要があります。その ActionListener を JTextField に追加する必要があります。
myInputTextField.addActionListener(theActionListenerIAmGoingToWrite).
その ActionListener は、次のような actionPerformed() を定義する必要があります。
String text = inputTextField.getText();
Integer inputInteger = Integer.getInteger(text).toInt();
graph.doStuffWithIntegerInput(inputInteger);
回答が必要な設計上の質問は次のとおりです。
ActionListener は匿名の内部クラスですか? お互いを認識しているグラフと B の特定のインスタンスでのみ使用する場合は、このようにします。その場合、それを含むクラスから Graph インスタンスへの参照を取得する必要があります。これは、B がそれを提供するそのようなインスタンスを持っていることを意味します。
ActionListener のアクションは他の場所で再利用できますか? 「数字を入力」ウィジェットは、他の JPanel のどこかに表示されますか? その場合は、スタンドアロン クラスにします。グラフへの参照がまだ必要なので、コンストラクターパラメーターとしてグラフを作成するか、setGraph メソッドを使用します。これは、メッセージを送信できるようにグラフインスタンスについて知る必要があるためです。
終わり!
編集 2
では、持っているものを MVC フレームワークにマッピングしましょう。したがって、ビューは Graph クラスとクラス B と textFields で構成されます。
グラフ クラスに含まれるようになったので、グラフ化するデータも取得できます。それが、定義した開始、終了、 x 、 y 変数です。MVC ランドの善良な市民になるには、これらを引き出して、グラフのモデルを構成する別のオブジェクトに含める必要があります。モデルは、非常に基本的に、表示方法に関係なく、表示したい一連の事実であり、ビューは画面への描画に関連するすべてのコードです。
したがって、このモデル オブジェクトは、定義したすべての変数のゲッターとセッターを持つ単純なデータ オブジェクトになり、コンストラクターで、または Graph オブジェクトのセッターを介して Graph オブジェクトに渡されます。
この GraphData オブジェクトを作成することにより、ビュー、つまりグラフをそのモデルである GraphData オブジェクトから分離しました。
より複雑な Graph では、実際に GraphModel で、作成する Graph オブジェクトの「種類」、軸の名前、描画する線の種類などを指定しますが、それはやり過ぎです。あなたが持っているもの。
これで、Graph オブジェクトと GraphData オブジェクト、およびそれらをまとめる方法ができました。
次に、クラス B を見てみましょう。これは JPanel、つまりビューであるため、本質的には含まれているビューのアグリゲーターおよびプレゼンターです。それらは Graph と JTextFields です。したがって、レイアウトを指定して、そのまま追加します。
したがって、仮想的なリファクタリングは次のようになります。
メインプログラムを作成します。そのメインで、JTextFields、ActionListener、JPanel (B)、Graph、および GraphModel を作成します。
GraphModel を Graph に関連付けます。
Graph を JPanel に関連付けます。
ActionListener を JJtextField に関連付ける
JTextField を JPanel に関連付ける
ActionListener を独自のクラスとして記述する限り、これが最も簡単に記述して理解できます。したがって、次のようになります。
public class MyTextFieldListener implements ActionListener
{
private Graph graph;
public MyTextFieldListener(Graph graph)
{
this.graph = graph;
}// construtor
public void actionPerformed (ActionEvent ae)
{
String text = ((JTextField)ae.getSource()).getText();
Integer inputInteger = Integer.getInteger().(text).toInt();
graph.doStuffWithIntegerInput(inputInteger);
} // actionPerformed
}// class
ここで、4 つのテキストフィールドすべてから情報が得られるまでグラフを更新できないという複雑な問題が発生する可能性があります。それに対応するためにこのコードを変更するにはさまざまな方法がありますが、これはどこに行く必要があるかの基本的な考え方です。
HTH