0

質問で正しい用語を使用しているかどうかわかりません。少し混乱するように聞こえる場合は、事前に申し訳ありません。基本的に、GUIを作成するJava Swingプログラムを作成しようとしています。GUI 全体で多かれ少なかれ均一なコンポーネント/オブジェクトが複数あるため、さまざまなオブジェクトとパネルを作成するための個別のメソッドを作成し、それらをパネルにまとめmasterframe.

GUI 全体のレイアウトとルック アンド フィールをレイアウトしましたが、まだほとんど機能していません。私の問題は、別のメソッド/クラスのパネルで作成および追加され、パネルとして返されたボタンまたはオブジェクトを参照またはアクセスする必要があるアクションリスナーがあることです。例えば、

    class makeComponents extends JPanel {
        public makeComponents() { 

        }

        public JToggleButton ToggleButton() {
          // Creates On/Off buttons as switches
            JToggleButton button = new JToggleButton("OFF", false);
            button.addActionListener(new ActionListener() {
                AbstractButton abstractButton = (AbstractButton)e.getSource();
                if (abstractButton.isSelected()) {
                    abstractButton.setText("ON");
                  // Want to add CardLayout card.show() to switch pictures
                }
                else {
                    abstractButton.setText("OFF");
                  // Want to add CardLayout card.show() to switch pictures
                }
            }
            return button;
         }
     }

別のJPanelに上記のようなオン/オフボタンがあり、 JPanelleftのCardLayoutに2つの画像がrightあり、2つのパネルがmasterJPanelに結合され、フレームに戻されます。私は非常に多くのレイヤーを作成したので、バックトラックしてその写真にアクセスする方法がわからないので、他のパネルで 2 つの画像の CardLayout を反転できます。

私は十分に明確であり、どんな助けも大歓迎です。前もって感謝します!

4

1 に答える 1

0

内部にプライベート クラスがあるすべてを 1 つのクラスに単純にマージすると、次のようにマスター クラス オブジェクトにアクセスできます。

public class Master {

    int x;
    int y;
    Inside1 inside;
    Inside2 in2;
    private class Inside1{
        public Inside1(){
            foo();
        }
        private void foo(){
            x=5; //Master.x <---
        }
    }

    private class Inside2{
        public Inside2(){
            inside = new Inside1(); //<- new object of inside1 form Master 
            bar();
        }

        private  void bar(){
            y=15; //Master.y
        }
    }

    public Master(){
        in2 = new Inside2();
    }


}

ご覧のとおり、プライベート クラス内のマスター クラスのすべてのプライベート フィールドにアクセスできます。クラスを書き直して JFrame クラス内に配置すると、問題が解決されます。

于 2013-11-15T09:58:10.723 に答える