2

数時間前にこの質問をしましたが、自分自身をうまく説明できなかったと思います。これが私のコードです:

for (a = 1; a < 14; a++) {
    JMenuItem "jmenu"+a = new JMenuItem(String.valueOf(a));
    "jmenu"+a.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            rrr[a] = a;
            texto.setFont(texto.getFont().deriveFont((float) a));
            current = a;
        }
    });
    tamano.add("jmenu"+a);
}

私がする必要があるのはJMenuItem、これらの名前でいくつかのを作成することです。

jmenu1
jmenu2
jmenu3
jmenu4
etc... 

- -編集 - -

私が欲しいのは、それぞれJMenuitemが異なる名前を持っているということです:

JMenuItem "jmenu"+a  //with this I can't create the JMenuItem; it's not permitted
  = new JMenuItem(); //I dont care about this
4

2 に答える 2

9

プログラムで変数に名前を付けることはできません。14個の異なるコンポーネントが必要な場合は、配列またはリストを作成してそれらのコンポーネントを保持し、それらのコンポーネントをループで作成して配列/リストに追加します。n 番目のコンポーネントが必要な場合は、 components[n] または list.get(n) を使用して取得できます。

于 2012-09-01T01:20:01.970 に答える
4

ここには2つの問題があります

JMenuItem1つ目はアレイの構築です

JMenuItem[] menuItems = new  JMenuItem[14];  
for (int a = 1; a < 14; a++) {
    menuItems[a] = new JMenuItem(String.valueOf(a));
    menuItems[a].addActionListener(new MenuItemAction(a));
    tamano.add(menuItems[a]);
}

2つ目は、の値を使用することですActionListener。各メニューには独自の値が関連付けられているため、ここでは、具体的なクラスの方が匿名のクラスよりも優れています。

class MenuItemAction extends AbstractAction {
    private final int associatedValue;

    public MenuItemAction(int associatedValue) {
       this.associatedValue = associatedValue;
    }

    public void actionPerformed(ActionEvent e) {
       JMenuItem menuUtem = (JMenuItem)e.getSource();
       System.out.println(associatedValue);
       // do more stuff with associatedValue
   }
}
于 2012-09-01T01:25:16.613 に答える