JTable拉伸到ScrollPane的大小

时间:2012-08-02 12:27:02

标签: java swing jpanel jscrollpane layout-manager

稍后将以下组件添加到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()的情况下会被实例化?我只想知道是什么阻止表拉伸到第一个版本中滚动窗格的大小

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

2 个答案:

答案 0 :(得分:2)

  

在调用super()?

的情况下,是不是只有一个默认布局可以实例化?

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

您也可以使用BorderLayout而不是GridLayout添加到CENTER。

答案 1 :(得分:1)

尝试添加

  

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF)

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