0

DefaultTableModel を使用して colName で定義された列ヘッダーを持つ JTable を作成し、そのテーブルを JScrollPane に追加してから JPanel に追加しようとしています。ただし、パネルを JFrame に追加すると、テーブルではなくパネルのみが表示されます。別のテーブルで同様のコードを使用していますが、そのコードは問題なく表示されますが、違いは列の数と変数名だけです。

私は何が欠けていますか?

私のコード:

    //Column Names
    final String[] colNames = {"Item", "Count"};
    DefaultTableModel dtm = new DefaultTableModel(0, colNames.length);

    //Panel to hold Table
    JPanel j = new JPanel(new BorderLayout());
    j.setBounds(9, 78, 267, 254);

    //Colored to see if the panel has been added
    j.setBackground(Color.RED);

    //Set Column Headers
    dtm.setColumnIdentifiers(colNames);

    //Jtable with model
    JTable t = new JTable(dtm);
    t.setBackground(Color.GREEN);

    t.getTableHeader().setReorderingAllowed(false);
    t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

    t.getColumnModel().getColumn(0).setPreferredWidth(113); 
    t.doLayout();

    j.add(new JScrollPane(t), BorderLayout.CENTER);
4

1 に答える 1

2

テーブルモデルによって報告された列によって列が上書きされていることをお勧めします。代わりに使用できます...

String[] colNames = {"Item", "Count"};
DefaultTableModel dtm = new DefaultTableModel(colNames, 0);

JPanel j = new JPanel(new BorderLayout());

JTable t = new JTable(dtm);
t.setBackground(Color.GREEN);

t.getTableHeader().setReorderingAllowed(false);
t.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);

t.getColumnModel().getColumn(0).setPreferredWidth(113); 

j.add(new JScrollPane(t), BorderLayout.CENTER);

その代わり...

ただし、テーブルをフレームに配置するために使用しているコードを見ないと、これ以上コメントするのは困難です...

  • の使用は避けてくださいsetBounds。このコンテキストでは意味がありません。
  • 背景色は、テーブルが空のスペースを埋めるように構成されるか、空のスペースを埋めるのに十分な行を持つようになるまで、実際にはビューポートによって定義され、次にテーブルまたはパネルによって定義されます。
于 2013-07-22T02:53:36.573 に答える