在你们问之前,是的,我已经在网上搜索了答案,但是我发现的所有内容都让人感到困惑,而且没有什么是最近的,所以在这些论坛上提问并不会真的有用。
我的问题是:
我有一个数组,其中包含我的菜单名称。
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]);
}
}
}
答案 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;
}
}
}