问题是,当我运行下面的代码时,我看到屏幕上出现白色大约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);
}
});
}
}
答案 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);