Выравнивание по вертикали панели GridBagLayout в BorderLayout.CENTER - PullRequest
3 голосов
/ 09 ноября 2010

То, что я пытаюсь сделать, это поместить панель GridBagLayout в центр моего BorderLayout и выровнять по вертикали панель GridBagLayout (/ и текст на ней) по верхнему краю (поскольку она автоматически помещает ее в середину по горизонтали И по вертикали).

Итак, что я в основном пробовал (но в итоге текст GridBagLayout все еще находился в общей середине страницы, а не в середине x и верхнем y):

import java.awt.*;
import java.applet.*;
import javax.swing.*;
import javax.imageio.*;
import javax.swing.BorderFactory;
import javax.swing.border.*;
import java.awt.event.*;

public class Test extends JApplet implements MouseListener, ActionListener {

 public void init() {
    //create borderlayout
    this.setLayout(new BorderLayout());
    //create a GridBagLayout panel
    JPanel gb = new JPanel(new GridBagLayout());
    JLabel content = new JLabel("Some text");
    //set GridBagConstraints (gridx,gridy,fill,anchor)
    setGBC(0, 0, GridBagConstraints.VERTICAL, GridBagConstraints.NORTH);
    gb.add(content, gbc); //gbc is containing the GridBagConstraints
    this.add(gb, BorderLayout.CENTER);
  }

}

Поэтому я попытался использовать привязку gridbagconstraints, чтобы установить выравнивание по вертикали на север, сверху, но, похоже, это не сработало.Я также попытался изменить размер самой панели GridBagLayout (чтобы она имела полную высоту макета, 100%, используя panel.setSize и setPreferredSize), а затем выровнять по вертикали элементы на ней, используя gridbagconstraints.anchor, но это не сработало.либо.

Может ли кто-нибудь помочь мне в этом?

Заранее спасибо,

С наилучшими пожеланиями, Скайф.

Так что мой вопрос

Ответы [ 3 ]

12 голосов
/ 10 ноября 2010

Внимательно посмотрите на Javadoc каждого свойства класса GridBagConstraints перед его использованием.

import java.awt.*;
import javax.swing.*;

public class Test extends JFrame {

    public static void main(String arg[]) {
    JFrame frame = new JFrame();
    frame.setLayout(new BorderLayout());

    JPanel gb = new JPanel(new GridBagLayout());
    JLabel content = new JLabel("Some text");

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.anchor = GridBagConstraints.NORTH;
    gbc.weighty = 1;

    gb.add(content, gbc); // gbc is containing the GridBagConstraints
    frame.add(gb, BorderLayout.CENTER);

    frame.setVisible(true);
    }

}
1 голос
/ 09 ноября 2010

Ваш

setGBC(0, 0, GridBagConstraints.VERTICAL, GridBagConstraints.NORTH);

заставляет компонент («контент») заполнять ГБ по вертикали.Возможно, поэтому вы думаете, что ваш компонент (контент) все еще находится в середине.Попробуйте установить его на GridBagConstraints.NONE.Это выровняет ваш контент по верху внутри панели с GridBagLayout.

для внешнего компонента, вы всегда можете использовать что-то вроде:

panel.add(button, BorderLayout.PAGE_START);

и посмотреть, работает ли он.

0 голосов
/ 10 ноября 2010

В дополнение к установке fill на НЕТ, также установите для weighty значение, отличное от 0 (например, 1,0). Это говорит макету о выделении всего дополнительного пространства в столбце GridBag для этой конкретной ячейки, но, поскольку сама метка привязана к северу и не заполнена, дополнительное пространство будет выделено под меткой.

...