gpt4 book ai didi

java - 将 JPanel 动态添加到 JTable 或 JScrollPane

转载 作者:行者123 更新时间:2023-12-02 04:45:28 25 4
gpt4 key购买 nike

当前正在处理一个项目,我需要动态地将我制作的面板添加到滚动 Pane 或表格中。滚动 Pane 应从空开始并添加面板。

GuiConstructor 是我制作窗口的地方。

我的问题是,如果我不注释掉 GuiConstructor 中的 setSize,窗口开始时会非常小。其次,当我按下添加按钮时,它不会添加面板。

public GuiConstructor(){
super(APPLICATION_NAME);
setLayout(new BorderLayout());
LoopControlWindow loopwin = new LoopControlWindow(connect);
add(loopwin , BorderLayout.NORTH);
pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
//this.setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}


public class LoopControlWindow extends JPanel {

IConnector connect;

public LoopControlWindow(IConnector connect) {
super(new BorderLayout());
this.connect = connect;
initPane();
}

private void initPane() {
JPanel panel = new JPanel(new GridLayout(3,1));
FolderSearchComp fsc = new FolderSearchComp(connect);
JScrollPane scrollPane = new JScrollPane();
JButton button = new JButton("Add");

button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
panel.add(new FolderSearchComp(connect));
scrollPane.getViewport().setView(panel);
}
});



scrollPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setViewportBorder(new LineBorder(Color.BLACK));


add(scrollPane, BorderLayout.CENTER);
add(button, BorderLayout.SOUTH);


}

最佳答案

这是这种 GUI 应用程序风格的典型。您需要告诉布局管理器在不使用 setSize() 的情况下初始将窗口设置为多大。执行此操作的方法是重写 getPreferredSize() 以返回默认大小。对于您的情况:

public LoopControlWindow extends JPanel {
private Dimension size;

public LoopControlWindow() {
Preferences prefs = Preferences.userNodeForPackge("your.java.package");
size = new Dimension(prefs.getInt("width", 800), prefs.getInt("height", 600));
}
public Dimension getPreferredSize() {
return size;
}
}

通过这种方式,您可以存储窗口尺寸的用户首选项,但也可以提供合理的默认值来启动。

您还应该确保此 JPanel 是您的主面板,并且已添加到 BorderLayout.CENTER 处的 JFrame,以确保正确绘制窗口。所有其他面板都应该位于此面板内的某个位置。

完成此设置后,调用 pack() 将正常工作。

关于java - 将 JPanel 动态添加到 JTable 或 JScrollPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705744/

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