将ActionPerformed数组添加到字符串数组

时间:2010-04-16 11:40:10

标签: java

在你们问之前,是的,我已经在网上搜索了答案,但是我发现的所有内容都让人感到困惑,而且没有什么是最近的,所以在这些论坛上提问并不会真的有用。

我的问题是:

我有一个数组,其中包含我的菜单名称。

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]);
          }
     }
}

2 个答案:

答案 0 :(得分:2)

您可以为动作添加颜色属性:

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类的大写首字母大写;)

答案 1 :(得分:0)

FontColorAction正在监听muenu项目上的操作。我认为你的问题是这个循环:

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

这里只是将颜色设置为Color.GREEN,因为它是数组中的最后一项。 如果你将i声明为一个字段,它将起作用。

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;
          }

     }
}