尝试在Java Swing程序中查找错误
这是我的节目。。。这是一种进入并列出马拉松运动员名单的方式。现在我在使用“Ny”按钮()时出错。以下是错误代码: 我认为问题在于“表单”面板和侦听器之间。某个地方可能有无法访问的代码?前几天我用过这个,但是我把代码弄丢了。现在它不起作用了。 想法是“ny”按钮向用户显示一个面板“表单”,但我得到的是错误 我是一个大傻瓜,所以我想这是一些明显的语法错误,我就是看不出来。 任何反馈都将不胜感激尝试在Java Swing程序中查找错误,java,swing,user-interface,jframe,Java,Swing,User Interface,Jframe,这是我的节目。。。这是一种进入并列出马拉松运动员名单的方式。现在我在使用“Ny”按钮()时出错。以下是错误代码: 我认为问题在于“表单”面板和侦听器之间。某个地方可能有无法访问的代码?前几天我用过这个,但是我把代码弄丢了。现在它不起作用了。 想法是“ny”按钮向用户显示一个面板“表单”,但我得到的是错误 我是一个大傻瓜,所以我想这是一些明显的语法错误,我就是看不出来。 任何反馈都将不胜感激 import javax.swing.*; import java.awt.*; import java.
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();
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.util.*;
公共类Maraton扩展JFrame{
区域显示;
杰布顿签证;
ArrayList=新的ArrayList();
马拉顿(){
超级(“Kista Maraton”);
显示=新的JTextArea();
display.setEditable(false);
添加(显示、边框布局、中心);
添加(新的JScrollPane(显示),BorderLayout.CENTER);
setLocationRelativeTo(空);
设置大小(300400);
setVisible(真);
setDefaultCloseOperation(关闭时退出);
JPanel-nedre=新的JPanel();
JPanel höger=新的JPanel();
添加(nedre,BorderLayout.SOUTH);
添加(höger,BorderLayout.EAST);
höger.setLayout(新的BoxLayout(höger,BoxLayout.Y_轴));
nedre.挫折背景(新颜色(24624662246));
nedre.setBorder(BorderFactory.createLineBorder)(新颜色(200200));
JButton ny=新JButton(“ny”);
addActionListener(new NyLis());
JButton visa=新JButton(“visa”);
visa.addActionListener(新VisaLis());
visa.setEnabled(false);
JButton-nyTid=新JButton(“Ny-Tid”);
nedre.add(纽约);
nedre.add(visa);
nedre.add(纽约市工业贸易署);
JRadioButton STARTNRB=新的JRadioButton(“Startnr”);
JRadioButton NamnRb=新的JRadioButton(“Namn”);
JRadioButtonÅlderRb=新的JRadioButton(“Ålder”);
JRadioButton TidRb=新的JRadioButton(“Tid”);
höger.add(StartNRB);
höger.add(NamnRb);
höger.add(ÅlderRb);
höger.add(TidRb);
ButtonGroup bg1=新建ButtonGroup();
bg1.add(NamnRb);
bg1.add(StartNRB);
bg1.添加(Årderb);
bg1.add(TidRb);
}
类Form2扩展了JPanel{
JTextField startNrFält;
JTextField tidFält;
表格2(){
setLayout(新的BoxLayout(这是BoxLayout.X_轴));
JPanel rad0=新的JPanel();
rad0.add(新JLabel(“Start numer:”);
rad0.添加(新的JLabel(“Tid:”);
rad0.setLayout(新的BoxLayout(rad0,BoxLayout.Y_轴));
rad0.add(startNrFält);
rad0.add(tidFält);
添加(rad0);
}
}
类形式扩展了JPanel{
JTextField namnFält;
JTextField landält;
JTextFieldålderFält;
表格({
setLayout(新的BoxLayout(这是BoxLayout.Y_轴));
JPanel rad1=新的JPanel();
rad1.添加(新的JLabel(“Namn:”);
namnFält=新的JTextField(15);
rad1.添加(namnFält);
添加(rad1);
JPanel rad2=新的JPanel();
rad2.添加(新的JLabel(“土地”);
landält=新JTextField(15);
rad2.添加(陆地);
添加(rad2);
JPanel rad3=新的JPanel();
rad3.添加(奥尔德夫阿尔特);
rad3.添加(新的JLabel(“Ålder:”);
åolder fält=新的JTextField(5);
rad3.添加(奥尔德夫阿尔特);
添加(rad3);
}
}
类NyLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
表格f=新表格();
int svar=JOptionPane.showConfirmDialog(null,f);
字符串namn=f.namnFält.getText();
字符串land=f.landält.getText();
intålder=Integer.parseInt(f;
Tävlade tv=新的Tävlade(纳姆、兰德、阿尔德);
列表。添加(电视);
visa.setEnabled(true);
}
}
类VisaLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
display.setText(“”);
for(Tävlade T:list){
display.append(t.toString()+“\n”);
}
}
}
类NyTidLis实现ActionListener{
已执行的公共无效操作(操作事件ave){
表格f2=新表格();
showMessageDialog(null,f2);
}
}
公共静态void main(字符串[]args){
新马拉顿();
}
}您正在您的类的构造函数中重新定义JButton visa,请点击这一行:
JButton visa = new JButton("Visa");
这与您试图在NyLis actionListener中访问(未初始化)的visa变量定义的类级别(此处This.visa和visa代表两个独立的JButton)不同
将上述行更改为:
visa = new JButton("Visa");
问题是,当您单击
ny
按钮时,您试图将null
对象添加到JPanel
。在表单
对象的构造函数中可以找到有问题的代码:
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
s
将来,请更仔细地阅读堆栈跟踪。有时,您必须仔细阅读其中的几行代码,以找出代码中的错误所在。当你在做图形化的事情时尤其如此。你能把图像嵌入到你的文章中吗;这样它们会持续更长的时间并且更容易看到?所以,您尝试访问的内容(第116行附近)没有初始化。我们必须找到那一行并为您调试吗?检查下面的内容
jpanelrad3=newjpanel()代码>在论坛中发布与您的问题相关的所有信息,而不是在其他网站上发布链接。