安卓的LinearLayout用于Swing

6
有没有适用于Swing的LayoutManager,其行为类似于Android中的LinearLayout?我非常喜欢组件权重的想法。
3个回答

7
您可以使用FlowLayout、GridLayout或BorderLayout。根据我在Java图形用户界面构建方面的经验,大部分时间我都使用BorderLayout和GridLayout的组合。
布局基础可以参考布局基础
如果您希望它看起来像下面这样: enter image description here 那么代码如下:
public void initComponents() {

    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();
    jButton4 = new javax.swing.JButton();

    setLayout(new java.awt.GridLayout(0, 1));

    jButton1.setText("jButton1");
    add(jButton1);

    jButton2.setText("jButton2");
    add(jButton2);

    jButton3.setText("jButton3");
    add(jButton3);

    jButton4.setText("jButton4");
    add(jButton4);
}

1
我不希望组件像GridLayout一样具有相等的大小。我希望它们能够按照其各自的布局权重成比例地显示,就像Android的LinearLayout一样。 - tilex
那么答案就是使用FlowLayout。但是FlowLayout的问题在于,当您最大化窗口时,所有组件都会重新排列。 - Marl

2
如果您需要单独的权重,请使用GridBagLayout。或者您可以尝试使用BoxLayout。

看起来GridBagLayout非常接近我所寻找的东西。 - tilex

1
您可以使用SwanLayout https://github.com/idayrus/swan-layout
该库在Java Swing中实现了LinearLayout和FrameLayout。
以下是Kotlin示例:
val panelVertical = JPanel(LinearLayout(LinearLayout.VERTICAL))
val panelHorizontal = JPanel(LinearLayout(LinearLayout.HORIZONTAL))
val lc = LinearConstraints()

lc.reset()
lc.width = 0
lc.weight = 0.5
lc.margin = 10
lc.marginEnd = 5
panelHorizontal.add(JButton("Horizontal (weight 0.5)"), lc)

lc.reset()
lc.width = 0
lc.weight = 0.5
lc.margin = 10
lc.marginStart = 5
panelHorizontal.add(JButton("Horizontal (weight 0.5)"), lc)

// Add panelHorizontal to panelVertical
lc.reset()
lc.width = LinearConstraints.MATCH_PARENT
lc.height = LinearConstraints.WRAP_CONTENT
panelVertical.add(panelHorizontal, lc)

lc.reset()
lc.margin = 10
lc.marginTop = 0
lc.width = LinearConstraints.WRAP_CONTENT
lc.height = LinearConstraints.WRAP_CONTENT
lc.gravity = LinearConstraints.CENTER
panelVertical.add(JButton("Gravity Center"), lc)

lc.reset()
lc.margin = 10
lc.marginTop = 0
lc.width = LinearConstraints.MATCH_PARENT
lc.height = LinearConstraints.MATCH_PARENT
panelVertical.add(JButton("Fill Remain"), lc)

Result


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接