gpt4 book ai didi

java - JScrollPane (for JTable) 在 MigLayout 中填充和增长

转载 作者:行者123 更新时间:2023-11-30 11:18:18 29 4
gpt4 key购买 nike

很难描述发生了什么,所以这是一个 SSCCE:

public class TableInScrollPaneTest {


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

public TableInScrollPaneTest() {

JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);

LayoutManager layout;

layout = new MigLayout("wrap 1, fill", "fill, grow", "[fill, grow 1][fill, grow 2]");
//layout = new GridLayout(2,1);

JPanel panel = new JPanel(layout);


JPanel placeHolder = new JPanel();
JPanel placeHolder2 = new JPanel();
placeHolder.setBackground(Color.GRAY);
placeHolder2.setBackground(Color.LIGHT_GRAY);

JTable table = this.createTable();
JScrollPane tableScrollPane = new JScrollPane(table,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//table.setPreferredScrollableViewportSize(new Dimension(5000,200));

panel.add(placeHolder, "");
panel.add(tableScrollPane, "");
//panel.add(placeHolder2, "");

frame.setContentPane(panel);
frame.setVisible(true);
}

private JTable createTable() {

String[] columnNames = "Name 1,Name 2,Name 3,Name 4,Name 5".split(",");

int rows = 30;
int cols = columnNames.length;
String[][] data = new String[rows][cols];

for(int i=0; i<rows; i++) {
for(int j=0; j<cols; j++) {
data[i][j] = "R"+i+" C"+j;
}
}
JTable table = new JTable(data, columnNames);

return table;
}


}

我希望 scrollPane 在用户调整框架大小时使用所有可用空间。但另外我还希望另一个面板 (placeHolder) 也能增长。例如,框架的高度除以 3,placeHolder 得到 1 个部分,scrollPane 得到 2 个部分。 GridLayout 有点满足我的需要,但我正在寻找 MigLayout 的解决方案。

如果您取消注释 panel.add(placeHolder2, ""); 并注释上面的行。


编辑1:
我尝试使用 sizegroup 约束。现在 placeHolder 和 scrollPane 的大小相同,但我希望 scrollPane 占用两倍的空间。 (此外,在我的程序中,我没有这样的占位符,而是有一些标签、复选框和文本字段。所以 sizegroup 可能不是我需要的,除非有更多的使用方法)

最佳答案

我在这里找到了解决方案:
MigLayout confused by JTable objects contained in JScrollBar objects

这里:
How to set JScrollPane to show only a sepecific amount of rows

table.setPreferredScrollableViewportSize(null);

table.setPreferredScrollableViewportSize(table.getPreferredSize());


我不知道这些代码片段之间有什么区别,但它们都能满足我的需要。

关于java - JScrollPane (for JTable) 在 MigLayout 中填充和增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23896838/

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