以下组件稍后添加到 JFrame,但当我拉伸(stretch)框架以填充滚动 Pane 时,它不会拉伸(stretch) JTable:
public class TableView extends JPanel {
public TableView(TableModel model) {
JTable table = new JTable(model) {
@Override
public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
Component c = super.prepareRenderer(renderer, row, column);
TradeTableModel model = (TradeTableModel) getModel();
if ((Boolean) model.getValueAt(row, model.findColumn("Select"))) {
Side s = (Side) model.getValueAt(row, model.findColumn("Side"));
if (s == Side.BUY)
c.setBackground(Color.BLUE);
else
c.setBackground(Color.red);
} else {
c.setBackground(Color.white);
}
return c;
}
};
table.setPreferredScrollableViewportSize(new Dimension(500, 70));
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);
add(scrollPane);
}
}
我添加:
super(new GridLayout(1, 0));
它解决了问题。但为什么需要布局呢?在调用 super() 的情况下不是会实例化一个简单的默认布局吗?我只是想知道是什么阻止表格拉伸(stretch)到第一个版本中滚动 Pane 的大小
编辑:仅修复代码格式,但必须添加一些文本才能提交:/
最佳答案
Isn't there simply a default layout that would be instantiated in the case of calling super()?
有,它是一个 FlowLayout(您可以查看 JPanel 构造函数 javadoc 或源代码来亲自查看)。 FlowLayout 为组件提供其首选大小,并且不会拉伸(stretch)它。
除了 GridLayout,您还可以使用 BorderLayout 并将其添加到 CENTER。
关于java - JTable 拉伸(stretch)到 ScrollPane 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11777424/