JCombobox - getSelectedItem() - > nullpointexception

时间:2015-09-16 14:42:45

标签: java swing nullpointerexception actionlistener jcombobox

我正在开发一个图形用户界面,它使用两个JTextFields(第三个不应该与这个问题相关)和一个JComboBox。如果按下按钮“Speichern”,ComboBox中的选定项目应决定将哪个Textfield添加到Arraylist“Gewínner”。

我不允许为Listener使用内部类。

现在问题:每当我的ActionPerformed方法被使用时,我在getGewinner方法中得到一个NullpointerException。 在System.out.print的帮助下,我发现得到指向的null是调用Winner.getSelectedItem()。toString()中的变量Winner。

问题:为什么Winner == null?它不应该在构造函数中启动吗?我怎样才能改变它?

问题代码:

GUI:

public class ErgebnisFrame extends JFrame{

private JLabel Spieler1, Spieler2, Gewinner, Punkte;
private JTextField one, two;
private JComboBox <String> Winner;
private JButton Abbruch, Speichern;

public ErgebnisFrame(){
    super();
    this.setVisible(true);
    this.setLayout(new GridLayout(5,2));
    this.setSize(300,400);  
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JPanel Spieler1 = new JPanel();
    Spieler1.add(new JLabel("Name von Spieler 1"));
    this.add(Spieler1);

    JTextField one = new JTextField(1);
    this.add(one);

    JPanel Spieler2 = new JPanel();
    Spieler2.add(new JLabel("Name von Spieler 2"));
    this.add(Spieler2);

    JTextField two = new JTextField(1);
    this.add(two);

    JPanel Gewinner = new JPanel();
    Gewinner.add(new JLabel("Gewinner"));
    this.add(Gewinner);

    JComboBox<String> Winner = new JComboBox <String>();
    Winner.addItem("Spieler 1");
    Winner.addItem("Spieler 2");
    this.add(Winner);

    JPanel Punkte = new JPanel();
    Punkte.add(new JLabel("Punkte des Gewinners"));
    this.add(Punkte);

    JTextField points = new JTextField(1);
    this.add(points);

    JButton Abbruch = new JButton("Abbrechen");
    JButton Speichern = new JButton("Speichern");
    Speichern.setActionCommand("Speichern");
    Speichern.addActionListener(new SpeichernListener(this));
    this.add(Abbruch);
    this.add(Speichern);
}

public String getSpielerName(int Par){
    switch(Par){
        case 1: return one.getText();
        case 2: return two.getText();
        default: return "Es gibt nur zwei Spieler";     
    }
}

public String getSpieler1Name(){
    return one.getText();
}

public String getSpieler2Name(){
    return two.getText();
}

public String getGewinner(){ 
    return Winner.getSelectedItem().toString();
}

public static void main (String [] args){

    ErgebnisFrame Haupt = new ErgebnisFrame();


    }
}

听众:

public class SpeichernListener implements ActionListener {

private ErgebnisFrame Frame;
private static List <String> gewinner = new ArrayList <String>();

public SpeichernListener(ErgebnisFrame frame){
    this.Frame = frame;
}

public void actionPerformed(ActionEvent e) {
    if(e.getActionCommand().equals("Speichern")){
        if(Frame.getGewinner().equals("Spieler 1")){
            gewinner.add(Frame.getSpieler1Name());
        }
        else{
            gewinner.add(Frame.getSpieler2Name());
        }
    }

}

public List <String> getGewinner(){
    return gewinner;
}


}

0 个答案:

没有答案