我试图在JMenuBar上创建一个帮助按钮。目前我可以使用此
使其正确对齐helpItem.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
问题在于它占用了JMenuBar的整个空间,因此您可以基本按下JMenuBar的空白处的任何位置,它将按下该按钮。我通过使用此
覆盖JMenuItem的大小来修复它 JMenuItem helpItem = new JMenuItem() {
@Override
public Dimension getMaximumSize() {
Dimension d1 = super.getPreferredSize();
Dimension d2 = super.getMaximumSize();
d2.width = d1.width;
return d2;
}
};
但是,在我覆盖getMaximumSize之后,setComponentOrientation并没有将JMenuItem对齐到右边。
编辑(当前代码):
private void createMenuBar() {
JMenuBar newMenuBar = new JMenuBar();
newMenuBar.setName("");
JMenu newMenu = new JMenu("Menu");
JMenuItem updateItem = new JMenuItem("Update");
JMenuItem aboutMe = new JMenuItem("About");
JMenuItem exitItem = new JMenuItem("Exit");
JMenuItem helpItem = new JMenuItem();
URL iconPath = getClass().getResource("/help.png");
helpItem.setIcon(new ImageIcon(iconPath));
addMenuItemActionListeners(updateItem, aboutMe, exitItem, helpItem);
newMenu.add(updateItem);
newMenu.add(aboutMe);
newMenu.add(exitItem);
newMenuBar.add(newMenu);
newMenuBar.add(Box.createHorizontalGlue());
newMenuBar.add(helpItem);
this.setJMenuBar(newMenuBar);
}
答案 0 :(得分:1)
无需手动设置组件大小,避免使用它,因为这是一种不好的做法,可能会破坏您的布局。
如果您只想对齐右侧的帮助菜单,则可以使用Box.createHorizontalGlue
方法。
Yuo可以添加您将要使用的所有其他菜单(当然,如果您需要),然后添加胶水,然后添加您想要与右侧对齐的所有其他菜单。
这是一个例子:
这是一个实现上述结果的MCVE:
import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.SwingUtilities;
public class GlueMenuBarTest
{
public static void main (String [] a) {
SwingUtilities.invokeLater (new Runnable () {
@Override public void run () {
createAndShowGUI ();
}
});
}
private static void createAndShowGUI () {
JFrame frame = new JFrame ("Test");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setJMenuBar (createGlueMenuBar ());
frame.setSize (500, 250); // just for convenience, use pack () in a real app.
frame.setLocationRelativeTo (null);
frame.setVisible (true);
}
private static JMenuBar createGlueMenuBar () {
JMenuBar menuBar = new JMenuBar ();
menuBar.add (new JMenu ("File"));
menuBar.add (new JMenu ("Edit"));
menuBar.add (new JMenu ("Search"));
menuBar.add (Box.createHorizontalGlue ());
menuBar.add (new JMenu ("Help"));
return menuBar;
}
}
如果你评论我在左边添加其他菜单的行,它也会起作用。