0

オブジェクト (パネル) 自体からJPanelイベント トリガーを取得する複数のクラス間のナビゲーションのコーディング方法を誰か教えてもらえますか? JButtonについて読みましCardLayoutた。パネルは、親パネルで発生しているイベントからスワップできます。私が達成したいのは、パネルに埋め込まれたボタンをクリックすると、ボタンが消えるか、目的のパネルが表示されるはずです。解決策が見つからないようです。

4

2 に答える 2

3

CardLayoutには、カード内の子のアクションからカードを切り替えることを妨げるものは何もありません。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Testing extends JFrame {

    private JPanel cardHolder;
    private CardLayout cards;
    private static final String cardA = "A";
    private static final String cardB = "B";

    private class Switcher implements ActionListener{
        String card;        
        Switcher(String card) { this.card = card; }
        @Override
        public void actionPerformed(ActionEvent e) {
            cards.show(cardHolder, card);
        }
    }

    private void run() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel pa = new JPanel();
        JButton ba = new JButton("Switch to B");
        ba.addActionListener(new Switcher(cardB));
        pa.add(ba);
        pa.setBackground(Color.CYAN);

        JPanel pb = new JPanel();
        JButton bb = new JButton("Switch to A");
        bb.addActionListener(new Switcher(cardA));
        pb.add(bb);
        pb.setBackground(Color.MAGENTA);

        cardHolder = new JPanel();
        cards = new CardLayout();
        cardHolder.setLayout(cards);
        cardHolder.add(pa, cardA);
        cardHolder.add(pb, cardB);
        add(cardHolder);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                @Override
                public void run() {
                    new testing().run();
                }
            });
        } catch (Exception ex) { }
    }
}
于 2012-06-05T17:41:44.647 に答える
2

カード間の切り替えにJButtonを使用する代わりに、JMenuItems で JMenu を使用できます。

于 2012-06-05T17:33:38.957 に答える