0

以下のサンプルコードを参照してください。ボタンを作成してウィンドウに追加するだけです。ただし、*menu_item3* が選択されている場合、ActionListener はイベントを受け取りません。このエラーは、Java 7 for Mac でのみ発生します。この同じコードを Windows で実行すると、問題なく動作します。この同じコードを Java 6 for Mac で実行すると、問題なく動作します。JWindow の代わりに JFrame を使用すると、正常に動作します。ウィンドウのタイトルバーと境界線を表示したくないので、JFrame を使用したくありません。

何か案は?

public class SandBox {
 public static JFrame frame = new JFrame();
 public static JPopupMenu menu = new JPopupMenu();
 public static JLabel button = new JLabel();

 public static void main(String[] args) {
     JFrame window = new JFrame();
     JPanel panel = new JPanel();

     JMenuItem menu_item1 = new JMenuItem("Item1");
     JMenuItem menu_item2 = new JMenuItem("Item2");
     JMenuItem menu_item3 = new JMenuItem("Item3");

     menu.add(menu_item1);
     menu.add(menu_item2);
     menu.add(menu_item3);
     menu.setEnabled(true);

     button.setText("Button");
     button.setBorder(BorderFactory.createMatteBorder(4, 4, 4, 4, new Color(255,0,0)));
     button.setSize(100, 24);
     button.add(menu);
     button.setVisible(true);
     button.setEnabled(true);

     panel.add(button);
     panel.setVisible(true);

     window.add(panel);
     window.setVisible(true);
     window.setLocation(100, 100);
     window.setAlwaysOnTop(true);
     window.setFocusable(true);
     window.setFocusableWindowState(true);
     window.pack();

     frame.setVisible(false);

     button.addMouseListener(new MouseAdapter() {
         public void mouseClicked(MouseEvent e) {
             menu.show(button, 0, 0);
         }
     });

     menu_item3.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
             JOptionPane.showMessageDialog(frame, "Eggs are not supposed to be green.");
         }
     });
 }
}
4

1 に答える 1

0

Oracleにバグを提出しました。バグが正式に提出されるかどうかについては、まだ回答を待っています。何か聞いたら、この回答を更新します。

その間に、私は実行可能な回避策を見つけました。JWindowの代わりにJFrameを使用しています。setUndecorated()メソッドを使用してJFrameのウィンドウタイトルと境界線を削除できることに気づいていませんでした。また、このメソッドは、フレームが表示されていないときにのみ呼び出すことができることに注意してください。

于 2012-10-31T16:38:30.890 に答える