展开全部
完全根据逻辑写,按钮动作 可以通过,删除jp1,然后62616964757a686964616fe78988e69d8331333365643031添加jp2,然后刷新界面就可以了
效果图
参考代码如下import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FrameDemo extends JFrame implements ActionListener {
JPanel jp1,jp2;
JButton jb1,jb2;
public FrameDemo() {
jp1 =new JPanel();
jp1.setBackground(Color.YELLOW);
jb1 =new JButton("出发");
jb1.addActionListener(this);
jp1.add(jb1);
jp2=new JPanel();
jp2.setBackground(Color.RED);
jb2=new JButton("返回");
jb2.addActionListener(this);
jp2.add(jb2);
add(jp1);// 注意这里只添加了jp1 ,没有添加jp2
setTitle("测试窗口");
setSize(236, 200);//窗口大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭窗口就结束程序
setVisible(true);//显示
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
if(jb==jb1) {//如果是出发按钮被点击.
this.remove(jp1);//删除jp1
this.add(jp2);//添加jp2
SwingUtilities.updateComponentTreeUI(this);//刷新界面
}else if(jb==jb2) {//如果是返回按钮被点击
this.remove(jp2);
this.add(jp1);
this.validate();
SwingUtilities.updateComponentTreeUI(this);
}
}
public static void main(String[] args) {
new FrameDemo();
}
}
当然了, 还有其他思路,替换这种变化,比如弹出新窗口,关闭旧窗口等等.
如果有多个JPanel切换,效果像相册那样的话 , 也可以使用卡片布局
效果图
参考代码import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CardDemo extends JFrame implements ActionListener {
JButton jbNext, jbPre, jbFirst, jbLast;
CardLayout cl;//卡片布局
JPanel jpc;//主要的显示面板
public CardDemo() {
jpc = new JPanel();
cl = new CardLayout();
jpc.setLayout(cl);
for (int i = 0; i
JPanel jp = new JPanel();
JLabel jl =new JLabel("我是第"+(i+1)+"个标签");
jl.setFont(new Font("宋体", Font.BOLD, 20));
jl.setForeground(getRandomColor());
jp.add(jl);
jpc.add(jp);
}
add(jpc);
JPanel jps = new JPanel();
jbFirst= new JButton("首页");
jbFirst.addActionListener(this);
jbNext = new JButton("下一张");
jbNext.addActionListener(this);
jbPre = new JButton("前一张");
jbPre.addActionListener(this);
jbLast=new JButton("尾页");
jbLast.addActionListener(this);
jps.add(jbFirst);
jps.add(jbPre);
jps.add(jbNext);
jps.add(jbLast);
add(jps,BorderLayout.SOUTH);
setTitle("卡片布局");
setSize(380, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new CardDemo();
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jb = (JButton) e.getSource();
if (jb == jbNext) {
cl.next(jpc);//后一张
} else if (jb == jbPre) {
cl.previous(jpc);//前一张
} else if (jb == jbFirst) {
cl.first(jpc);//第一张
} else if (jb == jbLast) {
cl.last(jpc);//最后一张
}
}
private Color getRandomColor() {
return new Color((int) (Math.random() * 256), (int) (Math.random() * 256), (int) (Math.random() * 256));
}
}