2010-04-16 97 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; 
      } 

    } 
}