【问题标题】:Creating JMenuitem's in a for loop在 for 循环中创建 JMenuitem
【发布时间】:2012-08-31 22:27:39
【问题描述】:

您好,我正在尝试这样做:

public float a=0;

for(a=1 ; a<100;a++){
        String fuent="font"+String.valueOf((int)a);
        JMenuItem fuent=new JMenuItem(String.valueOf(a));
        fuent.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){texto.setFont(texto.getFont().deriveFont(a)); current=a;}});
        tamano.add(fuent);
        }

但它会抛出这些错误:

cambiar.java:71: error: variable fuent is already defined in constructor cambiar()
        JMenuItem fuent=new JMenuItem(String.valueOf(a));
                  ^

cambiar.java:72: error: cannot find symbol
        fuent.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){texto.setFont(texto.getFont().deriveFont(a)); current=a;}});
             ^

symbol:   method addActionListener(<anonymous ActionListener>)
  location: variable fuent of type String
2 errors
[Finished in 0.5s with exit code 1]

我正在尝试这样做:

JMenuItem (String)fuent=new JMenuItem(String.valueOf(a));
 JMenuItem System.out.println(fuent)=new JMenuItem(String.valueOf(a));

但没有任何效果。

---编辑---- 我认为有些人对我想要什么感到困惑:

String fuent="font"+String.valueOf((int)a);
        JMenuItem fuent=new JMenuItem(String.valueOf(a));//(Here sould go the value of the String, Example "font1")
        fuent.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){texto.setFont(texto.getFont().deriveFont(a)); current=a;}});
        tamano.add(fuent); //(Same Here) 

【问题讨论】:

    标签: java swing actionlistener jmenuitem


    【解决方案1】:

    你用相同的名字定义了两个不同的变量

    String fuent ="font"+String.valueOf((int)a);
    JMenuItem fuent =new JMenuItem(String.valueOf(a));
    

    尝试重命名一个或两个,例如

    String strFuent="font"+String.valueOf((int)a);
    JMenuItem miFuent=new JMenuItem(String.valueOf(a));
    

    更新示例

    JMenuItem fuent=new JMenuItem("font"+String.valueOf((int)a));
    

    会解决你的问题

    在 OP 编辑​​后更新

    这仍然行不通...

    String fuent="font"+String.valueOf((int)a); // You have defined fuent as a String
    // Here you are trying to define fuent AGAIN as a JMenuItem
    // You CAN NOT DO THIS...
    // Change one of the variable names
    JMenuItem fuent=new JMenuItem(String.valueOf(a));//(Here sould go the value of the String, Example "font1")
    fuent.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){texto.setFont(texto.getFont().deriveFont(a)); current=a;}});
    tamano.add(fuent); //(Same Here) 
    

    现在可以使用了...

    String fuent1="font"+String.valueOf((int)a); // You have defined fuent as a String
    JMenuItem fuent=new JMenuItem(fuent1);
    fuent.addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent e){
            texto.setFont(texto.getFont().deriveFont(a)); current=a;
        }
    });
    tamano.add(fuent); //(Same Here) 
    

    【讨论】:

    • float在类外是public,名字我知道,问题是想把JMenuItem命名为String "Fuent"的值
    • 浮动与它无关。您不能有两个具有相同名称或标签的变量。您唯一能做的就是更改变量名称。您提供给菜单项的文本无关紧要
    • 您阅读我所做的编辑了吗?...我正在尝试让 JmenuItem 具有字符串的值...示例:String hi="Button1"; JMenuItem "Button1"(String 的值)....
    • 你看答案了吗。您传递的文本与您的问题无关。您有两个名称相同的不同类型的变量。更改其中一个变量名称,它会正常工作
    • 如果我更改它的工作变量...但它会将相同的 JMenuItem 传递给所有内容...我的意思是他们都将获得“a”具有的最后一个值.. . 在这种情况下 99... 我将得到 99 JmenuItem 的值为 99...
    【解决方案2】:

    您应该学习 Java 的基础知识,因为您的代码存在主要的基本问题(浮点 a 不能在此处公开定义,除非它真的在其他地方并且您只是将它放在那里向我们展示)。您不能两次为变量定义相同的名称;调用一个 fuentMenu 和一个 fuentString 什么的。

    【讨论】:

    • float在类外是public,名字我知道,问题是想把JMenuItem命名为String "Fuent"的值
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 2016-05-29
    • 2018-04-02
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多