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

问题描述 投票:0回答:1

尝试检索用户选择的复选框索引字符串并将其存储在变量中以供以后使用/参考。选择任何复选框都会返回并显示数组中的最后一个索引。如何在循环中将独立索引存储到具有多个复选框的变量?为了清楚起见,我省略了与 JFrame/Layout/imports 相关的细节。我对 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 只打印数组中的最后一个索引。

java arrays swing itemlistener
1个回答
0
投票

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

所以你的

ItemListener
中的代码可能是这样的:

public void itemStateChanged( ItemEvent event ){
   if(event.getStateChange() == ItemEvent.SELECTED)
   { 
     JCheckBox checkBox = (JCheckBox)event.getSource();
     display.setText(checkBox.getText());
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.