0

ご清聴ありがとうございました!初心者を助けてください:)

現在の問題:

色の名前で MenuItem をクリックすると、線の色を変更する必要があります。

これは、線の色を変更するための私のコードです。menuItems を作成するとき、それらの actionListener も作成します。

private void CreateMenu()
{
    menuBar = new MenuBar();
    menu = new Menu("File");
    mSave = new MenuItem("Save");
    colorSubMenu = new Menu("Choose Color...");

    String[] colors = {"red","yellow","green","blue","purple","black"};
    for(int i=0;i<colors.length;i++)
    {
        final int ii = i;
        MenuItem m=new MenuItem(colors[i]);
        colorSubMenu.add(m);
        colorSubMenu.addActionListener(
                                    new ActionListener()
                                            {
                                                @Override public void actionPerformed(ActionEvent e)
                                                {
                                       THIS LINE DOESN'T WORK ===>> color = Color.getColor(colorSubMenu.getItem(ii)));
                                                }
                                             }
                                        );
    }

    menu.add(mSave);        
    menu.add(colorSubMenu);
    menuBar.add(menu);        
    setMenuBar(menuBar);
}

しかし... うまくいきません!アドバイスをください。私はアイデアが不足しています。

何でも聞いてうれしいです:) もう一度ありがとう!

アップデート:

この部分をよりエレガントなものに変更したいのですが、それは実際に機能します:

colorSubMenu.addActionListener(
   new ActionListener()
   {
      @Override 
      public void actionPerformed(ActionEvent e)
      {
THIS LINE DOESN'T WORK ===>> color = Color.getColor(colorSubMenu.getItem(ii)));
      }
   }
);
4

1 に答える 1

1

Color#getColorシステム プロパティの色の使用に依存します。これらはおそらく、問題の Color 配列の色と一致しません。代わりにリフレクションを使用できます

@Override
public void actionPerformed(ActionEvent e) {
    Field field = Class.forName ("java.awt.Color").getField (e.getActionCommand());
    Color color = (Color) field.get (null);
    // use color...
}
于 2013-09-21T21:46:35.803 に答える