gpt4 book ai didi

java - Swing - 最后一个 JMenuItem 占据 JMenuBar 上的其余空间

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

我发现如果我有一个JMenuBar,并且它的最后一个元素(最右边的一个)是一个JMenuItem,它将占据上所有剩余的空白空间JMenuBar,这绝对不是我们想要的。

将“关于”JMenuItem 想象为 JMenuBar 上最右边的项目。它应该只占据与其他菜单相同的空间。

查看我的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);
}

}

最佳答案

您应该重写方法getMaximumSize

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 getMaximumSize() {
Dimension d1 = super.getPreferredSize();
Dimension d2 = super.getMaximumSize();
d2.width = d1.width;
return d2;
}
};
bar.add(item2);

frame.setJMenuBar(bar);

frame.pack();
frame.setVisible(true);
}

}

关于java - Swing - 最后一个 JMenuItem 占据 JMenuBar 上的其余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433871/

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