【问题标题】:Java JMenuBar : Vertical JSeparatorJava JMenuBar : 垂直 JSeparator
【发布时间】:2012-05-18 14:33:54
【问题描述】:
我正在尝试在我的菜单中添加一个垂直的 JSeparator。但它在我的 MenuItems 之间设置了边距。
我希望我的物品保持在左侧,而不是左侧 - 中心 - 右侧。
外观:
我想要的是:
JMenu settings = new JMenu("Settings");
image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "settings.png"));
settings.setHorizontalTextPosition(SwingConstants.CENTER);
settings.setVerticalTextPosition(SwingConstants.BOTTOM);
settings.setIcon(new ImageIcon(image));
add(settings);
JMenu build = new JMenu("Builder");
image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "build.png"));
build.setHorizontalTextPosition(SwingConstants.CENTER);
build.setVerticalTextPosition(SwingConstants.BOTTOM);
build.setIcon(new ImageIcon(image));
add(build);
add(new JSeparator(JSeparator.VERTICAL));
JMenu help = new JMenu("Help");
image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "help.png"));
help.setHorizontalTextPosition(SwingConstants.CENTER);
help.setVerticalTextPosition(SwingConstants.BOTTOM);
help.setIcon(new ImageIcon(image));
add(help);
希望你明白我想要什么。
【问题讨论】:
标签:
java
swing
jmenubar
jtoolbar
jseparator
【解决方案1】:
我建议使用 JToolBar 而不是 JMenuBar 来执行此操作。但是如果你必须/应该/喜欢使用 JMenuBar 来做这件事,这里有一个例子:
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
JMenuBar bar = new JMenuBar();
bar.setLayout(new MigLayout());
JMenu listSth = new JMenu("A");
listSth.setHorizontalTextPosition(SwingConstants.CENTER);
listSth.setVerticalTextPosition(SwingConstants.BOTTOM);
bar.add(listSth);
JSeparator sep1 = new JSeparator(JSeparator.VERTICAL);
bar.add(sep1, "growy");
JMenu module = new JMenu("B");
module.setHorizontalTextPosition(SwingConstants.CENTER);
module.setVerticalTextPosition(SwingConstants.BOTTOM);
bar.add(module);
JMenu settings = new JMenu("Settings");
settings.setHorizontalTextPosition(SwingConstants.CENTER);
settings.setVerticalTextPosition(SwingConstants.BOTTOM);
bar.add(settings);
JMenu build = new JMenu("Builder");
build.setHorizontalTextPosition(SwingConstants.CENTER);
build.setVerticalTextPosition(SwingConstants.BOTTOM);
bar.add(build);
JSeparator sep2 = new JSeparator(JSeparator.VERTICAL);
bar.add(sep2, "growy");
JMenu help = new JMenu("Help");
help.setHorizontalTextPosition(SwingConstants.CENTER);
help.setVerticalTextPosition(SwingConstants.BOTTOM);
bar.add(help);
frame.setJMenuBar(bar);
frame.pack();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
简单来说 - 您可以使用 MigLayout 并在您的 JSeparators 上设置“growy”。
还有很多其他解决方案(使用不同的布局)。