JMenuBar
があり、その最後の要素(右端の1つ)がJMenuItem
である場合、JMenuBarの残りの空き領域をすべて占有しますが、それは間違いなく私たちが望むものではありません。Swing - 最後のJMenuItemがJMenuBarの残りの領域を占める
JMenuBarの右端の項目として "About" JMenuItemを想像してください。それは他のメニューと同じスペースを占めるだけです。
私SSCCEを参照してください(メニューをクリックし、効果を確認するには、右側にメニュー項目の上にマウスを置く)
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
public class JMenuItemLastOnMenuBar {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createGUI();
}
});
}
private static void createGUI() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(0, 0, 300, 300);
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("Menu 1");
JMenuItem item1 = new JMenuItem("Item 1");
menu.add(item1);
bar.add(menu);
JMenuItem item2 = new JMenuItem("Item 2") {
@Override
public Dimension getPreferredSize() {
return new Dimension(120, 25);
}
};
bar.add(item2);
frame.setJMenuBar(bar);
frame.pack();
frame.setVisible(true);
}
}
をオーバーライドする必要があります** **である理由'item2'の優先サイズを上書きするコードですか? –
最後に区切り記号/スペーサーを追加する必要があります。 –
@AndrewThompsonなぜなら、常にレイアウトマネージャーの適切な優先サイズを返すようにしたいからです。または、他の何か。 – FaithReaper