5

x_axis 和 line_axis 都从左到右排列组件。那么它们之间有什么区别呢?

这个问题来自 Java Swing boxlayout 布局管理器。

4

3 回答 3

6

从官方文档

X_AXIS - 组件从左到右水平布局。

LINE_AXIS - 根据容器的 ComponentOrientation 属性,组件的布局方式与单词在一行中的布局方式相同。如果容器的 ComponentOrientation 是水平的,则组件水平布局,否则垂直布局。对于水平方向,如果容器的 ComponentOrientation 是从左到右,则组件从左到右布局,否则它们从右到左布局。对于垂直方向,组件总是从上到下布局。

于 2013-07-09T13:44:18.523 回答
4

我希望下面的代码示例能够提供更多关于 Java 文档在 BoxLayout.LINE_AXIS 上所说的内容:


LINE_AXIS - 根据容器的 ComponentOrientation 属性,组件的布局方式与单词在一行中的布局方式相同。如果容器的 ComponentOrientation 是水平的,则组件水平布局,否则垂直布局。对于水平方向,如果容器的 ComponentOrientation 是从左到右,则组件从左到右布局,否则它们从右到左布局。对于垂直方向,组件总是从上到下布局。


X_AXIS - 组件从左到右水平布局。


请注意最后两行,如何从RIGHT 到 LEFT以及从 __LEFT 到 RIGHT_ 到最后一个Buttons添加到倒数第二行JPanelJPanel

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

public class BoxLayoutExample
{
    private JPanel topPanel;
    private JPanel middlePanel;
    private JPanel bottomPanel;
    private JPanel addedBottomPanel;
    private JButton[] button;

    public BoxLayoutExample()
    {
        button = new JButton[12];
    }

    private void displayGUI()
    {
        JFrame frame = new JFrame("Box Layout Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new GridLayout(4, 1, 5, 5));

        topPanel = new JPanel();
        topPanel.setLayout(new BoxLayout(
                            topPanel, BoxLayout.X_AXIS));
        for (int i = 0; i < 3; i++)
        {
            button[i] = new JButton(Integer.toString(i));
            topPanel.add(button[i]);
        }

        middlePanel = new JPanel();
        middlePanel.setLayout(new BoxLayout(
                            middlePanel, BoxLayout.LINE_AXIS));
        for (int i = 3; i < 6; i++)
        {
            button[i] = new JButton(Integer.toString(i));
            middlePanel.add(button[i]);
        }

        bottomPanel = new JPanel();     
        bottomPanel.setComponentOrientation(
                        ComponentOrientation.RIGHT_TO_LEFT);        
        bottomPanel.setLayout(new BoxLayout(
                            bottomPanel, BoxLayout.LINE_AXIS));
        for (int i = 6; i < 9; i++)
        {
            button[i] = new JButton(Integer.toString(i));
            bottomPanel.add(button[i]);
        }

        addedBottomPanel = new JPanel();        
        addedBottomPanel.setComponentOrientation(
                        ComponentOrientation.RIGHT_TO_LEFT);        
        addedBottomPanel.setLayout(new BoxLayout(
                            addedBottomPanel, BoxLayout.X_AXIS));
        for (int i = 9; i < 12; i++)
        {
            button[i] = new JButton(Integer.toString(i));
            addedBottomPanel.add(button[i]);
        }

        contentPane.add(topPanel);
        contentPane.add(middlePanel);
        contentPane.add(bottomPanel);
        contentPane.add(addedBottomPanel);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        Runnable runnable = new Runnable()
        {
            @Override
            public void run()
            {
                new BoxLayoutExample().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

输出 :

BoxLayout 示例

于 2013-07-10T06:04:47.173 回答
2

X_AXIS始终是水平的。 LINE_AXIS都可以基于容器的ComponentOrientation属性。

资源:

https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/javax/swing/BoxLayout.html

于 2013-07-09T13:44:22.920 回答