所以这是我的计划......这是进入和列出马拉松运动员的一种方式。现在我在使用" Ny"时遇到错误。按钮(http://gyazo.com/e29517af6befd6242d86e6fe1dc5aae1)。这是错误代码:http://gyazo.com/9f80885d41db38cfa5502fe911f6a893。
我认为问题出在" Form"小组和听众。某处可能存在无法访问的代码?前几天我有这个工作,但我丢失了代码。现在它没有用。 这个想法是" ny"按钮向用户显示一个面板" Form",但我得到了rror。
我是一个巨大的菜鸟,所以我希望它有一些明显的语法错误我似乎无法发现。 任何反馈都表示赞赏。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class Maraton extends JFrame{
JTextArea display;
JButton visa;
ArrayList <Tävlande> list = new ArrayList <Tävlande>();
Maraton(){
super("Kista Maraton");
display = new JTextArea();
display.setEditable(false);
add(display, BorderLayout.CENTER);
add(new JScrollPane(display),BorderLayout.CENTER);
setLocationRelativeTo(null);
setSize(300, 400);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel nedre = new JPanel ();
JPanel höger = new JPanel();
add(nedre, BorderLayout.SOUTH);
add(höger, BorderLayout.EAST);
höger.setLayout(new BoxLayout(höger, BoxLayout.Y_AXIS));
nedre.setBackground( new Color(246,246,246) );
nedre.setBorder(BorderFactory.createLineBorder(new Color(200,200,200)));
JButton ny = new JButton("Ny");
ny.addActionListener(new NyLis());
JButton visa = new JButton("Visa");
visa.addActionListener(new VisaLis());
visa.setEnabled(false);
JButton nyTid = new JButton("Ny Tid");
nedre.add(ny);
nedre.add(visa);
nedre.add(nyTid);
JRadioButton StartNrRb = new JRadioButton("Startnr");
JRadioButton NamnRb = new JRadioButton("Namn");
JRadioButton ÅlderRb = new JRadioButton("Ålder");
JRadioButton TidRb = new JRadioButton("Tid");
höger.add(StartNrRb);
höger.add(NamnRb);
höger.add(ÅlderRb);
höger.add(TidRb);
ButtonGroup bg1 = new ButtonGroup();
bg1.add(NamnRb);
bg1.add(StartNrRb);
bg1.add(ÅlderRb);
bg1.add(TidRb);
}
class Form2 extends JPanel{
JTextField startNrFält;
JTextField tidFält;
Form2(){
setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
JPanel rad0 = new JPanel();
rad0.add(new JLabel("Start Nummer: "));
rad0.add(new JLabel("Tid: "));
rad0.setLayout(new BoxLayout(rad0, BoxLayout.Y_AXIS));
rad0.add(startNrFält);
rad0.add(tidFält);
add(rad0);
}
}
class Form extends JPanel{
JTextField namnFält;
JTextField landFält;
JTextField ålderFält;
Form(){
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
JPanel rad1 = new JPanel();
rad1.add(new JLabel("Namn: "));
namnFält = new JTextField(15);
rad1.add(namnFält);
add(rad1);
JPanel rad2 = new JPanel();
rad2.add(new JLabel("Land: "));
landFält = new JTextField(15);
rad2.add(landFält);
add(rad2);
JPanel rad3 = new JPanel();
rad3.add(ålderFält);
rad3.add(new JLabel("Ålder: "));
ålderFält = new JTextField(5);
rad3.add(ålderFält);
add(rad3);
}
}
class NyLis implements ActionListener{
public void actionPerformed(ActionEvent ave){
Form f = new Form();
int svar = JOptionPane.showConfirmDialog(null, f);
String namn = f.namnFält.getText();
String land = f.landFält.getText();
int ålder = Integer.parseInt(f.ålderFält.getText());
Tävlande tv = new Tävlande (namn,land,ålder);
list.add(tv);
visa.setEnabled(true);
}
}
class VisaLis implements ActionListener{
public void actionPerformed(ActionEvent ave) {
display.setText("");
for (Tävlande t : list){
display.append(t.toString()+"\n");
}
}
}
class NyTidLis implements ActionListener{
public void actionPerformed(ActionEvent ave) {
Form f2 = new Form();
JOptionPane.showMessageDialog(null, f2);
}
}
public static void main (String []args){
new Maraton();
}
}
答案 0 :(得分:1)
您正在此课程的班级建设者中重新定义JButton签证:
JButton visa = new JButton("Visa");
这与签证变量定义的班级(此处为this.visa,visa代表两个单独的JButtons)不同,您尝试在NyLis actionListener中访问(未初始化)。
将上述行更改为:
visa = new JButton("Visa");
答案 1 :(得分:1)
问题是,当您点击null
按钮时,您正试图向JPanel
添加ny
个对象。可以在Form
对象的构造函数中找到有问题的代码:
rad3.add(ålderFält);
ålderFält = new JTextField(5); //NO! Create the JTextFieldObject first
rad3.add(ålderFält);
将代码更改为以下内容:
ålderFält = new JTextField(5);
rad3.add(ålderFält);
rad3.add(ålderFält);
你应该没有问题(或至少代码为我运行)。
您的visa
按钮也有问题。您在构造函数中声明了一个全新的JButton
,当您尝试启用它时,这将导致更多NullPointerException
个。
将来,请仔细阅读堆栈跟踪。有时候你需要深入研究几行,找出你的代码在哪里,确切地说,你出错了。当您进行图形处理时,尤其如此。