查看API,得到e.getItem();的返回值是一个Object类型;
我在试验JCheckBox组件时,在注册监听器时想要用JLabel标签来显示所选中的复选框中的内容,label。setText();函数来完成。
但是它的参数。。。。。。。在这遇到了麻烦:
这是一种方法:
wo理解第一种方法的正确性,但是对于第二种。。。。。这样直接对她强制转换为String类型到底对不对?不是很理解。要是说完全错误,我这还有一个正确的例子:
这是我在测试JComboBox的时候看到有些地方使用了这种强制转换(或者e.getItem().toString())仍然可以得到正确的结果!
请问这个e.getItem()能不能通过强制转换或者.toString()方法直接获得内容?
如果能,在什么情况下能使用?为什么第三个图片不能完成要求?
import java.awt.EventQueue;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
class MyFrame extends JFrame{
JPanel jp = new JPanel();
JCheckBox jcb1 = new JCheckBox("JAVA");
JCheckBox jcb2 = new JCheckBox("C++");
JCheckBox jcb3 = new JCheckBox("PHP");
JLabel label = new JLabel("");
public MyFrame(){
jp.add(new JLabel("选择语言:"));
jp.add(jcb1);
jp.add(jcb2);
jp.add(jcb3);
jcb1.addItemListener(new MyItemListener(jcb1));
jcb2.addItemListener(new MyItemListener(jcb2));
jcb3.addItemListener(new MyItemListener(jcb3));
jp.add(label);
add(jp);
setTitle("JFrame 测试");
setBounds(200,200,1000,400);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class MyItemListener implements ItemListener{
JCheckBox box;
public MyItemListener(JCheckBox box){
this.box = box;
}
@Override
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
label.setText(label.getText()+box.getText()+"、");
}
}
}
}
public class SwingTest{
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
@Override
public void run() {
new MyFrame().setVisible(true);
}
});
}
}
拿去玩吧!