gpt4 book ai didi

java - JMenuItem 设置对齐方式和最大尺寸

转载 作者:行者123 更新时间:2023-12-02 11:56:50 27 4
gpt4 key购买 nike

我正在尝试在 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);
}

最佳答案

无需手动设置组件大小,请避免这样做,因为这是一种不好的做法,可能会破坏您的布局。

如果您只想将帮助菜单对齐在右侧,可以使用 Box.createHorizo​​ntalGlue 方法。

Yuo 可以添加您要使用的所有其他菜单(当然,如果您需要),然后添加胶水,然后添加您想要与右侧对齐的所有其他菜单。

这是一个例子:

enter image description here

这是实现上述结果的 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;
}
}

如果您注释我在左侧添加其他菜单的行,它也会起作用。

关于java - JMenuItem 设置对齐方式和最大尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47549061/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com