gpt4 book ai didi

java - 为什么我的 JPanel 的首选大小没有改变,而其包含的 JScrollPane 在 GroupLayout 中却发生了变化?

转载 作者:行者123 更新时间:2023-11-30 05:10:14 25 4
gpt4 key购买 nike

使用 GroupLayout 和下面的代码,我注意到 leftPanel 没有更新它的首选大小。我认为这应该是自动的,并且似乎可以在其他布局管理器中工作。我怎样才能通过 GroupLayout 获得这种行为?

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class SizeTesting {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,400);

JSplitPane splitPane = new JSplitPane();

final JPanel leftPanel = new JPanel();
final DefaultListModel listModel = new DefaultListModel();
final JList list = new JList(listModel);
final JScrollPane jsp = new JScrollPane(list);
leftPanel.add(jsp);

splitPane.setLeftComponent(leftPanel);

GroupLayout panel1Layout = new GroupLayout(leftPanel);
leftPanel.setLayout(panel1Layout);
panel1Layout.setHorizontalGroup(
panel1Layout.createParallelGroup()
.addComponent(jsp, GroupLayout.Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
);
panel1Layout.setVerticalGroup(
panel1Layout.createParallelGroup()
.addGroup(GroupLayout.Alignment.TRAILING, panel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jsp, GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE))
);



JPanel rightPanel = new JPanel();

JButton button = new JButton("Add Long Item");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
System.out.println("Preferred Size of List BEFORE: " + list.getPreferredSize());
System.out.println("Preferred Size of ScorllPane BEFORE: " + jsp.getPreferredSize());
System.out.println("Preferred size of LeftPanel BEFORE: " + leftPanel.getPreferredSize());
System.out.println();

listModel.addElement("Really long, new Item in List");
System.out.println("Preferred Size of List AFTER: " + list.getPreferredSize());
System.out.println("Preferred Size of ScorllPane AFTER: " + jsp.getPreferredSize());
System.out.println("Preferred size of LeftPanel AFTER: " + leftPanel.getPreferredSize());
}
});
rightPanel.add(button);
splitPane.setRightComponent(rightPanel);

listModel.addElement("Test");
listModel.addElement("Test2");
listModel.addElement("Test3");

frame.add(splitPane);
frame.setVisible(true);
}
} // end class SizeTesting

最佳答案

组件的首选大小取决于添加到其中的组件的首选大小。

是的,当您向列表中添加项目时,JList 的首选大小将会改变。但是,JList 被添加到 JScrollPane 中,因此 JScrollPane 的首选大小用于确定 JPanel 的首选大小。

由于您使用 IDE 来创建 GUI,因此看起来 JScrollPane 的首选大小是在设计时确定的,并硬编码到约束中。当调整框架大小或向 JList 添加项目时,JScrollPane 的首选大小不会改变。 JScrollPane 和 JPanel 的“大小”将随着框架大小的调整而改变。

关于java - 为什么我的 JPanel 的首选大小没有改变,而其包含的 JScrollPane 在 GroupLayout 中却发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680531/

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