JComponent и Left Align компонентов - PullRequest
0 голосов
/ 18 декабря 2009

С помощью следующего кода я хочу создать универсальный компонент Jpanel и добавить два подкомпонента, Label и JTextField. Я должен добавить компоненты, но они не выровнены по левому краю.

(Нет, мне не нужен GridBagLayout, но я пытался сделать простой пример с GridBag. Можете ли вы описать, как это сделать с GridBag, а не с другим макетом).

public Component buildStatusComponent() {

    // Place the components on one line //
    final GridBagLayout layout = new GridBagLayout(); 
    final GridBagConstraints constraints = new GridBagConstraints();              
    final JPanel group = new JPanel(layout);

    constraints.anchor = GridBagConstraints.WEST;
    constraints.gridx = 0;        
    constraints.fill = GridBagConstraints.NONE;
    group.setAlignmentX(JComponent.LEFT_ALIGNMENT);
    group.add(new JLabel("Messages: "), constraints);

    constraints.gridx = 1;
    constraints.fill = GridBagConstraints.HORIZONTAL;
    group.add(this.statusArea, constraints);        

    return group;
}

Выше этого уровня я просто добавляю JPanel и заполняю по горизонтали.

constraints.gridy++;
constraints.fill = GridBagConstraints.HORIZONTAL;
this.add(this.buildStatusComponent(), constraints);

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

вы не используете GridBagConstraints. Вместо того, чтобы вводить group.setAlignmentX (JComponent.LEFT_ALIGNMENT) (что мне никогда не удается заставить работать, ха-ха), просто используйте contraints.anchor = GridBagConstraints.WEST.

Многим людям не нравится GridBagLayout, но мне будет легко с ним работать, когда вы поймете, как он работает. Самое сложное, с чем приходится иметь дело - это вес объекта в сетке.

Но именно с этим вопросом вы просто хотите привязать компонент к стороне с константами GridBagConstraint и полагаться на класс ограничений, чтобы контролировать, куда идут вещи.

РЕДАКТИРОВАТЬ: хорошо, а затем дать им вес. (хотя это может не решить проблему хе-хе)

constraints.weightx = 1d;

Что происходит, так это то, что все имеют одинаковый вес, поэтому я считаю, что они равномерно распределены. Если вы хотите «втиснуть» предметы в элементы, вы можете добавить пустой JPanel после последнего компонента и установить для fill = REMAINDER значение 1, а других компонентов - значение 0. 'вокруг другого.

GridBagConstraints gbc = new GridBagConstraints();
JPanel p = new JPanel(new GridBagLayout());
gbc.gridx = 0;
gbc.gridy = 0;
gbc.anchor = GridBagConstraints.WEST;

p.add(new JLabel("A"), gbc);
gbc.gridx++;
p.add(new JLabel("B"), gbc);
gbc.gridx++;
gbc.weightx = 1d;
gbc.fill = GridBagConstraints.REMAINDER;
p.add(new JPanel(), gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.weightx = 0d;
.... continue on filling stuff...

Это один из способов справиться с этим. Немного поиграть с ним, пока вы не почувствуете, как это работает, хорошо.

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

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

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

Если вам нужна дополнительная помощь, опубликуйте SSCCE , который демонстрирует проблему.

...