1

GUI (メインの JFrame をレンダリングする) と Print クラス (GUI クラスの JButton によって呼び出される) の 2 つのクラスがあります。私のGUIクラスには、JTextAreaとメソッドがあります:

void setOutput(String data)
{
   // output is JTextArea
   output.setText(data);
}

ただし、データは、アクションリスナーを持つ JButton がある Print JFrame に提供されます。

sizOpt.addActionListener(new ActionListener()
{       
    @Override
    public void actionPerformed(ActionEvent event)
    {
       // textfield is a JTextField component
       String data = textfield.getText();   


       // My problem is here i need to invoke the setOutput
       // method in GUI to output the string however i cant call that method in
       // any way but making it static or calling new GUI which will create a new
       // Instance of GUI class
       GUI.setOutput(data);
    }
});
4

2 に答える 2

2

答え: ここでは静的なものを一切使用しないでください。

静的であるべき唯一のものはメインメソッドであり、おそらくそれだけです。GUI でメソッドを呼び出す必要がある場合は、静的メソッドとしてではなく、視覚化された GUIのインスタンスで呼び出します。多くの場合、トリッキーな部分はその有効な参照を取得することであり、新しい GUI オブジェクトを作成するべきではないことは正しいですが、動作しない静的ソリューションを実行しようとしないでください。有効な参照を取得するいくつかの方法は、コンストラクターのパラメーターまたはセッター メソッドを使用することです。

つまり、

public class PrintJFrame extends JFrame {
  private GUI gui;

  public PrintJFrame(GUI gui) {
    this.gui = gui;
  }

  // ...
}

これで、ActionListener で、gui 変数が保持する正しい GUI 参照でメソッドを呼び出すことができます。次に、JFrame や同様の GUI コンポーネントを拡張するクラスを避けるべき理由について説明します。次は私たち」

于 2012-11-28T03:53:27.790 に答える
1

テキストを取得するための JFrame の適切なインスタンス メソッドを使用して、JFrame サブクラスのインスタンスへの静的参照を作成します。

于 2012-11-28T03:57:05.717 に答える