0

私は問題が何であるかを知りませんか?JButtonを使用してcardLayoutでJPanelを拡張する2つの別々のクラスを切り替えようとしましたが、正しいコードを使用したかどうかわかりません...これが私のコーディングです。

CardLayoutMenu

public class CardLayoutMenu extends JFrame implements ActionListener{

    CardLayout cardLayout = new CardLayout();

    private JPanel p1 = new JPanel(cardLayout);

    final String MAIN = "MAIN";
    final String OPTION = "OPTION";

    MainPanel mainPanel = new MainPanel();
    OptionPanel optionPanel = new OptionPanel();

    private Object object;

    public CardLayoutMenu(Object object) {          
        this.object = object;
    }

    public CardLayoutMenu(){

        setLayout(new BorderLayout());
        setTitle("Card Layout Menu");
        setSize(300,300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setLocationRelativeTo(null);            
        add(p1);            
        p1.add(mainPanel, MAIN);
        p1.add(optionPanel, OPTION);
    }

    public void actionPerformed(ActionEvent e){

        try{
            cardLayout.show(p1, OPTION);
        }catch(Exception ex){
            System.out.println("" + ex);
        }
    }
}

ここに私のメインパネルがあります

public class MainPanel extends JPanel{

    private JButton jbtOption = new JButton("Option");

    public MainPanel() {            
        setLayout(new FlowLayout());
        add(jbtOption);         
        jbtOption.addActionListener(new CardLayoutMenu(this));
    }
}

次に、私の OptionPanel、JButton jbtBack を使用して MainPanel に戻ります

public class OptionPanel extends JPanel{

    private JButton jbtBack = new JButton("Back");

    public OptionPanel() {          
        setLayout(new FlowLayout());
        add(jbtBack);           
    }
}
4

1 に答える 1

3

このコードは、無限再帰を引き起こします。

public MainPanel() {
  setLayout(new FlowLayout());
  add(jbtOption);
  jbtOption.addActionListener(new CardLayoutMenu(this));
}

このコンストラクターは最終的に CardLayoutMenu クラスから呼び出されるため、MainPanel オブジェクトを作成する CardLayoutMenu オブジェクトが作成されます。このオブジェクトは、MainPanel オブジェクトを作成する CardLayoutMenu オブジェクトを作成します。このオブジェクトは、MainPanel オブジェクトを作成する CardLayoutMenu オブジェクトを作成します。 、私はあなたが絵を得ると思います。

私が強くお勧めする基本的なルールの 1 つは、GUI クラスに Listener インターフェイスを実装させないことです。これは、クラスに多くのことを要求することになり、多くの場合、あなたのコードのような混乱を招きます。これは、小さなサンプル プログラムでは問題ありませんが、初心者がこの種のことをやり続けることを奨励するので、使用しないことを望みます。代わりに、ActionListener オブジェクトを作成することを検討し、CardLayout にビューを変更するよう指示する必要があるボタンが必要なクラスにこのリスナーを渡します。このリスナーは、コンストラクターまたはセッター メソッドのパラメーターを介してこれらのクラスに渡すことができます。

于 2012-02-23T14:44:49.070 に答える