gpt4 book ai didi

java - 为什么 GroupLayout 中的链接组件无法调整大小?

转载 作者:行者123 更新时间:2023-12-02 13:27:20 38 4
gpt4 key购买 nike

对于我正在制作的计算器应用程序的 GUI,我有一个 JButton 对象网格,其中所有对象的大小相同,除了一个的宽度是其他对象的两倍。它应该看起来像这样(除了线条是直的):

enter image description here

我的第一个想法是定义 JButton 对象的大小(我们称之为 CELL_SIZE),然后将按钮的首选大小设置为 >CELL_SIZE,但较长的按钮将具有 CELL_SIZE * 2。这将一直有效,直到您调整窗口大小。我希望按钮能够自行调整大小,以便无论窗口的尺寸如何,除了较长的按钮之外,所有按钮的尺寸都相同。因此,我尝试使用 linkSize,将除长按钮之外的所有按钮作为参数。但按钮不会调整大小!然后我在 javadoc 中读到 linkSize 阻止组件调整大小。为什么是这样?我可以使用这个方法来完成这个布局,还是我需要其他东西?

下面是我为演示问题而键入的一个类(实际应用程序除了布局之外还挤满了其他功能)它只有 5 个按钮,用于表示图像的左下角 3x2 区域。

import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

class A extends JPanel{

public static final int CELL_SIZE = 32;
JButton b1 = new JButton("1");
JButton b2 = new JButton("2");
JButton b3 = new JButton("3");
JButton b4 = new JButton("4");
JButton b5 = new JButton("5");

public A(){
GroupLayout layout = new GroupLayout(this);
layout.setHorizontalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(b1, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b2, 0, CELL_SIZE, Short.MAX_VALUE)
).addGroup(layout.createParallelGroup()
.addGroup(layout.createSequentialGroup()
.addComponent(b3, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b4, 0, CELL_SIZE, Short.MAX_VALUE)
)
.addComponent(b5, 0, CELL_SIZE * 2, Short.MAX_VALUE)
)
);
layout.setVerticalGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup()
.addComponent(b1, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b3, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b4, 0, CELL_SIZE, Short.MAX_VALUE)
).addGroup(layout.createParallelGroup()
.addComponent(b2, 0, CELL_SIZE, Short.MAX_VALUE)
.addComponent(b5, 0, CELL_SIZE, Short.MAX_VALUE)
)
);
layout.linkSize(b1, b2, b3, b4);
setLayout(layout);
}

private static void createAndShowGUI(){
JFrame f = new JFrame("GroupLayout Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new A());
f.pack();
f.setVisible(true);
}

public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
createAndShowGUI();
}
});
}

}

编辑:如果我调用 addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 并删除 linkSize 调用,则按钮大小会变得奇怪。 b1b2 变得比 b3b4 宽,但不如 b5 宽>.

最佳答案

来自 Oracle tutorial :

1) 强制调整组件大小(允许缩小和增大):

group.addComponent(component, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ...

这允许组件在零大小(最小)到任何大小之间调整大小(Short.MAX_VALUE 作为最大大小意味着“无限”)。如果我们希望组件不缩小到低于其默认最小大小,我们将在第二个参数中使用 GroupLayout.DEFAULT_SIZE 而不是 0。

2) 使组件固定大小(禁止调整大小):

group.addComponent(component, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE,
GroupLayout.PREFERRED_SIZE) ...

我认为你应该使用第一个选项。

关于java - 为什么 GroupLayout 中的链接组件无法调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331306/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com