java frame update_java-再次更新JFrame

下面显示的以下代码会将3个JLabel添加到JFrame,然后删除3个JLabel.

2秒后,它将重新绘制3个JLabel.

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

@SuppressWarnings("serial")

public class RepaintFrameTest extends JFrame {

private JPanel panel = new JPanel();

private JLabel labelOne = new JLabel("label1");

private JLabel labelTwo = new JLabel("label2");

private JLabel labelThree = new JLabel("label3");

public RepaintFrameTest() {

panel.add(labelOne);

panel.add(labelTwo);

panel.add(labelThree);

add(panel);

pack();

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setSize(1024,768);

setLocationRelativeTo(null);

setVisible(true);

}

public static void main(String args[]) {

RepaintFrameTest frameOne = new RepaintFrameTest();

frameOne.getContentPane().removeAll();

frameOne.getContentPane().validate();

frameOne.getContentPane().repaint();

new Thread(new RepaintThread()).start();

}

}

class RepaintThread implements Runnable {

@Override

public void run() {

try {

Thread.sleep(2000);

}catch (InterruptedException interruptedException) {

System.out.println( "Thread is interrupted when it is sleeping" +interruptedException);

}

RepaintFrameTest frameTwo = new RepaintFrameTest();

frameTwo.getContentPane().validate();

frameTwo.getContentPane().repaint();

}

}

我面临的一个小问题是,它正在重新绘制到新的frame(frameTwo)而不是旧的frame(frameOne).

如何使它重新粉刷现有框架而不是重新粉刷到新框架?

最佳答案

> Simpy使用CardLayout交换视图.

>使用Swing计时器而不是当前的后台线程,因为您当前的代码对Swing线程而言并不安全,并且会带来有害的不可预测的线程异常.

>我将给主JPanel提供CardLayout,然后添加一个JLabel来保存具有合适String常量的JPanel.

>然后,我将使用JPanel将其添加到主CardLayout中,将一个空的JLabel添加至add方法中的另一个String常量.即添加(new JLabel(),BLANK_COMPONENT);

>然后,在Swing计时器中,只需在CardLayout对象上调用next(),传入使用CardLayout的主要组件:cardLayout.next(myMainJPanel);

例如,

import java.awt.CardLayout;

import java.awt.Dimension;

import java.awt.event.*;

import javax.swing.*;

public class RepaintTest extends JPanel {

private static final int PREF_W = 400;

private static final int PREF_H = PREF_W;

private static final int LABEL_COUNT = 3;

private static final String LABEL_PANEL = "label panel";

private static final Object BLANK_COMPONENT = "blank component";

private static final int TIMER_DELAY = 2000;

private CardLayout cardLayout = new CardLayout();

public RepaintTest() {

JPanel labelPanel = new JPanel();

for (int i = 0; i < LABEL_COUNT; i++) {

labelPanel.add(new JLabel("Label " + (i + 1)));

}

setLayout(cardLayout);

add(labelPanel, LABEL_PANEL);

add(new JLabel(), BLANK_COMPONENT);

new Timer(TIMER_DELAY, new TimerListener()).start();

}

@Override

public Dimension getPreferredSize() {

return new Dimension(PREF_W, PREF_H);

}

private class TimerListener implements ActionListener {

@Override

public void actionPerformed(ActionEvent e) {

cardLayout.next(RepaintTest.this);

}

}

private static void createAndShowGui() {

RepaintTest mainPanel = new RepaintTest();

JFrame frame = new JFrame("RepaintTest");

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

frame.getContentPane().add(mainPanel);

frame.pack();

frame.setLocationByPlatform(true);

frame.setVisible(true);

}

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

createAndShowGui();

}

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个简单的 Java Frame 类实现图书馆管理系统的示例代码。 ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class LibraryManagementSystem extends JFrame implements ActionListener { // 声明组件 JLabel titleLabel, bookNameLabel, authorLabel, publisherLabel, yearLabel, quantityLabel; JTextField bookNameField, authorField, publisherField, yearField, quantityField; JButton addButton, deleteButton, updateButton, searchButton; public LibraryManagementSystem() { // 设置窗口标题 setTitle("图书馆管理系统"); // 设置窗口大小 setSize(400, 300); // 设置窗口布局为流布局 setLayout(new FlowLayout()); // 初始化组件 titleLabel = new JLabel("图书信息管理"); bookNameLabel = new JLabel("书名:"); authorLabel = new JLabel("作者:"); publisherLabel = new JLabel("出版社:"); yearLabel = new JLabel("出版年份:"); quantityLabel = new JLabel("数量:"); bookNameField = new JTextField(20); authorField = new JTextField(20); publisherField = new JTextField(20); yearField = new JTextField(20); quantityField = new JTextField(20); addButton = new JButton("添加"); deleteButton = new JButton("删除"); updateButton = new JButton("更新"); searchButton = new JButton("查询"); // 添加组件到窗口中 add(titleLabel); add(bookNameLabel); add(bookNameField); add(authorLabel); add(authorField); add(publisherLabel); add(publisherField); add(yearLabel); add(yearField); add(quantityLabel); add(quantityField); add(addButton); add(deleteButton); add(updateButton); add(searchButton); // 添加按钮的点击事件监听器 addButton.addActionListener(this); deleteButton.addActionListener(this); updateButton.addActionListener(this); searchButton.addActionListener(this); // 设置窗口可见 setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // 处理按钮点击事件 if (e.getSource() == addButton) { // 添加图书 // TODO: 实现添加图书的逻辑 } else if (e.getSource() == deleteButton) { // 删除图书 // TODO: 实现删除图书的逻辑 } else if (e.getSource() == updateButton) { // 更新图书 // TODO: 实现更新图书的逻辑 } else if (e.getSource() == searchButton) { // 查询图书 // TODO: 实现查询图书的逻辑 } } public static void main(String[] args) { // 创建图书馆管理系统窗口 new LibraryManagementSystem(); } } ``` 这是一个简单的示例代码,你可以根据自己的实际需求进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值