2017-01-22 10 views
-1

Я должен изменить шрифт метки, когда пользователь нажимает один из CheckBox es из GUI. Сейчас работает GUI, но когда я нажимаю флажок, я получаю длинное сообщение об ошибке в консоли, и текст не изменяется. Вот мой код до сих пор надеюсь, что вы можете мне помочь:Флажок установлен

package fontp; 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JOptionPane; 


public class FontP extends Frame{ 
    Label l1; 
    Checkbox c1, c2, c3, c4; 
    Panel p1, p2; 
    CheckboxGroup cbg; 

    FontP(String title) { 
     super(title); 
     ListenerB ab = new ListenerB(); 

     Panel p1 = new Panel(); 
     Panel p2 = new Panel(); 
     Label l1 = new Label("Some random text"); 
     CheckboxGroup cbg = new CheckboxGroup(); 
     Checkbox c1 = new Checkbox("Normal", cbg, false); 
     c1.addItemListener(ab); 
     Checkbox c2 = new Checkbox("Bold", cbg, false); 
     c2.addItemListener(ab); 
     Checkbox c3 = new Checkbox("Italic", cbg, false); 
     c3.addItemListener(ab); 
     Checkbox c4 = new Checkbox("Bold/Italic", cbg, false); 
     c4.addItemListener(ab); 

     p1.add(l1); 
     p2.add(c1); p2.add(c2); p2.add(c3); p2.add(c4); 

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

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

     addWindowListener(new WindowAdapter() { 
       public void windowClosing(WindowEvent ev) { 
        System.exit(0); 
       } 
     });  

    } 

    class ListenerB implements ItemListener { 
     public void itemStateChanged(ItemEvent ev) { 
      if(c1.getState() == true) { 
       Font f = new Font(l1.getText(), Font.PLAIN, 12); 
       l1.setFont(f);      
      } 
      else if(c2.getState() == true) { 
       Font f = new Font(l1.getText(), Font.BOLD, 12); 
       l1.setFont(f); 
      } 
      else if(c3.getState() == true) { 
       Font f = new Font(l1.getText(), Font.ITALIC, 12); 
       l1.setFont(f); 
      } 
      else if(c4.getState() == true) { 
       Font f = new Font(l1.getText(), Font.BOLD | Font.ITALIC, 12); 
       l1.setFont(f); 
      }  
     } 
    } 
} 
+2

Вам нужно показать длинное сообщение об ошибке (я думаю, это стек). Тогда мы могли бы помочь. –

ответ

0

Вы не инициализировать поля c1, c2, ... в конструкторе, но определить новые переменные. Таким образом, поля c1, c2, ... по-прежнему являются нулевыми, и это вызывает исключение. Сделайте это в своем конструкторе:

p1 = new Panel(); 
    p2 = new Panel(); 
    l1 = new Label("Some random text"); 
    cbg = new CheckboxGroup(); 
    c1 = new Checkbox("Normal", cbg, false); 
    c1.addItemListener(ab); 
    c2 = new Checkbox("Bold", cbg, false); 
    c2.addItemListener(ab); 
    c3 = new Checkbox("Italic", cbg, false); 
    c3.addItemListener(ab); 
    c4 = new Checkbox("Bold/Italic", cbg, false); 
    c4.addItemListener(ab); 
+0

Это сработало благодаря вашему быстрому ответу :). – Fishlex