Менеджер по расположению Java вертикальный центр

это потому, что статические поля инициализированы в том же порядке, который они определили.

11
задан Hamza Yerlikaya 22 May 2009 в 13:46
поделиться

4 ответа

Попробуйте использовать GridBagLayout и добавить панель с пустым объектом GridBagConstrants .
Например:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setLayout(new GridBagLayout());
    JPanel panel = new JPanel();
    panel.add(new JLabel("This is a label"));
    panel.setBorder(new LineBorder(Color.BLACK)); // make it easy to see
    frame.add(panel, new GridBagConstraints());
    frame.setSize(400, 400);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
23
ответ дан 3 December 2019 в 02:20
поделиться

Во-первых, я должен упомянуть, прочтите мою статью о макетах: http://web.archive.org/web/20120420154931/http://java.sun.com/developer / onlineTraining / GUI / AWTLayoutMgr / . Он старый, но очень полезный (к сожалению, эта статья предшествует BoxLayout. У меня есть несколько слайдов, когда я выступал с докладом на JavaOne, который включает BoxLayout по адресу http://javadude.com/articles/javaone )

Попробуйте BoxLayout:

Box verticalBox = Box.createVerticalBox();
verticalBox.add(Box.createVerticalGlue());
verticalBox.add(stuffToCenterVertically);
verticalBox.add(Box.createVerticalGlue());

, и если вы хотите центрировать этот материал, используйте HorizontalBox как stuffToCenterVertical:

Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(stuffToCenter);
horizontalBox.add(Box.createHorizontalGlue());

Намного легче «увидеть» в коде, чем gridbag

10
ответ дан 3 December 2019 в 02:20
поделиться

You can build you own LayoutManager to center a single component(both axis or just one). Here is the one which does it on both axis, you can easily change it to have vertical or horizontal centering.

The current implementation layouts first visible child, you can change that too...

public class CentreLayout implements LayoutManager, java.io.Serializable {

public void addLayoutComponent(String name, Component comp) {
}

public void removeLayoutComponent(Component comp) {
}

public Dimension preferredLayoutSize(Container target) {
    return target.getPreferredSize();
}

public Dimension minimumLayoutSize(Container target) {
    return target.getMinimumSize();
}

public void layoutContainer(Container target) {
    synchronized (target.getTreeLock()) {
        Insets insets = target.getInsets();
        Dimension size = target.getSize();
        int w = size.width - (insets.left + insets.right);
        int h = size.height - (insets.top + insets.bottom);
        int count = target.getComponentCount();

        for (int i = 0; i < count; i++) {
            Component m = target.getComponent(i);
            if (m.isVisible()) {
                Dimension d = m.getPreferredSize();
                m.setBounds((w - d.width) / 2, (h - d.height) / 2, d.width, d.height);
                break;
            }
        }
    }
}

}
0
ответ дан 3 December 2019 в 02:20
поделиться

GroupLayout на самой панели с GroupLayout.Alignment.CENTER , как для вертикального, так и для горизонтального расположения, и setPreferredSize (new Dimension (yourChosenWidth, yourChosenHeight)) , чтобы панель не изменяла размер.

Вы также можете использовать setMinimumSize и setMaximum size на панели на всякий случай.

Если вы чувствуете себя привлекательно, вы можете просто использовать один-единственный GroupLayout для всего этого, тщательно выбирая параллельные / последовательные группы и соответствующим образом группируя метки.

0
ответ дан 3 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: