2012-04-17 3 views
0

Я пытаюсь добавить JColorChooser на панель или прямо в основную область содержимого для простой программы рисования, которую я создаю (как часть задания).Как добавить JColorChooser в contentpane/Jpanel?

Я попытался найти примеры кода с использованием JColorChooser (например, http://docs.oracle.com/javase/tutorial/uiswing/components/colorchooser.html), но я не могу заставить его работать.

Соответствующий код:

import java.awt.BorderLayout; 
import javax.swing.JColorChooser; 
import javax.swing.JFrame; 
import javax.swing.colorchooser.ColorSelectionModel; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 


public class test extends JFrame 
{ 

JColorChooser jcc; 
ColorSelectionModel model = jcc.getSelectionModel(); 

public test() 
{ 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setLocation(100,100); 
    this.setSize(900,600); 

    getContentPane().add(jcc, BorderLayout.CENTER); 

    model.addChangeListener(new ChangeListener() 
    { 
    public void stateChanged(ChangeEvent e) { 
     System.out.println("Color: " + jcc.getColor()); 
    } 

    }); 

} 

public static void main(String[] args) 
{ 

    test m=new test(); 

} 

} 

Я использую затмение, и он не возвращает никаких ошибок в моем коде (красные линии), но когда я пытаюсь запустить его, я получаю это:

Exception in thread "main" java.lang.NullPointerException 
at test.<init>(test.java:14) --> this is "ColorSelectionModel model = jcc.getSelectionModel();" 
at test.main(test.java:38) --> this is "test m=new test();" 

Любая помощь вообще с этим будет принята с благодарностью!

ответ

3

Похоже, что jcc никогда не инициализируется.

JColorChooser jcc = new JColorChooser(); 

и несколько указателей. Имена классов Java должны быть капитализированы по соглашению, и в зависимости от того, насколько вы придирчивы к своему профессору, вам нужно показать JFrame в потоке swing (Thread Dispatch Thread). Вы должны do this anyway для хорошей обработки потоков графического интерфейса.

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      Test test = new Test(); 
      test.setVisible(true); 
     } 
}); 
+0

очень хороший ответ +1 – mKorbel

+0

Gah, я фактически инициализировал его в какой-то другой точке, но это дало мне еще одну ошибку. Однако я снова инициализировал его снова, и он работает как масляная техника. Я обычно использую классы, это было просто быстро, сложенное вместе, чтобы вставить его здесь, но спасибо за указатель в любом случае! Спасибо! – user1339253

+0

И это та часть, где вы нажмете зеленую галочку ;-) – Jim

Смежные вопросы