如何在此代码中修复烦人的白色飞溅?

时间:2013-12-10 12:01:18

标签: java linux swing splash

问题是,当我运行下面的代码时,我看到屏幕上出现白色大约100毫秒,这非常烦人:

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

public class MyPanel extends JPanel {

    public MyPanel() {
        this.setBackground(Color.black);
        JTextArea jtext = new JTextArea(10, 20);
        jtext.setBackground(Color.black);
        jtext.setForeground(Color.white);
        jtext.setText("some stuff here");
        add(jtext);
        add(new JButton("some button"));
        // TODO: gui elements
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("MyPanel");
                frame.getContentPane().add(new MyPanel());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
                frame.setVisible(true);
            }
        });
    }
}

我的整个工作设置都是黑暗主题。使用Qt用C ++编写的等效代码不会在同一系统上显示任何白色飞溅。我正在使用Ubuntu 12.04和Intel HD Graphics 3000,java版本“1.7.0_45”。 请告诉我这是如何解决的。 我搜索了这个问题,但我发现的只是:“如何在java中创建启动画面?”这是我想避免的。

更新:解决方案:我不确定为什么会这样: 我将MyPanel扩展到JFrame并将大部分功能放在那里。然后在run()中调用它并将visible设置为true。 这是代码:

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

public class MyPanel extends JFrame {

    public MyPanel() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setBackground(Color.black);
        JTextArea jtext = new JTextArea(10, 20);
        jtext.setBackground(Color.black);
        jtext.setForeground(Color.white);
        jtext.setText("some stuff here");
        getContentPane().add(jtext);

        // TODO: gui elements

        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setSize(350, 250);
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                MyPanel mypanel = new MyPanel();
                mypanel.setVisible(true);
            }
        });
    }
}

2 个答案:

答案 0 :(得分:2)

我没有在这里看到“白色闪光”,但请尝试在框架上调用pack()的更改代码。

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

public class MyPanel extends JPanel {

    public MyPanel() {
        this.setBackground(Color.black);
        JTextArea jtext = new JTextArea(10, 20);
        jtext.setBackground(Color.black);
        jtext.setForeground(Color.white);
        jtext.setText("some stuff here");
        add(jtext);
        add(new JButton("some button"));
        // TODO: gui elements
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("MyPanel");
                frame.getContentPane().add(new MyPanel());
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

                frame.pack();

                frame.setVisible(true);
            }
        });
    }
}

答案 1 :(得分:2)

虽然在Ubuntu 12.04 / Intel Iris Pro 5200 / Java 6上看起来很正常,但我可以通过在慢速模拟器中运行来看到效果。在setVisible()之前将框架的背景设置为黑色似乎有帮助。

frame.setBackground(Color.black);