0

関数 dodaj(); があります。JFrameで、このJFrameにはJPanelがあります。JPanel のボタンを使用するには、ActionListener を使用しています。しかし、誰かがボタンをクリックすると、関数 dodaj(); を呼び出したいです。Jフレームから。JFrameにActionLIstenerがある場合、this.dodaj();を使用できますが、JPanelにアクションリスナーがあり、JFrameの構成です。どうすれば dodaj(); を呼び出すことができますか? (JFrame 関数) で ActionListener から JPanel にある?

読んでくれてありがとう。下手な英語でごめんなさい。

4

2 に答える 2

2

あなたはそれについて言及していませんが、あなたの JFrame と JPanels は両方のクラスなので、あなたの問題は、あるクラスから別のクラスのメソッドを呼び出したいということですか? その場合、重要なのは、JFrame クラスへの参照を取得し、それをコンストラクターまたはメソッド パラメーターを介して JPanel クラスに渡すことです。

例えば:

class MyFrame extends JFrame {
   private MyPanel myPanel;

   public MyFrame() {
      myPanel = new MyPanel(this);
   }

   public void frameMethod() {
      System.out.println("in JFrame's frameMethod");
   }

}

class MyPanel extends JPanel {
   private MyFrame myFrame;
   private JButton someButton = new JButton("Button");

   public MyPanel(final MyFrame myFrame) {
      this.myFrame = myFrame;

      someButton.addActionListener(new ActionListener() {
         @Override
         public void actionPerformed(ActionEvent arg0) {
            myFrame.frameMethod();
         }
      });
   }  
}

余談ですが、メソッドをオーバーライドする必要があるなどの正当な理由がない限り、JFrame や JPanel を拡張することはお勧めしません。

于 2012-04-15T20:16:30.490 に答える
1

JPanel では、getParent() を使用して親 JFrame コンテナーをいつでも参照できます。

JPanel 上の ActionListener が無名クラスの場合は、getParent() メソッドを直接使用して直接参照できます。ActionListener が別のクラスの場合、インスタンス化するときに親参照を渡すことができます。

于 2012-04-15T20:24:45.340 に答える