Java ItemListener未注册

Java ItemListener未注册,java,swing,Java,Swing,我试图通过这本书“Java简易步骤”学习一些Java基础知识,但在这本名为“处理项事件”的章节中,我们使用了ItemListener、ItemEvent、itemStateChanged()等,这本书似乎不正确。我已经写了他们让我写、检查、再检查的所有东西,但是代码不想工作。代码如下: (这应该是一个带有一些可点击选项的窗口,这些选项在其文本框中注册) import javax.swing.*; 导入java.awt.event.*; 导入java.awt.*; 类状态扩展JFrame实现Ite

我试图通过这本书“Java简易步骤”学习一些Java基础知识,但在这本名为“处理项事件”的章节中,我们使用了ItemListener、ItemEvent、itemStateChanged()等,这本书似乎不正确。我已经写了他们让我写、检查、再检查的所有东西,但是代码不想工作。代码如下:

(这应该是一个带有一些可点击选项的窗口,这些选项在其文本框中注册)

import javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
类状态扩展JFrame实现ItemListener{
JPanel pnl=新的JPanel();
String[]styles={“深碟”、“美食风格”、“薄脆”};
JComboBox=新的JComboBox(样式);
JRadioButton rad1=新JRadioButton(“白色”);
JRadioButton rad2=新的JRadioButton(“红色”);
ButtonGroup=新建ButtonGroup();
JCheckBox chk=新的JCheckBox(“辣味香肠”);
JTextArea txtArea=新的JTextArea(5,38);
公共国家(){
超级(“摇摆窗”);
设置大小(500200);
setDefaultCloseOperation(关闭时退出);
添加(pnl);
setVisible(真);
添加(rad1);
葡萄酒。添加(rad2);
pnl.add(rad1);
pnl.add(rad2);
pnl.add(txtArea);
pnl.添加(框);
pnl.add(chk);
rad1.addItemListener(本);
rad2.addItemListener(本);
chk.addItemListener(本);
box.addItemListener(此);
}
公共无效itemStateChanged(ItemEvent事件){
if(event.getItemSelectable()==rad1){
txtArea.setText(“精选白葡萄酒”);
}
if(event.getItemSelectable()==rad2){
txtArea.setText(“精选红酒”);
}
if((event.getItemSelectable()==chk)&&(event.getStateChange()==ItemEvent.SELECTED)){
txtArea.append(“\nPepperoni selected\n”);
}
if((event.getItemSelectable()==box)&&(event.getStateChange()==ItemEvent.SELECTED)){
append(event.getItem().toString()+“selected”);
}
}
公共静态void main(字符串[]args){
状态gui=新状态();
}
}

您没有将
JFrame
设置为可见。在
main
方法中添加以下代码。同时删除
setVisible(true)在您的构造函数方法中
States()
因为那时
JFrame
还没有添加它的所有组件

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            States gui = new States();
            gui.pack();
            gui.setVisible(true);

        }

    });

错误是什么?请帮助我们帮助您:1)首先,告诉我们您发布的代码有什么问题,它是如何工作的——细节很重要。2) 请尽量只发布格式良好的代码,而不是所有难以阅读的左对齐代码。好的,我已经为您格式化了代码,希望通过使其更易于阅读,我们将吸引更多愿意努力阅读和理解的专家,但是您仍然需要告诉我们为什么它不工作以及它是如何工作的。除了GUI一开始看起来是空白的,因为应该在setVisible(true)之前调用pack(),并且应该在添加所有组件之后调用这两个,这里的一切似乎都很好。那么,再一次,你期待什么,你观察到了什么?嗨,很抱歉耽搁了。下面是我试图编译代码时命令提示符的直接结果:感谢您的anwser,代码以任何方式工作。问题似乎是我命名为itemstener.java的文件把我搞砸了。无论如何谢谢你@Melvinml此代码实际上不起作用,因为它将显示一个空白屏幕。将框架设置为在其自己的构造函数中可见不是正确的使用方法。我也没有删除原始的setVisible(true),有时在最大化窗口之前它是空白的,这在我身上发生过before@Melvinml是的,即使如此,它在主线程上运行所有内容,甚至暂停一段时间以显示所有组件。我认为这不是一个好的做法。
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            States gui = new States();
            gui.pack();
            gui.setVisible(true);

        }

    });