Есть ли более простой способ отобразить этот интерфейс Java? - PullRequest
0 голосов
/ 23 октября 2011

Я хочу отобразить строку текста с кнопкой под ней, обе из которых расположены по центру по горизонтали и вертикали.В настоящее время у меня есть BoxLayout, содержащий JLabel, жесткую область для интервалов и затем JButton в пределах JPanel.Это кажется довольно сложным для того, что я хочу сделать, а также когда размер окна изменяется, текст и кнопка больше не центрируются.Есть ли лучший способ сделать это?

----------------------
|                    |
|                    |
|                    |
|      ________      |
|      | Text |      |
|      --------      |
|      ________      |
|      |Button|      |
|      --------      |
|                    |
|                    |
|                    |
----------------------

Ответы [ 3 ]

1 голос
/ 23 октября 2011

Я бы пошел с чем-то вроде:

JButton btn = new JButton("I'm a Button");
JLabel lbl = new JLabel("I'm a Label");

JPanel pan = new JPanel();
pan.setLayout(new BoxLayout(pan, BoxLayout.Y_AXIS));

pan.add(lbl);
pan.add(btn);

JPanel pan2 = new JPanel();
pan2.setLayout(new BoxLayout(pan2, BoxLayout.X_AXIS));

pan2.add(Box.createHorizontalGlue());
pan2.add(pan);
pan2.add(Box.createHorizontalGlue());

setLayout(new BorderLayout());
add(pan2, BorderLayout.CENTER);

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

1 голос
/ 23 октября 2011

Centered Components

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

class CenteredComponents {

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JPanel gui = new JPanel(new GridLayout(0,1));
                JLabel l = new JLabel("Centered Text", SwingConstants.CENTER);
                gui.add(l);
                // the GBL allows us to center a component
                JPanel p = new JPanel(new GridBagLayout());
                p.add(new JButton("Centered Button"));
                gui.add(p);

                JFrame f = new JFrame("Centered Components");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setContentPane(gui);
                f.pack();
                f.setSize(350,150);
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }
}

Обновление

Мне нужно, чтобы оба компонента оставались вертикально центрированными, когда окно развернуто до максимума

Centered Components 2

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

class CenteredComponents {

    public static void main(String[] args) {
        SwingUtilities.invokeLater( new Runnable() {
            public void run() {
                JPanel gui = new JPanel(new GridLayout(0,1));
                // the GBL allows us to center a component..
                JPanel center = new JPanel(new GridBagLayout());
                JLabel l = new JLabel("Centered Text", SwingConstants.CENTER);
                gui.add(l);
                gui.add(new JButton("Centered Button"));
                // ..in this case the component is a panel
                center.add(gui);

                JFrame f = new JFrame("Centered Components");
                f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                f.setContentPane(center);
                f.pack();
                f.setSize(350,150);
                f.setLocationByPlatform(true);
                f.setVisible(true);
            }
        });
    }
}
1 голос
/ 23 октября 2011

Используйте 2x1 GridLayout .

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