在你们问之前,是的,我已经在网上搜索过答案,但我找到的所有东西都是令人困惑的,而且没有什么是最近的,所以在那些论坛上询问不会有真正的帮助。
我的问题是:
我有一个数组,里面有我的名字作为菜单。
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(colorArri);
这将按顺序设置setForeground(),但是现在我如何成功地将类中的操作listner添加到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]);
}
}
}发布于 2010-04-16 19:47:05
可以将颜色属性添加到操作中:
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类的第一个字母是大写的;)
发布于 2010-04-16 20:31:39
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;
}
}
}https://stackoverflow.com/questions/2652557
复制相似问题