2014-10-22 1 views
0

В настоящее время я изучаю Java, и я уже давно застрял в этой проблеме. Я переустановил java (последняя версия, 1.8.0_25), но проблема все еще сохраняется.Визуальная ошибка Weird JCompnent в java

Всякий раз, когда я пытаюсь добавить что-либо визуальное из класса 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
  • Start, убедившись, что вы запускаете свою программу в контексте событий Диспетчерская тему см 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