我正在开发一个图形用户界面,它使用两个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;
}
}