используя клей на GUI, Java - PullRequest
       11

используя клей на GUI, Java

5 голосов
/ 01 января 2012

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

Хорошим примером была бы реализация класса CenteringPanel: все, что он делает, это получает JComponent и центрирует его, оставляя его не растянутым по центру.окна ... я пытался кодировать что-то вроде этого:

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JPanel;


public class CenteringPanel extends JPanel{
    private static final long serialVersionUID = 1L;
    public CenteringPanel(JComponent toCenter) {
        setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
        add(Box.createHorizontalGlue());
        add(Box.createVerticalGlue());
        add(toCenter);
        add(Box.createVerticalGlue());
        add(Box.createHorizontalGlue());
    }

}

1 Ответ

5 голосов
/ 01 января 2012

Если ваша цель состоит в том, чтобы центрировать компонент, то GridBagLayout прекрасно выполнит эту работу:

public class CenteringPanel extends JPanel {
    public CenteringPanel(JComponent child) {
        GridBagLayout gbl = new GridBagLayout();
        setLayout(gbl);
        GridBagConstraints c = new GridBagConstraints();
        c.gridwidth = GridBagConstraints.REMAINDER;
        gbl.setConstraints(child, c);
        add(child);
    }
}

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

Если ваша цель - использовать Glue в BoxLayout для центрирования компонента, тогда заданиенемного сложнее.Добавление горизонтального клея с вертикальным BoxLayout не помогает, потому что компоненты располагаются вертикально (и аналогично для горизонтального BoxLayout).Вместо этого вам нужно ограничить размер дочернего элемента и использовать его выравнивание.Я не пробовал, но для вертикальной BoxLayout, что-то вроде этого должно работать:

public class CenteringPanel {
    public CenteringPanel(JComponent child) {
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        GridBagConstraints c = new GridBagConstraints();
        child.setMaximumSize(child.getPreferredSize());
        child.setAlignmentX(Component.CENTER_ALIGNMENT);
        add(Box.createVerticalGlue());
        add(child);
        add(Box.createVerticalGlue());
    }
}
...