wch_NUDT 2016-08-18 03:55 采纳率: 50%
浏览 1725
已结题

Swing编程,关于ItemEvent类的对象e 的e.getItem()方法的问题。

查看API,得到e.getItem();的返回值是一个Object类型;图片说明

我在试验JCheckBox组件时,在注册监听器时想要用JLabel标签来显示所选中的复选框中的内容,label。setText();函数来完成。
但是它的参数。。。。。。。在这遇到了麻烦:
这是一种方法:
图片说明

这是另一种方法:
图片说明

wo理解第一种方法的正确性,但是对于第二种。。。。。这样直接对她强制转换为String类型到底对不对?不是很理解。要是说完全错误,我这还有一个正确的例子:
这是我在测试JComboBox的时候看到有些地方使用了这种强制转换(或者e.getItem().toString())仍然可以得到正确的结果!
图片说明

请问这个e.getItem()能不能通过强制转换或者.toString()方法直接获得内容?
如果能,在什么情况下能使用?为什么第三个图片不能完成要求?

  • 写回答

1条回答 默认 最新

  • 人生_仅此而已 2016-08-18 05:19
    关注

    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);
    
            }
        });
    }
    

    }

    拿去玩吧!

    评论

报告相同问题?

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)