0

稍后将以下组件添加到 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() 的情况下,不是有一个简单的默认布局可以实例化吗?我只是想知道是什么阻止了表格在第一个版本中拉伸到滚动窗格的大小

编辑:仅修复代码格式,但必须添加一些文本才能提交:/

4

2 回答 2

2

在调用 super() 的情况下,不是有一个简单的默认布局可以实例化吗?

有而且它是一个 FlowLayout(您可以查看 JPanel 构造函数 javadoc 或源代码以自己查看)。FlowLayout 为组件提供其首选大小并且不拉伸它。

除了 GridLayout,您还可以使用 BorderLayout 并添加到 CENTER。

于 2012-08-02T12:47:11.063 回答
1

尝试添加

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)

在将 JTable 实例添加到滚动窗格之前,在您的代码段中。

于 2012-08-02T12:33:28.907 回答