如何在外部类中的ActionListeners中切换CardLayout中的面板

时间:2016-03-29 11:54:36

标签: java swing actionlistener cardlayout

我在主类中有一个cardLayout,通过面板将Gui类添加到布局中,当按下Room1Button时,如何将主方法中的卡切换到Gui2卡

这是解决这个问题的最好方法,任何帮助都会得到解决。

主要方法

  import javax.swing.*;
  import java.awt.*;
  class Main
  {

CardLayout cl=new CardLayout();
GridBagConstraints gb=new GridBagConstraints();
JFrame frame=new JFrame("Frame");
JPanel panel =new JPanel();


Gui1 g1= Gui1();
Gui2 g2= Gui2();


public Main()
{
   panel.setLayout(cl);
   panel.add(g1, "1");
   panel.add(g2, "2");

    frame.add(panel);
    frame.pack();
    frame.setVisible(true);

    cl.show(panel,"1");

    //how would the actionlistner in the Gui1 class switch the layout to "2"

    cl.show(panel, "2");


}


public static void main(String[]param)
{
    new Main();


}


}

gui1班

 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.ActionEvent;
  import java.awt.event.ActionListener;
 import java.util.*;


 public class Gui1 extends JPanel implements ActionListener{


private JButton room1Button;

JPanel panel=new JPanel();

{



    setSize(1000,1000);

    panel.setVisible(true);

    room1Button=new JButton("Go the next Panel");

    this.setVisible(true);
    room1Button.addActionListener(this);
    add(room1Button);


}

@Override
public void actionPerformed(ActionEvent e) {

    if(e.getSource()==room1Button){
       Window w = SwingUtilities.getWindowAncestor(R0.this);
       w.setVisible(false);

    }

}
}

Gui2班

 public class Gui2 extends JPanel implements Actionlistener
 {
        // some code

 }

2 个答案:

答案 0 :(得分:3)

ActionEvent将包含生成事件的源对象。在这种情况下,JButton。因此,GUI1类中ActionListener的通用代码类似于:

JButton button = (JButton)e.getSource();
JPanel buttonPanel = (JPanel)button.getParent();
JPanel cardLayoutPanel = (JPanel)buttonPanel.getParent();
CardLayout layout = (CardLayout)cardLayoutPanel.getLayout();
layout.show(cardLayoutPanel, "2");

答案 1 :(得分:1)

希望这有帮助。

package cardlayoutsample;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CardLayoutSample {
    JFrame frame = new JFrame("CardLayout Demo");
    JPanel panelCont = new JPanel();
    JPanel panelFirst = new JPanel();
    JPanel panelSecond = new JPanel();
    JButton btnOne = new JButton("Switch");
    JButton btnTwo = new JButton("Back");

    CardLayout cl = new CardLayout();

    public CardLayoutSample(){
        panelCont.setLayout(cl);

        panelFirst.add(btnOne);
        panelSecond.add(btnTwo);
        panelFirst.setBackground(Color.red);
        panelSecond.setBackground(Color.blue);

        panelCont.add(panelFirst,"1");
        panelCont.add(panelSecond,"2");
        cl.show(panelCont, "1");

        btnOne.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent arg0){
            cl.show(panelCont, "2");
        }
    });

        btnTwo.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent arg0){
            cl.show(panelCont, "1");
        }
    }); 

        frame.add(panelCont);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
        frame.setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
    CardLayoutSample a = new CardLayoutSample();
    }
}

尝试播放此按钮,您可以在单击按钮时切换面板。

ActionListener的语法

Component.addActionListener(new ActionListener (){
@Override
  public void actionPerformed(ActionEvent e){
  //do this
 }
});

实施例

LogoutButton.addActionListener(new ActionListener (){
@Override
   public void actionPerformed(ActionEvent e){
   System.exit(0);
 }
  });