позиционирование с помощью Java Swing - PullRequest
2 голосов
/ 27 сентября 2010

Я новичок в Swing.Это код, который я написал

import java.awt.*;
import javax.swing.*;
public class NewMain {
    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("test");
        frame.setVisible(true);
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());
        addItem(panel, new JLabel("Label"), 0, 0, GridBagConstraints.EAST);
        frame.add(panel);
    }

    private static void addItem(JPanel p, JComponent gc, int i, int i0, int align) {
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(5,5,5,5);
        c.gridx = i;
        c.gridy = i0;
        c.anchor = align;
        p.add(gc,c);

    }

Когда я запускаю программу, независимо от того, что я передаю в качестве параметра align (GridBagConstraints.NORTH или GridBagConstraints.SOUTH и т.д. ...), мой ярлыквыровнен по центру панели.

Как изменить выравнивание метки?

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

Ответы [ 2 ]

0 голосов
/ 27 сентября 2010
Значение

по умолчанию для weightx в GridBagConstraint равно нулю, весь макет сохраняется как можно меньше и центрируется на родительском компоненте. Используйте ненулевое положительное значение weightx, чтобы компонент использовал всю горизонтальную длину, чтобы макет занимал все доступное пространство. То же самое для weighty для вертикального направления.

...
c.anchor = align;
c.weightx = 1.0:
...

Javadoc: массаx

0 голосов
/ 27 сентября 2010

Это потому, что JLabel - единственный компонент в вашем графическом интерфейсе.Если вы добавите больше компонентов, они будут размещены относительно них в соответствии с их положением.Вот расширение вашей проги с добавленной пустой панелью:

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


public class NewMain {

    public static void main(String[] args) {
        // TODO code application logic here
        JFrame frame = new JFrame("test");
        frame.setVisible(true);
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        JPanel emptyArea = new JPanel();
        emptyArea.setPreferredSize(new Dimension(200, 200));
        addItem(panel, new JLabel("Label"), 0, 0, GridBagConstraints.WEST);
        addItem(panel, emptyArea, 0, 0, GridBagConstraints.CENTER);
        frame.add(panel);
    }

    private static void addItem(JPanel p, JComponent gc, int i, int i0, int align) {
        GridBagConstraints c = new GridBagConstraints();
        c.insets = new Insets(5,5,5,5);
        c.gridx = i;
        c.gridy = i0;
        c.anchor = align;
        p.add(gc,c);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...