按JButton后更改JPanel

时间:2013-07-28 16:01:26

标签: jpanel jbutton

我想通过按JButton来更改JPanel。好吧,我可以这样做一次,但问题是当我想回到之前的JPanel。这是我的代码:

public class MindCreations {

public static void main(String[] args){

    Adj0 object1= new Adj0();
    object1.setSize(500, 600);
    object1.setVisible(true);
    object1.setLocation(700,300);
} }

  public class Adj0 extends JFrame{
           public Adj0(){
     super("MindCreations");
     this.setLayout(null);

     adj0panel object9=new adj0panel();
     add(object9.adj0panel());
     Isa object10=new Isa();
     add(object10.Isa());
    } }

   public class adj0panel {
           private JButton quarto;
           private FlowLayout layout;

        public JPanel adj0panel(){

        final JPanel panel=new JPanel();
        JLabel jl=new JLabel();
        panel.setLayout(layout);
            quarto= new JButton("Tabela ISA");
            quarto.setBounds(50,490,400,20);
            jl.setIcon(new ImageIcon("2.png"));
        jl.setBounds(40, 50, 413, 300);

            panel.add(jl);
            panel.add(quarto);

            quarto.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent event){
        Isa object3=new Isa();
        panel.setVisible(false);
    }
      });
return panel;
   }
 }

  public class Isa {
     public JPanel Isa(){

            final JPanel panel1=new JPanel();

    panel1.setLayout(layout);
    panel1.setBounds(0, 0, 500, 600);
    panel1.setBackground(Color.WHITE);
    panel1.setVisible(true);

          JButton retroceder=new JButton("Retroceder");
    retroceder.setBounds(300, 460, 90, 20);

    retroceder.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
            adj0panel object4=new adj0panel();
            panel1.setVisible(false);

            }}
    );

          panel1.add(retroceder);
    return panel1;
}}

我想按下按钮“retroceder”,我想从adj0panel类转到JPanel。很抱歉这个问题很长,我是这个问题的佼佼者。 如果有任何其他方式来改变JPanels请告诉我。 感谢

2 个答案:

答案 0 :(得分:0)

首先,您可能已经想到,JFrame只能在其容器中包含一个JPanel。

此:

frame.getContentPane();

被认为是“顶级”JPanel。您可以在顶层添加和删除面板,就像您现在所做的一样。为了跟踪多个面板,我会得到一个Stack和一个push()pop()方法连接到你的按钮,它首先将所有面板推到主JPanel上,然后从堆栈中弹出并从中删除相应的JPanel主容器中的众所周知的堆栈。

setVisible()可以工作,但是如果你有多个面板,最顶层的面板可以“隐藏”自身下面的面板,导致setVisible()产生意外结果。挥杆很难。 这是支持这个的文档: Top-Level Containers

答案 1 :(得分:0)

我试着制作一个装载机,如果是你告诉我的那个idk,但也许它无论如何都可行。

    public class Adj0 extends JFrame{

     private FlowLayout layout; 

      public Adj0(){
    super("MindCreations");
    this.setLayout(layout);
    this.setSize(500, 600);
    this.setLocation(700,300);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    dsa(1);

    }

public void dsa(int test){
    Isa object10 =new Isa();    
    adj0panel object0 =new adj0panel();

    if(test==1){
    this.getContentPane().removeAll();
    this.setContentPane(object0.adj0panel());
    this.getContentPane().revalidate();
    repaint();
    this.setLayout(null);

}
    else if(test==2){
        this.getContentPane().removeAll();
        this.setContentPane(object10.Isa());
        this.getContentPane().revalidate();
        this.setVisible(true);
        repaint();
        this.setLayout(null);

    }
    }

然后在按钮中我写了这个:

       quarto.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent event){

        Adj0 object3=new Adj0();
        object3.dsa(2);

问题是,当我按下按钮时,这会创建一个带有我想要的面板的新Jframe,我只想更改内容。我想我不会以正确的方式删除以前的内容...也许你可以告诉我一些提示。