Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何将组件的垂直列居中?_Java_Swing_Layout_Center - Fatal编程技术网

Java-如何将组件的垂直列居中?

Java-如何将组件的垂直列居中?,java,swing,layout,center,Java,Swing,Layout,Center,这很简单,我想做什么,但我想不出一个办法。在JFrame或JPanel中,如何使组件垂直居中?也就是说,类似于在HTML中使用中心标记。组件位于一列中,并且都居中 我尝试过BoxLayout,使用Y_轴和PAGE_轴,但它以一种奇怪的方式对齐组件。我曾尝试将FlowLayout与首选大小设置一起使用,使其环绕,但不居中。对于这样一件简单的事情,我不想求助于像GridBagLayout这样功能强大的东西,除非它真的是唯一的选择。救命啊 如果我不得不猜测,我会说您使用的组件具有不同的“x对齐”。尝试

这很简单,我想做什么,但我想不出一个办法。在JFrame或JPanel中,如何使组件垂直居中?也就是说,类似于在HTML中使用中心标记。组件位于一列中,并且都居中


我尝试过BoxLayout,使用Y_轴和PAGE_轴,但它以一种奇怪的方式对齐组件。我曾尝试将FlowLayout与首选大小设置一起使用,使其环绕,但不居中。对于这样一件简单的事情,我不想求助于像GridBagLayout这样功能强大的东西,除非它真的是唯一的选择。救命啊

如果我不得不猜测,我会说您使用的组件具有不同的“x对齐”。尝试使用:

component.setAlignmentX(JComponent.CENTER_ALIGNMENT);
有关详细信息,请参见上的Swing教程部分

如果你需要更多的帮助,那就把你所尝试过的展示出来

编辑:


你能提供一些示例代码吗?另外,具体要求是什么?一行有多少个组件?@little bunny foo foo每行只有一个组件。没有具体要求;这是我经常面对的一个非常普遍的布局问题。我在想一些与html中心标记完全相同的事情,在网页上的所有内容之间都有一个br标记。一列垂直的东西,居中。我会提供一个例子,但我认为
BoxLayout
是你最好的选择。好的,谢谢。如果你也能解释一下为什么我用BoxLayout尝试的东西不起作用,那将非常感谢:)OP是垂直居中,而不是水平居中。然后你还可以添加一些胶水。
import java.awt.*;
import javax.swing.*;

public class BoxLayoutTest extends JFrame
{
    public BoxLayoutTest()
    {
        Box box = new Box(BoxLayout.Y_AXIS);
        add( box );

        JLabel label = new JLabel("I'm centered");
        label.setAlignmentX(JComponent.CENTER_ALIGNMENT);

        box.add( Box.createVerticalGlue() );
        box.add( label );
        box.add( Box.createVerticalGlue() );
    }

    public static void main(String[] args)
    {
        BoxLayoutTest frame = new BoxLayoutTest();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.setSize(300, 300);
        frame.setLocationRelativeTo( null );
        frame.setVisible(true);
    }
}