java swing两个内容切换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java swing两个内容切换相关的知识,希望对你有一定的参考价值。

假如,有一个swing窗口,窗口里面是一个信息录入界面。需要添加一个按钮,点击后会切换到另一个界面,假设是一个查询界面。两边可以来回切换。
回答越详细越好

import java.awt.*;
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 事件问题

我用JAVA的swing创建了一个窗口程序,拖了一个jTable控件在窗体上,怎样把数据库中的内容显示在Table上?

《Java Swing》第3节:布局管理器

java编程采用图形界面实现两个内容的交换,图形界面如下图

java swing编程问题:一个jframe中添加一个jpanel后,为jpanel添加一个滚动条,当jpanel中内容过多时滑动