2013-12-10 25 views
0

問題是,當我運行下面的代碼,我看到我的屏幕上的白色飛濺約100ms的可能,這是非常煩人:如何解決這個代碼中惱人的白色飛濺?

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編寫的等價代碼不會在同一個系統上顯示任何白色閃爍。我使用Ubuntu 12.04和Intel HD Graphics 3000,Java版本爲「1.7.0_45」。 請讓我知道如何解決這個問題。 我搜索了這個問題,但我發現的只是:「如何在java中創建啓動畫面?」這是我試圖避免的。

更新:解決方案:我不知道它爲什麼可以工作: 我將MyPanel擴展爲JFrame並將大部分功能都放在那裏。然後在run()中調用它並將其設置爲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

這裏沒有閃光 - 飛濺。 – Shiki

+0

發佈鏈接到圖像與白色飛濺,也許它有幫助。 – alex2410

回答

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); 
      } 
     }); 
    } 
} 
+0

感謝您的回覆。 pack()沒有解決我的問題。你的系統設置是什麼?操作系統和圖形卡? – T3086690

+0

用於'pack()';在使用英特爾Iris Pro 5200的Ubuntu 12.04上,對我來說看起來很正常。 – trashgod

+0

Whats your java version? – T3086690

2

雖然看起來正常我在Ubuntu 12.04 /英特爾光圈臨5200/Java 6中,我可以看到在減慢模擬器中運行的效果。在setVisible()似乎有幫助之前將框架的背景設置爲黑色。

frame.setBackground(Color.black);