2009-12-15 10 views
0

Я пытаюсь нарисовать боковую панель для проекта, над которым я работаю. Я решил использовать GridBagLayout, потому что я разочаровался в ограничениях BoxLayout. Может ли кто-нибудь помочь объяснить, что я делаю неправильно. Я хочу, чтобы боковая панель содержала два JPanels. Кодекс, который я размещаю на полпути вниз по боковой панели, а не вверху. Может кто-нибудь объяснить, чего я здесь не вижу.java sidebar с GridBagLayout

JPanel sideBar = new JPanel(); 
    sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight()); 
    sideBar.setLayout(new GridBagLayout()); 


    JPanel optionBar = new JPanel(); 
    optionBar.setBorder(BorderFactory.createTitledBorder("Box1")); 
    optionBar.setLayout(new GridBagLayout()); 


    JPanel buttonBar = new JPanel(); 
    buttonBar.setBorder(BorderFactory.createTitledBorder("Options")); 
    buttonBar.setLayout(new GridBagLayout()); 


    GridBagConstraints c = new GridBagConstraints(); 
    c.fill = GridBagConstraints.HORIZONTAL; 
    c.gridx = 0; 
    c.ipady = 5; 
    c.insets = new Insets(10,0,0,0); 


    JButton simplify; 
    simplify = new JButton("Open"); 
    simplify.addActionListener(this.listener); 
    c.gridy = 0; 
    buttonBar.add(simplify, c); 

    JButton mergeButton; 
    mergeButton = new JButton("Close"); 
    mergeButton.addActionListener(this.listener); 
    c.gridy = 1; 
    buttonBar.add(mergeButton, c); 

    JButton splitButton; 
    splitButton = new JButton("Merge"); 
    splitButton.addActionListener(this.listener); 
    c.gridy = 2; 
    buttonBar.add(splitButton, c); 

    c.insets = new Insets(0,5,5,5); 
    c.gridy = 0; 
    sideBar.add(optionBar, c); 

    c.gridy = 1; 
    c.ipadx = 70; 
    sideBar.add(buttonBar, c); 

    return(sideBar); 

ответ

2

GridBagLayout будет выделять достаточно вертикального пространства, требуемого компонентом, оставив остальное незаполненным. Я ожидаю, что вы увидите, что компоненты вашего бокового стержня расположены вертикально?

Для того, чтобы «вытолкнуть» компоненты, вам необходимо установить вертикальный вес. Если вы установите ограничение weighty на ваш последний компонент, он займет все оставшееся вертикальное пространство для этого компонента и подтолкнет остальных к вершине. (Возможно, вам также понадобится привязать эту последнюю панель к GridBagConstraints.NORTH).

Попробуйте c.weighty = 1.0 перед тем sideBar.add(buttonBar, c);

0

Код, который у меня есть места их на полпути вниз боковой панели, а не на сверху.

Ну, вам нужно начать с чтения Swing tutorial, чтобы узнать, как правильно использовать менеджеров компоновки. BoxLayout намного проще, чем GridBagLayout, потому что вам не нужно учиться определять ограничения. Но если вы хотите использовать GridBagLayout, прочитайте раздел «Как использовать GridBagLayout». Вы можете сосредоточиться на разделе, посвященном «весовым и веским» ограничениям. Основываясь на моих ограниченных знаниях, которые должны помочь решить проблему.

Кроме того, при использовании менеджеров компоновки вы не используете setBounds() или setSize().

2

Если вы знакомы/более комфортно с HTML, вы можете использовать table2gridbag. Это небольшой консольный инструмент, который принимает описание макета (таблица HTML) и переводит его в эквивалентное описание макета для настройки менеджера GridBagLayout

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