2012-04-30 15 views
3

Windows XP上で実行されているJava Swingアプリケーションのコンテキストメニューのニーモニックに下線が一貫して表示されない場合があります。Javaのポップアップメニューのニーモニック(下線付き文字)

マウスを右クリックすると、下線がポップアップメニューに表示されません。これは他のWindowsアプリケーションと同じように動作します。

メニューキー(通常は右のWindowsキーの横にある)を使用してポップアップメニューを表示すると、スウィングアプリケーションでは下線が表示されず、ワードパッドやエクスプローラ、コントロールパネルなどの標準Windowsアプリケーション。

下線を表示させる唯一の方法は、マウスを右クリックしながらAltキーを押したままにすることです。誰かがすでにマウスを右クリックしている場合、ポップアップで何かを選択するためにキーボードを使用したくないので、役に立たないものです。

コンテキストメニューがメニューキーから呼び出されたときに下線をSwingに表示することはできますか?私自身のルックを書かずに&フィールのライブラリですか?

答えて

0

良い質問です。私はOS Xでこれを試しましたが、下線付きの文字も表示されません。ちょうどあなたのように、私はaltボタンを押すことでそれらを手に入れます(クリック中ではなく、ポップアップメニューが表示されます)。

しかし、OS Xでは、下線付きの文字を含むポップアップを覚えていません。私はちょうどデフォルトのアプリケーションのいくつかをチェックし、それらのどれも下線付きの項目を持つポップアップメニューを持っていません。クイックGoogle検索indicated this as wellこの場合、ルック&フィールはOSと一貫しています。

私はfollowing topicを見つけましたが、Windowsではニーモニックをデフォルトで非表示にするオプションがあり、altキーを押したときに表示するオプションがあります(これはニーモニックを使用するには、私の窓の日から正しく覚えている)。それを試してみてください。

とにかく、ここではWindowsユーザーはすぐにこれをテストすることができSSCCEです:

import javax.swing.AbstractAction; 
import javax.swing.Action; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPopupMenu; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.KeyEvent; 

public class MnemonicTest { 
    public static JFrame createUI(){ 
    JFrame testFrame = new JFrame(); 

    testFrame.add(createLabelWithPopupMenu()); 

    testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    testFrame.pack(); 
    return testFrame; 
    } 

    private static JLabel createLabelWithPopupMenu(){ 
    JLabel result = new JLabel("Right-click me"); 
    result.setComponentPopupMenu(createPopupMenu()); 
    return result; 
    } 



    private static JPopupMenu createPopupMenu(){ 
    JPopupMenu popupMenu = new JPopupMenu(); 
    popupMenu.add(createAction()); 
    return popupMenu; 
    } 

    private static Action createAction(){ 
    AbstractAction result = new AbstractAction() { 
     @Override 
     public void actionPerformed(ActionEvent e) { 
     System.out.println("MnemonicTest.actionPerformed"); 
     } 
    }; 
    result.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A); 
    result.putValue(Action.NAME, "Action"); 
    return result; 
    } 

    public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
     createUI().setVisible(true); 
     } 
    }); 
    } 
} 
関連する問題