1

私は javax.swing と java.awt を使用するのに比較的慣れていないので、問題をぎこちなく表現する場合はご容赦ください。

JPanel pを拡張して作成するカスタムメイドのクラス CustomClass があるとします。クラスでは、 JButton bpに追加します。後で別のプログラム ファイルでcpという CustomClass のインスタンスを作成し、たとえば「actionPerformed」メソッドを使用してbからのクリック イベントをキャッチできるようにしたいと考えています。私の質問は、インスタンスcpから JButton bに (書かれたパスのように) どのように「到達」するかです。(関連するすべてのクラス ファイルが既に関連付けられていると仮定します)

4

1 に答える 1

4

正しく理解できたら、ゲッターとセッターを使用してください。つまり、インスタンス を返すメソッドがありcustomPanelます。public getButton()JButton

class CustomPanel extends JPanel {
    JButton button=new JButton("Some button");

    public JButton getMyButton() {
        return button;
    }
}

class Test {
    CustomPanel cp=new CustomPanel();


    void someMethod() {
       JButton b= cp.getMyButton();
    }
}

アップデート

コメントによると:

JPanelに10個または20個の異なるコンポーネントがある場合、多くのメソッドを作成せずにそれらに到達する方法はありますか?

インスタンスを呼び出すだけgetComponentCountJPanel、を使用して繰り返すとfor loopgetComponentAt(int i)次のすべてのコンポーネントにアクセスできるようになりますJPanel

CustomPanel cp=...;//this class extends jpanel


for(int i=0;i<cp.getComponentCount();i++) {
    Component c=cp.getComponentAt(i);
     if( c instanceof JButton) {
         //do something
    }
 }

更新2

同じクラスである必要があるが、それ以外は別々のオブジェクトとして扱われるオブジェクトが2つ以上ある場合、提供されたループを使用してそれらを区別するにはどうすればよいですか。

これを見てsetName(String name)getNameインスタンスJButtonに、によって取得できる一意の名前を割り当てることができますgetName()。または、ボタンを使用setActionCommand(String name)getActionCommand()て別のボタンと区別するために、後者の方が好きです。または、経由して彼らのテキストを使用することもできますgetText()

于 2013-01-11T11:36:19.433 に答える