调整大小时如何避免带有边框的Java窗口闪烁?

时间:2013-03-31 17:17:06

标签: java swing resize flicker window-resize

import javax.swing.*;

public class Main {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createMainWindow();
            }
        });
    }

    private static void createMainWindow() {
        JFrame mainFrame = new JFrame("Flicker Teste");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.add(new MainPanel());
        mainFrame.pack();
        mainFrame.setSize(400, 400);
        mainFrame.setVisible(true);
    }
}

Main.java

import javax.swing.*;
import java.awt.*;

public class MainPanel extends JPanel {
    public MainPanel() {
        setBorder(BorderFactory.createLineBorder(Color.red)); //If I comment this line the diagonal is streteched on the border.
        setBackground(Color.green);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawLine(0, 0, 5000, 5000);
    }
}

MainPanel.java

这两个文件是重现调整大小闪烁错误的代码。 当您快速调整大小时,重复边框会导致可怕的闪烁。 如果没有边框,则对角线的最后一个像素接触窗口的边缘 重复,好像“空白边框”包括重复边缘的像素。

有人知道如何阻止这种可怕的闪烁吗? 我已经搜索了解决方案,但我找不到任何人。

0 个答案:

没有答案