java - 在 Java 中重用 swing 组件

标签 java swing

如果在组件设置为不可见后更改了某个组件,则仅在组件设置为可见后才重新绘制。这会导致闪烁(旧图形在几毫秒内可见):

package test;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;

class ReusingWindow extends JWindow {

    JLabel label;

    public ReusingWindow() {

        JPanel panel = new JPanel(new BorderLayout());
        panel.setPreferredSize(new Dimension(300, 200));
        panel.setBackground(Color.WHITE);
        panel.setBorder(BorderFactory.createLineBorder(Color.GRAY));
        label = new JLabel("Lazy cat");
        label.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
        label.setBackground(Color.red);
        label.setOpaque(true);
        panel.add(label, BorderLayout.WEST);
        add(panel);

        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        ReusingWindow window = new ReusingWindow();

        StringBuilder sb = new StringBuilder();
        sb.append("<html>");
        for (int a = 0; a < 10; a++){
            sb.append("Not very lazy cat. Extremelly fast cat.<br>");
        }
         sb.append("</html>");

        while (true) {

            window.label.setText("Lazy cat");
            window.setVisible(true);
            pause();
            window.setVisible(false);
            pause();

            window.label.setText(sb.toString());
            window.setVisible(true);
            pause();
            window.setVisible(false);
            pause();
        }
    }

    private static void pause() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(ReusingWindow.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

除了每次在设置新窗口可见之前创建新窗口之外,还有什么解决办法吗?

最佳答案

问题可能出在您的“重用窗口”上。使用像

这样的简单类
static class ReusingWindow extends JFrame {
    JLabel label = new JLabel();
    public ReusingWindow() {
        add(label);
        setBounds(0, 0, 100, 100);
    }
}

我没有观察到任何闪烁。

关于java - 在 Java 中重用 swing 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18824383/

相关文章:

java - 如何在使用 ActionListener 按钮和 GUI 时将项目添加到数组列表?

java - 双数组丢失信息

Java Swing : Read many images files without memory problems?

Java HashMap 重复存储桶条目

java - 您的应用程序类如何知道应用程序何时完成?

java - 无法在不损坏文件和阻塞 while 循环的情况下保持套接字打开

java - 从 JTable 行设置变量的字符串

java - Android 工具栏设置背景颜色为半透明颜色

java - Spring - 应用程序初始化两次?

Java,在框架的背景图像上放置一个面板