我想通过按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请告诉我。 感谢
答案 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,我只想更改内容。我想我不会以正确的方式删除以前的内容...也许你可以告诉我一些提示。