簡體   English   中英

有人能告訴我為什么我的actionListener for循環不起作用?

[英]Could someone tell me why my actionListener for-loop is not working?

我有一個程序,它接受一個輸入文件,從中拉出一個顏色字+十六進制值(例如,紅色0xFF0000)。 我的代碼工作得很完美,除了我試圖用HashMap替換我的2個數組列表......這就是事情出錯的地方。 我將我的代碼恢復到我之前認為的狀態,除非現在按下單選按鈕時不會改變顏色。 有人想偷看嗎?

public HashMapTests() {
        JPanel p1 = new JPanel();
        this.getContentPane().setLayout(new GridLayout(5,4));
        ButtonGroup group = new ButtonGroup();
        for (int i = 0; i < colorCollection.size(); i++) {
            jrbColor[i] = new JRadioButton(colorCollection.get(i));
            jrbColor[i].setText(colorCollection.get(i));
            group.add(jrbColor[i]); 
            p1.add(jrbColor[i]);
            }
        for(int i = 0; i < colorCollection.size(); i++){
            jrbColor[i].addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e){
                    for (int j = 0; j < colorCollection.size(); j++){
                        String hexColor = hexCollection.get(j);
                        if(hexCollection.get(j).equals(((JRadioButton)e.getSource()).getText())){
                            getContentPane().setBackground(Color.decode(hexColor));

                            repaint();
                        }
                    }                   
            }
        }); 
        }
        add(p1);
            }

第一次調查:

while (colorCollection.size() < 10)

應改為

if (colorCollection.size() < 10)

第二個觀察:

jrbColor[i] = new JRadioButton(colorCollection.get(i));
jrbColor[i].setText(colorCollection.get(i));

第二行是無用的,請參閱構造函數的javadoc。

第三:

附加偵聽器的第二個循環是無用的,您可以將此代碼放在創建按鈕的第一個循環中。

最后:

if (hexCollection.get(j).equals(((JRadioButton) e.getSource()).getText())) {

您可以在此處將hexCollection的內容與單選按鈕文本進行比較,但該按鈕具有來自colorCollection的標簽。 我無法查看您的文件,但我認為這將是問題所在。

地圖方案:

初始化

String name = fileInput.next();
String hexValue = fileInput.next();
colors.put(name, hexValue);

紐扣

    int i = 0;
    for (String s : colors.keySet()) {
        jrbColor[i] = new JRadioButton(s);
        group.add(jrbColor[i]);
        p1.add(jrbColor[i]);
        jrbColor[i].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String hexColor = colors.get(((JRadioButton) e.getSource()).getText());
            getContentPane().setBackground(Color.decode(hexColor));
        }
        });
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM