java swing两个内容切换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java swing两个内容切换相关的知识,希望对你有一定的参考价值。
假如,有一个swing窗口,窗口里面是一个信息录入界面。需要添加一个按钮,点击后会切换到另一个界面,假设是一个查询界面。两边可以来回切换。
回答越详细越好
import java.awt.event.*;
import javax.swing.*;
public class ChangFrameDemo extends JFrame
JPanel jp1, jp2;//2个JPanel对象
JButton jb1;
boolean flag;//用于判断是打开第1还是第2个JPanel
public ChangFrameDemo()
jp1 = new JPanel();
jp1.add(new JLabel("信息录入"));
jp1.setBackground(Color.YELLOW);
jp2 = new JPanel();
jp2.add(new JLabel("信息查询"));
jp2.setBackground(Color.LIGHT_GRAY);
jb1 = new JButton("切换内容");
JPanel jp3 = new JPanel();
jp3.add(jb1);
add(jp1);
add(jp3, BorderLayout.SOUTH);
setTitle("切换内容窗口");//标题
setSize(380, 300);//大小
setLocationRelativeTo(null);//居中
setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭时退出
setVisible(true);//可见
jb1.addActionListener(new ActionListener() //事件响应
@Override
public void actionPerformed(ActionEvent e)
Container pane = jb1.getRootPane().getContentPane();//得到JFrame的底层Pane
flag = !flag;
if (flag)
pane.remove(jp1);//删除jp1
pane.add(jp2);//添加jp2
else
pane.remove(jp2);
pane.add(jp1);
pane.validate();//重构界面
pane.repaint();//重新绘制
);
public static void main(String[] args)
new ChangFrameDemo();
参考技术A 打开第2个FRAME和打开第1个一样
如何从 Java Swing 的第一帧开始一个 .gif 文件?
【中文标题】如何从 Java Swing 的第一帧开始一个 .gif 文件?【英文标题】:How to start a .gif file from the first frame in Java Swing? 【发布时间】:2017-09-15 22:28:20 【问题描述】:我正在使用两个.gif
文件并在一个框架中切换它们。
private Image currentGIF;
if(x == 0) gif = "image1.gif"
if(x == 1) gif = "image2.gif"
ImageIcon reference = new ImageIcon(gif);
currentGIF = reference.getImage();
--
public void paint(Graphics g)
Graphics2D graphic = (Graphics2D) g;
graphic.drawImage(gif, 0, 0, this);
g.dispose();
--
@Override public void actionPerformed(ActionEvent arg0)
repaint();
这是我的问题:
image1.gif
从第一帧开始。
image2.gif
从第一帧开始。
image1.gif
从随机帧开始。
似乎.gif
一直在运行,当我再次显示image1
时,它并没有从第一帧开始。
【问题讨论】:
您可能还想看看Image#flush
【参考方案1】:
问题:
-
永远不要覆盖 JFrame 的paint 方法,而是在 JPanel 的 paintComponent 方法中进行绘图。
切勿处理 JVM 为您的绘制方法(paint 或 paintComponent)提供的 Graphics 对象,因为这会破坏绘制链。
不要在绘画方法中更改 GUI 的状态(例如交换图像)。而是在某种类型的侦听器中执行此操作,该侦听器对您要用于更改图像的事件做出反应 - 例如,如果按钮按下时发生更改,则为按钮的 ActionListener,如果图像发生更改,则为 Swing Timer 的 ActionListener在计时器更改时。
如果这不是动画 GIF,强烈考虑将图像制作成 ImageIcon,然后简单地将使用
setIcon(...)
的 JLabel 图标再次与您希望使用的侦听器交换。
【讨论】:
以上是关于java swing两个内容切换的主要内容,如果未能解决你的问题,请参考以下文章
java swing问题:JFrame根面板不透明且可见,内容面板不透明且可见,层面板透明且可见,
我用JAVA的swing创建了一个窗口程序,拖了一个jTable控件在窗体上,怎样把数据库中的内容显示在Table上?
java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动