很难描述会发生什么,所以这里是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, "");
并在上面的行中添加注释,它将起作用。
EDIT1:
我尝试使用sizegroup约束。现在placeHolder和scrollPane具有相同的大小,但是我希望scrollPane占用两倍的空间。(此外,在我的程序中,我没有这样的占位符,但是有一些标签,复选框和文本字段。因此sizegroup可能不是我所需要的,除非有更多使用方式)
我在这里找到了解决方案:
MigLayout被JScrollBar对象中包含的JTable对象所混淆
table.setPreferredScrollableViewportSize(null);
要么
table.setPreferredScrollableViewportSize(table.getPreferredSize());
我不知道这段代码片段之间有什么区别,但是它们都可以满足我的需求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句