2012-05-18 63 views
3

我想在我的菜單中添加一個垂直JSeparator。但它會在我的MenuItems之間留出利潤。 我希望我的物品保持左側而不是左側 - 中央 - 右側。Java JMenuBar:垂直JSeparator

它的外觀: enter image description here 我想要什麼: enter image description here

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); 

希望你明白我想要什麼。

+0

爲了更快獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。順便說一句 - 它不需要1554像素寬的圖像來演示所需的效果!請參閱[如何創建屏幕截圖?](http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-illustrate-a-post)(有關製作*很棒*截圖)。 –

+0

你爲'JToolBar'使用了什麼佈局? –

回答

3

我建議通過使用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並設置「growy」您JSeparators。 還有很多其他解決方案(使用不同的佈局)。