Боковая панель Java с GridBagLayout - PullRequest
0 голосов
/ 15 декабря 2009

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

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

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

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

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

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

2 голосов
/ 16 сентября 2010

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

0 голосов
/ 15 декабря 2009

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

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

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

...