2010-04-16 95 views
0

在大家提問之前,是的,我在網上搜索了答案,但是我發現的所有內容都讓我們感到困惑,最近沒有什麼是最新的,所以在這些論壇中詢問並不會真的有所幫助。將ActionPerformed數組添加到字符串數組

我的問題是這樣的:

我有一個數組,其中包含我的菜單名稱。

String[] fontColor = new String[] {"Red", "Blue", "Green"}; 

for (int i = 0; i < fontColors.length; i++) { 
    JMenuItem fontC = new JMenuItem(fontColors[i]); 
    fontC.addActionListener(new fontColorAction()); 
    changeFontColor.add(fontC); 
} 

然後我有保持在該類別稱爲fontColorAction

類我的顏色變化的數組我有另一個數組,做同樣的事情,我的字符串數組除了所有這就是在語句的textarea .setForeground(colorArr [I]);

這將按順序設置setForeground(),但現在如何成功地將我的類中的動作列表添加到我的menuItems中?

我的課看起來像這樣

private class fontColorAction implements ActionListener { 
    Color[] colorArr - new Color[] {"Color.RED","Color.BLUE","Color.GREEN"}; 
    public void actionPerformed(ActionEvent e){ 
      for(i = 0; i < collorArr.length; i++){ 
       textarea.setForeground(colorArr[i]); 
      } 
    } 
} 

回答

1

您可以將顏色屬性添加到您的行動:

private class FontColorAction implements ActionListener { 
    private Color color; 
    public FontColorAction (Color color){ 
      this.color = color; 
    } 

    public void actionPerformed(ActionEvent e){ 
      textarea.setForeground(color); 
    } 
} 

並初始化操作是這樣的:

String[] fontColor = new String[] {"Red", "Blue", "Green"}; 
Color[] colorArr - new Color[] {"Color.RED","Color.BLUE","Color.GREEN"}; 

for (int i = 0; i < fontColors.length; i++) { 
    JMenuItem fontC = new JMenuItem(fontColors[i]); 
    fontC.addActionListener(new fontColorAction(colorArr [i)); 
    changeFontColor.add(fontC); 
} 

此外,通過約定Java類以大寫形式顯示其首字母;)

+0

謝謝,這真的幫了我很多。它將我的代碼從515行減少到411行;) – Eli 2010-04-17 00:55:43

+0

較少的代碼意味着更少的bug :) – Guillaume 2010-04-17 06:03:15

0

FontColorAction正在偵聽muenu項目上的操作。我覺得你的問題是這樣的循環:

for(i = 0; i < collorArr.length; i++){ 
      textarea.setForeground(colorArr[i]); 
} 

在這裏,您只是將顏色設置爲Color.GREEN因爲是陣列上的最後一個項目。 如果你聲明我是一個領域,它將起作用。

private class fontColorAction implements ActionListener { 
    Color[] colorArr = new Color[] {"Color.RED","Color.BLUE","Color.GREEN"}; 
    private int colorIndex = 0; 
    public void actionPerformed(ActionEvent e){ 
      textarea.setForeground(colorArr[colorIndex]); 
      colorIndex++; 
      if(colorIndex==colorArr.length){ 
       colorIndex = 0; 
      } 

    } 
}