

Javaのswingでラベルクリックによる画面遷移をしたいです、下記のコードのlabel1にクリックをしてpanel1からpanel2への画面遷移、panel2のlabel2をクリックし、panel3へ画面遷移、panel3のlabel3をクリックし、panel1へ画面遷移、showメソッドを使用して任意のパネルに遷移したいです。  
上記のようにするにはどうしたらいいですか。  
現在実行するとpanel1でラベルをクリックするとpanel3へ遷移してしまいます。  
APIドキュメントを見たのですが知識不足でわかりません。

[code]

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    
    public class Layout2 extends JFrame implements MouseListener{
        JLabel label1;
        JLabel label2;
        JLabel label3;
        CardLayout layout;
        JPanel panel1;
        JPanel panel2;
        JPanel panel3;
    
        public static void main(String[] args) {
            Layout2 frame = new Layout2("タイトル");
            frame.setVisible(true);
        }
        Layout2(String title){
            setTitle("タイトル");
            setBounds(100,100,250,300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            label1 = new JLabel("クリック");
            panel1 = new JPanel();
            panel1.add(label1);
            label1.addMouseListener(this);
    
            panel2 = new JPanel();
            label2 =new JLabel("二枚目");
            label2.addMouseListener(this);
            panel2.add(label2);
    
            panel3 = new JPanel();
            label3 =new JLabel("三枚目");
            label3.addMouseListener(this);
            panel3.add(label3);
    
    
            layout = new CardLayout();
    
            Container contentPane = getContentPane();
            contentPane.setLayout(layout);
            contentPane.add(panel1,"panel");
            contentPane.add(panel2,"panel2");
            contentPane.add(panel3,"panel3");
        }
    
        @Override
        public void mouseClicked(MouseEvent e) {
    
            layout.show(getContentPane(),"panel2");
            layout.show(getContentPane(),"panel3");
        }
    
        @Override
        public void mousePressed(MouseEvent e) {
            // TODO 自動生成されたメソッド・スタブ
    
        }
    
        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO 自動生成されたメソッド・スタブ
    
        }
    
        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO 自動生成されたメソッド・スタブ
    
        }
    
        @Override
        public void mouseExited(MouseEvent e) {
            // TODO 自動生成されたメソッド・スタブ
    
        }
    
    }
    
[/code]


CC BY-SA 4.0
2019-08-23T05:58:27.160
57562
2019-12-22T13:02:15.220
2019-08-23T08:38:50.093
question
java swing
javaのswingで画面遷移をしたいです


MouseAdapterと無名クラスを使うのがシンプルです。

[code]

    import java.awt.CardLayout;
    import java.awt.Container;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    
    public class Layout2 extends JFrame {
        JLabel label1;
        JLabel label2;
        JLabel label3;
        CardLayout layout;
        JPanel panel1;
        JPanel panel2;
        JPanel panel3;
    
        public static void main(String[] args) {
            Layout2 frame = new Layout2("タイトル");
            frame.setVisible(true);
        }
    
        Layout2(String title) {
            setTitle("タイトル");
            setBounds(100, 100, 250, 300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            label1 = new JLabel("クリック");
            panel1 = new JPanel();
            panel1.add(label1);
            label1.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel2");
                }
            });
    
            panel2 = new JPanel();
            label2 = new JLabel("二枚目");
            label2.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel3");
                }
            });
            panel2.add(label2);
    
            panel3 = new JPanel();
            label3 = new JLabel("三枚目");
            label3.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    layout.show(getContentPane(), "panel");
                }
            });
            panel3.add(label3);
    
            layout = new CardLayout();
    
            Container contentPane = getContentPane();
            contentPane.setLayout(layout);
            contentPane.add(panel1, "panel");
            contentPane.add(panel2, "panel2");
            contentPane.add(panel3, "panel3");
        }
    
    }
    
[/code]

リスナーは共用のままでクリックされたコンポーネントを識別する必要がある場合は `e.getSource() == label1`
のような条件で判断できます。


CC BY-SA 4.0
2019-08-23T07:38:54.980
57564
2019-08-23T07:38:54.980
241
57562
answer