0

我想通过按下 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。对不起,这个问题很长,我是这方面的初学者。如果有任何其他方法可以更改 JPanel,请告诉我。谢谢

4

2 回答 2

0

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

这个:

frame.getContentPane();

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

setVisible() 可以工作,但如果您有多个面板,最上面的面板可以“隐藏”其下方的面板,从而导致 setVisible() 产生意外结果。挥杆很艰难。这是支持这一点的文档: 顶级容器

于 2013-07-28T16:08:23.173 回答
0

我试着做一个装载机,如果你告诉我的是这个,我想知道,但也许它无论如何都可以工作。

    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 时,我只想更改内容。我认为我没有以正确的方式删除以前的内容窗格......也许你可以告诉我一些提示。

于 2013-07-29T00:01:28.360 回答