2014-10-22 53 views
0

我目前正在学习java,而现在我已经陷入了这个问题。 我已经重新安装了java(最新版本,1.8.0_25),但问题仍然存在。java中奇怪的JCompnent视觉错误

每当我尝试从JComponent类添加任何可视化的东西时,它会得到这个奇怪的错误,我无法弄清楚是什么导致了它。

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

class Start { 

    public static void main(String[] args) { 

     JFrame frame = new JFrame("Hello!"); 
     JButton button = new JButton("Click me!"); 
     JLabel label = new JLabel("woah"); 
     JTextField textField = new JTextField(12); 

     frame.setDefaultCloseOperation(3); 
     frame.setVisible(true); 
     frame.setSize(250, 250); 

     JPanel p1 = new JPanel(); 
     JPanel p2 = new JPanel(); 

     p1.setLayout(new FlowLayout()); 

     p1.add(textField); 
     p1.add(label); 

     p2.add(button); 

     frame.add(p1, BorderLayout.NORTH); 
     frame.add(p2, BorderLayout.SOUTH); 

    } 


} 

And here is a link to a picture of the result.

回答

0
  • 开始通过确保你的事件指派线程的上下文中启动程序,请参阅Initial Threads了解更多详情。
  • 不要使窗口可见,直到你准备它的初始视图
  • 不要依赖于幻数(frame.setDefaultCloseOperation(3)),他们没有多大意义对于大多数人来说,值可以改变,使用一个常量,例如frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

例如

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.FlowLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

class Start { 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Hello!"); 
       JButton button = new JButton("Click me!"); 
       JLabel label = new JLabel("woah"); 
       JTextField textField = new JTextField(12); 

       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       JPanel p1 = new JPanel(); 
       JPanel p2 = new JPanel(); 

       p1.setLayout(new FlowLayout()); 

       p1.add(textField); 
       p1.add(label); 

       p2.add(button); 

       frame.add(p1, BorderLayout.NORTH); 
       frame.add(p2, BorderLayout.SOUTH); 

       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

      } 
     }); 
    } 
} 

还有与Java 8某些机器上的一个问题,但是这应该纠正他们的“最” ......

+0

它没有解决这个问题,但我在另一台机器上测试过,它工作正常,所以我猜这是你所说的java 8的问题。感谢您的快速回答! – Pontusblue 2014-10-24 16:09:04