x_axis 和 line_axis 都从左到右排列组件。那么它们之间有什么区别呢?
这个问题来自 Java Swing boxlayout 布局管理器。
从官方文档:
X_AXIS - 组件从左到右水平布局。
LINE_AXIS - 根据容器的 ComponentOrientation 属性,组件的布局方式与单词在一行中的布局方式相同。如果容器的 ComponentOrientation 是水平的,则组件水平布局,否则垂直布局。对于水平方向,如果容器的 ComponentOrientation 是从左到右,则组件从左到右布局,否则它们从右到左布局。对于垂直方向,组件总是从上到下布局。
我希望下面的代码示例能够提供更多关于 Java 文档在 BoxLayout.LINE_AXIS 上所说的内容:
LINE_AXIS - 根据容器的 ComponentOrientation 属性,组件的布局方式与单词在一行中的布局方式相同。如果容器的 ComponentOrientation 是水平的,则组件水平布局,否则垂直布局。对于水平方向,如果容器的 ComponentOrientation 是从左到右,则组件从左到右布局,否则它们从右到左布局。对于垂直方向,组件总是从上到下布局。
X_AXIS - 组件从左到右水平布局。
请注意最后两行,如何从RIGHT 到 LEFT以及从 __LEFT 到 RIGHT_ 到最后一个Buttons
添加到倒数第二行JPanel
JPanel
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);
}
}
输出 :
X_AXIS始终是水平的。 LINE_AXIS都可以基于容器的ComponentOrientation属性。
资源:
https://docs.oracle.com/en/java/javase/15/docs/api/java.desktop/javax/swing/BoxLayout.html