如标题所示,以编程方式添加组件时,我很难让 JMenu 调整大小。在我的应用程序中,我需要带有 JCheckBoxes 的 JMenu。每当我勾选其中之一时,JSlider 就会出现在下面。下面是实现这一点的代码。我遇到的问题是,当有很多可见的 slider 时,JMenu 中的项目会聚集在一起 - 请参见下图。
如何强制 JMenu 重绘/调整大小/扩展以保留原始复选框/ slider 高度?
另请注意 - 选择复选框时 JMenu 始终保持可见。仅当我在其外部单击时它才会关闭。但在这样的“重新启动”菜单增长之后,问题就不再存在。
非常感谢!
public class Window extends JFrame implements ActionListener {
private JPanel panel;
private JMenuBar menuBar;
private JMenu menu;
private JSlider slider1;
private JCheckBoxMenuItem checkBox1;
private JCheckBoxMenuItem checkBox2;
private JCheckBoxMenuItem checkBox3;
public Window() {
super("Example");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setMinimumSize(new Dimension(300,300));
panel = new JPanel();
panel.setMinimumSize(new Dimension(300,300));
menuBar = new JMenuBar();
menu = new JMenu("Options");
checkBox1 = new JCheckBoxMenuItem("option 1");
checkBox2 = new JCheckBoxMenuItem("option 2");
checkBox3 = new JCheckBoxMenuItem("option 3");
checkBox1.addActionListener(this);
//prevent JMenu from closing after selecting CheckBox
checkBox1.setUI(new BasicCheckBoxMenuItemUI() {
@Override
protected void doClick(MenuSelectionManager msm) {
checkBox1.doClick(0);
}
});
slider1 = new JSlider();
slider1.setVisible(false);
menu.add(checkBox1);
menu.add(slider1);
menu.add(checkBox2);
menu.add(checkBox3);
menuBar.add(menu);
setJMenuBar(menuBar);
add(panel);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(checkBox1)) {
slider1.setVisible(checkBox1.isSelected());
}
}
}
这是我的主应用程序的屏幕:
最佳答案
隐藏并重新显示弹出菜单将导致其大小调整:
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(checkBox1)) {
slider1.setVisible(checkBox1.isSelected());
menu.setPopupMenuVisible(false);
menu.setPopupMenuVisible(true);
}
}
关于java - 在运行时添加项目后动态调整 JMenu 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69212399/