2012-05-18 1 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/). BTW - это не требовало изображения шириной 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. Есть много других решений для этого (с использованием разных макетов).

 Смежные вопросы

  • Нет связанных вопросов^_^