有没有更简单的方法来显示这个JavaUI?

有没有更简单的方法来显示这个JavaUI?,java,swing,layout,user-interface,awt,Java,Swing,Layout,User Interface,Awt,我想显示一行文本,下面有一个按钮,两个按钮水平和垂直居中。我目前有一个BoxLayout包含一个JLabel,一个刚性的间隔区域,然后在JPanel中有一个JButton。这对于我想要做的事情来说似乎相当复杂,而且当窗口大小改变时,文本和按钮都不再居中。有更好的方法吗 ---------------------- | | | | | | | ________ |

我想显示一行文本,下面有一个按钮,两个按钮水平和垂直居中。我目前有一个
BoxLayout
包含一个
JLabel
,一个刚性的间隔区域,然后在
JPanel
中有一个
JButton
。这对于我想要做的事情来说似乎相当复杂,而且当窗口大小改变时,文本和按钮都不再居中。有更好的方法吗

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

使用2x1。

使用2x1。

我会选择类似于:

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);

它仍然有点复杂,您可能希望为标签添加另一个面板,使其居中,根据我的经验,UI在布局上需要做很多工作。

我会选择以下内容:

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);
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);
            }
        });
    }
}
它仍然有点复杂,您可能希望为标签添加另一个面板,使其居中,根据我的经验,UI的布局往往需要大量工作。

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);
            }
        });
    }
}

更新 当窗口最大化时,我需要两个组件保持垂直居中


更新 当窗口最大化时,我需要两个组件保持垂直居中


这很好,除了当窗口最大化时,我需要两个组件保持垂直居中。我认为我的代码实现了spec.DYM,它们应该保持在一起并垂直居中?这很容易。首先将这两个组件放在GL面板中,然后将该面板添加到GBL。若你们在改变大小之前和之后都提供了ASCII图形用户界面的艺术,那个么在布局问题上会有很大的帮助。非常感谢。我知道下次要提供ASCII图像。但是,现在组件会拉伸窗口的宽度。可以把它们缩小到合适的尺寸吗?是的,是的。提供ASCII艺术,我来看看需要做什么。您在理解“大小更改前后提供的GUI ASCII艺术”的哪一部分时遇到困难?这是两个(数一数,2)ASCII艺术。1有什么用?OTOH 1)我随机猜测(我通常不会这么做),你的意思正是我在第一次评论中提出的。2) 对于一个先前标记为已回答的问题,我将提供的帮助(请参见编辑)到此结束。这非常有效,只是当窗口最大化时,我需要两个组件保持垂直居中。我认为我的代码实现了规范。DYM它们应该保持在一起并垂直居中?这很容易。首先将这两个组件放在GL面板中,然后将该面板添加到GBL。若你们在改变大小之前和之后都提供了ASCII图形用户界面的艺术,那个么在布局问题上会有很大的帮助。非常感谢。我知道下次要提供ASCII图像。但是,现在组件会拉伸窗口的宽度。可以把它们缩小到合适的尺寸吗?是的,是的。提供ASCII艺术,我来看看需要做什么。您在理解“大小更改前后提供的GUI ASCII艺术”的哪一部分时遇到困难?这是两个(数一数,2)ASCII艺术。1有什么用?OTOH 1)我随机猜测(我通常不会这么做),你的意思正是我在第一次评论中提出的。2) 对于之前标记为已回答的问题,我将提供的帮助(请参见编辑)到此结束。