Java JMenuBar : Vertical JSeparator
java, jmenubar, jseparator, jtoolbar, swing
Solution
I suggest doing this by using JToolBar instead of JMenuBar. But in case you must/should/like to do it using JMenuBar here goes an example:
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);
}
});
}
}
In simple words - you can use MigLayout and set "growy" on your JSeparators. There are many other solutions for this (using different layout).
Problem
I'm trying to add a vertical JSeparator in my menu. But it puts margins between my MenuItems. I want my items to stay left instead of left - center - right. How it looks: What I want: ``` 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); ``` hope you understand what I want.