2014-03-01 138 views
0

我有一個程序,需要一個輸入文件,從中拉出一個顏色字+十六進制值(例如紅色0xFF0000)。我的代碼工作完美,除了我試圖用HashMap替換我的2個arrayLists ...這是事情發生錯誤的地方。我把我的代碼恢復到我以前認爲的狀態,除非現在它在單選按鈕被按下時不會改變顏色。任何人都想偷看?有人能告訴我爲什麼我的actionListener for-loop不工作嗎?

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

時間做一些調試,我-認爲。 –

+0

你的輸入文件如何看? –

+0

@LeosLiterak:它們很可能有兩列字符串 - 一個顏色名稱,後面跟着顏色int十六進制字符串的字符串表示。即「紅色0xffff0000」。無論如何,這是我的猜測。 –

回答

2

一次調查:

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

你絕對與單選按鈕不工作的原因釘它。啊!現在我可以回去嘗試獲得一個hashmap來處理這個壞男孩。 –

+0

對不起,我剛剛發佈hashmap解決方案:-) –

+0

我以前弄不清楚的唯一部分是如何使用HashMap產生按鈕。對於(int i = 0; i

相關問題