Java 我想使用swing和awt创建一个测验,但我遇到了很多例外,

Java 我想使用swing和awt创建一个测验,但我遇到了很多例外,,java,swing,awt,Java,Swing,Awt,我想在动作监听器中添加item listener,这样每当用户按下复选框并单击按钮时,无论答案是否正确,框架都会显示一个标签。代码如下: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class KBC implements ItemListener { JFrame f; JLabel l; JButton b; JCheckBox k0; JChec

我想在动作监听器中添加item listener,这样每当用户按下复选框并单击按钮时,无论答案是否正确,框架都会显示一个标签。代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class KBC implements ItemListener {

    JFrame f;
    JLabel l;
    JButton b;
    JCheckBox k0;
    JCheckBox k1;
    JCheckBox k2;
    JCheckBox k3;
    JCheckBox k4;
    JLabel z;

    public static void main(String[] args) {
        KBC u = new KBC();
        u.go();
    }

    public void go() {
        z = new JLabel("Nothing");
        f = new JFrame("Hello");
        l = new JLabel("q1- Ans is 3");
        b = new JButton("Click");
        k0 = new JCheckBox("hello1");
        k1 = new JCheckBox("hello2");
        k2 = new JCheckBox("hello3");
        k3 = new JCheckBox("hello4");
        k4 = new JCheckBox("hello5");
        l.setFont(new Font("serif", Font.BOLD, 50));
        b.addActionListener(new ButtonAction());
        f.setLayout(null);
        f.setSize(1024, 768);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        l.setBounds(150, 100, 500, 100);
        k0.setBounds(200, 300, 50, 100);
        k1.setBounds(200, 320, 100, 100);
        k2.setBounds(200, 340, 100, 100);
        k3.setBounds(200, 360, 100, 100);
        k4.setBounds(200, 380, 100, 100);
        b.setBounds(600, 550, 100, 100);
        f.add(l);
        f.add(k0);
        f.add(k1);
        f.add(k2);
        f.add(k3);
        f.add(k4);
        f.add(b);
        f.add(z);

        k0.setVisible(true);
        k1.setVisible(true);
        k3.setVisible(true);
        k4.setVisible(true);
        b.setVisible(true);
        z.setVisible(true);
        k2.setVisible(true);
        l.setVisible(true);
    }

    @Override
    public void itemStateChanged(ItemEvent eve) {
        if (eve.getSource() == k3) {
            z.setText("YOu are r8");
        } else {
            z.setText("YOu are rong");
        }
    }
}

class ButtonAction extends KBC implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        k0.addItemListener(new KBC());
        k1.addItemListener(new KBC());
        k2.addItemListener(new KBC());
        k3.addItemListener(new KBC());
        k4.addItemListener(new KBC());
    }
}

避免使用
null
布局,像素完美的布局在现代ui设计中是一种错觉。影响零部件单个尺寸的因素太多,您无法控制。Swing的设计初衷是与布局管理器一起工作,丢弃这些布局管理器将导致无止境的问题,您将花费越来越多的时间来纠正这些问题。“我想在动作侦听器中添加项侦听器”-为什么?为什么需要将其添加到
ActionListener
,为什么不在UI
ButtonAction
不是
KBC
的实例类时注册它们,因此触发
actionPerformed
方法时,对
k0
的引用为
null
。也许你应该看看