JMenu のサブメニューに表示される小さな矢印の表示を制御する方法を知っている人はいますか?
変更できますか?無効にできますか? 移動できますか?
また、この矢印が他の JMenu のサブメニューである場合にのみ、トップ レベルの JMenus に表示されないことに気付きました。JMenuBar のルートに JMenuItem と JMenu が混在しているため、この矛盾は私を悩ませています。とにかくこれもやりますか?
ありがとう!
Menu.arrowIcon
UI プロパティを見てみましょう
(テスト コードを提供してくれた AndrewThompson に感謝します)。
これを行うと、変更を適用した後に作成されたすべてのメニューに影響します。
したがって、ルック アンド フィールを初期化した後、メニュー呼び出しを作成する前にUIManager.getLookAndFeelDefaults().put("Menu.arrowIcon", null);
これはひどい考えであり、あなたがそれをしないように強く思いとどまらせると思います.
この矢印は、他の JMenu のサブメニューである場合にのみ、トップ レベルの JMenus には表示されません。
ここでは、Metal を使用してその外観に (単調に) 一貫性があるように見えます。
import javax.swing.*;
public class MenuArrows {
MenuArrows() {
JMenuBar mb = new JMenuBar();
JMenu root1 = new JMenu("Root Menu 1");
JMenu root2 = new JMenu("Root Menu 2");
addSubMenus(root1, 5);
addSubMenus(root2, 3);
mb.add(root1);
mb.add(root2);
JOptionPane.showMessageDialog(null, mb);
}
public void addSubMenus(JMenu parent, int number) {
for (int i=1; i<=number; i++) {
JMenu menu = new JMenu("Sub Menu " + i);
parent.add(menu);
addSubMenus(menu, number-1);
addMenuItems(menu, number);
}
}
public void addMenuItems(JMenu parent, int number) {
for(int i=1; i<=number; i++) {
parent.add(new JMenuItem("Item " + i));
}
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
new MenuArrows();
}
};
SwingUtilities.invokeLater(r);
}
}