稍后将以下组件添加到JFrame中,但它不会拉伸JTable,因为我拉伸框架以填充scrollPane:
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()的情况下会被实例化?我只想知道是什么阻止表拉伸到第一个版本中滚动窗格的大小
编辑:仅修复代码格式,但必须添加一些文字才能提交:/
答案 0 :(得分:2)
在调用super()?
的情况下,是不是只有一个默认布局可以实例化?
有,它是一个FlowLayout(您可以查看JPanel构造函数javadoc或源代码,以便自己查看)。 FlowLayout为组件提供了首选大小,并且不会拉伸它。
您也可以使用BorderLayout而不是GridLayout添加到CENTER。
答案 1 :(得分:1)
尝试添加
在将JTable实例添加到滚动窗格之前,在您的代码段中table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
。