代码之家  ›  专栏  ›  技术社区  ›  mnorris23

如何使用ItemListener/ItemEvent从复选框数组中识别和显示用户选择的复选框字符串?

  •  -1
  • mnorris23  · 技术社区  · 1 年前

    尝试在变量中检索并存储用户选择的复选框索引字符串,以供以后使用/引用。选中任何复选框都会返回并显示数组中的最后一个索引。如何在循环中存储具有多个复选框的变量的独立索引?为了清楚起见,我省略了与JFrame/Layout/inports相关的细节。我是Java的新手,但似乎不知道我缺少了什么。如果这个话题很重要,试着挑战自己,为《暗黑破坏神2》创建一个符文计算器,计算哪些符文可以由选定的单个符文制作,假设顺序无关紧要。我知道需要进行重构以使其更加简洁,我只想先让事情正常工作。欢迎任何建议。感谢阅读。

    当前代码:

    public  class HelloWorldSwing extends JFrame implements ItemListener{
    
         JLabel display = new JLabel("Output Field");  
         JPanel boxpanel = new JPanel();
    
        String[] rune = {"El", "Eld", "Tir", "Nef"}; // string array to dynamically size checkbox quantity
        JCheckBox[] boxes = new JCheckBox[rune.length]; //create checkboxes for length of string array
                    
            
    
        public HelloWorldSwing() {
            
    
            for(int i = 0; i < boxes.length; i++){
                boxes[i] = new JCheckBox(rune[i]); // store string for each index for each checkbox 
                boxes[i].addItemListener(this); // add item listener to each checkbox
                boxpanel.add(boxes[i]); //adds checkboxes to Jpanel
            }
    
                
        }
        
        public void itemStateChanged( ItemEvent event ){
           for(int i = 0; i < boxes.length; i++){ 
                if(event.getStateChange() == ItemEvent.SELECTED){ 
                    
                    String iselected = boxes[i].getText();
                    display.setText(iselected);
            
                 }
           }
        }
    
         public static void main(String[] args) {
    
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    HelloWorldSwing gui = new HelloWorldSwing();
                }
            });
        }
    }
    

    如果我手动更改的索引: String isselected = boxes[0].getText();

    它只打印索引0,将数组索引设置为i只打印数组中的最后一个索引。

    1 回复  |  直到 1 年前
        1
  •  0
  •   camickr    1 年前

    这个 ItemEvent 包含对生成事件的组件的引用。

    所以你的代码 ItemListener 可能类似于:

    public void itemStateChanged( ItemEvent event ){
       if(event.getStateChange() == ItemEvent.SELECTED)
       { 
         JCheckBox checkBox = (JCheckBox)event.getSource();
         display.setText(checkBox.getText());
       }
    }