アプリケーションで JMenuBar を使用すると、ファイル、編集などの要素が近すぎます。要素間にスペースがあれば、見栄えがよくなります。これは可能ですか?
7 に答える
はい、空のテキストを含む MenuBar アイテムを追加して、クリック可能/選択可能にしないでください
JComponents
そうでないものを追加する必要があるfocusable
場合は、スペースを作成できます
JMenuBar
JLabel
(required に設定する必要がありますPreferredSize
)JSeparator
(最小サイズは 10 ピクセルですsetOpaque
。JSeparator
JMenuItem
JSeparator
(追加の設定は必要ありません)JLabel
(required に設定する必要がありますPreferredSize
)
水平に使用する場合は、 を使用できます|
。
menu.add(new JMenu("File"));
menu.add(new JMenu("|"));
menu.add(new JMenu("Edit"));
JSeparator
垂直方向の使用では、単にまたは を使用できますaddSeparator()
。
menu.add(new JMenuItem("Close"));
menu.add(new JSeparator()); // explicit
menu.addSeparator(); // or implicit
menu.add(new JMenuItem("Exit"));
古いですが、同じ問題の解決策を探していましたが、これにたどり着きました:
次のように、JMenuItem にマージンを設定する必要があります。
JMenuItem menu = new JMenuItem("My Menu");
menu.setMargin(new Insets(10, 10, 10, 10));
javax.swing.Box には、非表示の固定幅コンポーネントを作成するための createHorizontalStrut( int width ) という静的メソッドがあります。
コードは次のようになります。
JMenuBar menuBar = new JMenuBar();
menuBar.add( new JMenu( "File" ) );
menuBar.add( Box.createHorizontalStrut( 10 ) ); //this will add a 10 pixel space
menuBar.add( new JMenu( "Edit" ) );
他の回答はうまく機能しますが、パディングとマージンのために予期しないスペースが発生する可能性があります。スペーサーのサイズをより細かく制御したい場合:
JMenu spacer = new JMenu();
//disable the spacer so that it doesn't behave
//like a menu item
spacer.setEnabled(false);
//Java components are weird. Set all three to
//guarantee that size is used
spacer.setMinimumSize(new Dimension(width, 1));
spacer.setPreferredSize(new Dimension(width, 1));
spacer.setMaximumSize(new Dimension(width, 1));
//add the spacer to your JMenuBar
jMenuBar.add(spacer);