0

次のコンポーネントは後で JFrame に追加されますが、フレームを拡大して scrollPane を埋めるため、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() を呼び出す場合にインスタンス化されるデフォルトのレイアウトだけではありませんか? 最初のバージョンで、テーブルがスクロール ペインのサイズまで拡大するのを止める理由を知りたいだけです

編集:コード形式のみを修正しましたが、送信するテキストを追加する必要があります:/

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 に答える