1

ヘッダー行を追加してJTable、次にパネルにテーブルを配置しようとしました。
これは私のサンプルコードです:

Map <String, Float> tmpCart = new HashMap<String , Float>();
    MainPanel.removeAll();
    MainPanel.repaint();
    tmpCart = cart.GetMap();
        DefaultTableModel tab = new DefaultTableModel();
        tab.setColumnIdentifiers(new String[] {"Name", "Price"});
            for (String key : tmpCart.keySet())
            tab.addRow(new Object[] {key, tmpCart.get(key)});
        JTable jTab = new JTable(tab);
        jTab.setBounds(10, 10, 200, 200);
        jTab.setBackground(Color.orange);
        jTab.setRowHeight(25);
        JScrollPane pan =new JScrollPane(jTab);
         MainPanel.add(pan);
        // MainPanel.add(jTab);
       // pan.repaint(); 

どうすれば正しく書けるでしょうか?

//答え

JTableボタンを押した後、動的に作成してみます。 からデータを取得しHashtable、テーブルを作成して、このテーブルをパネルに配置します。

最初のステップは、パネルからすべてのコンポーネントを削除し、次にJTableHashmap` のデータを使用して作成することです

フル機能:

private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {                                           
Map <String, Float> tmpCart = new HashMap<String , Float>();
MainPanel.removeAll();
MainPanel.repaint();
tmpCart = cart.GetMap();
    DefaultTableModel tab = new DefaultTableModel();
    tab.setColumnIdentifiers(new String[] {"Name", "Price"});
        for (String key : tmpCart.keySet())
        tab.addRow(new Object[] {key, tmpCart.get(key)});
    JTable jTab = new JTable(tab);
    jTab.setBounds(10, 10, 200, 200);
    jTab.setBackground(Color.orange);
    jTab.setRowHeight(25);

    // MainPanel.add(pan);
     MainPanel.add(jTab);            

}

このコードは機能し、テーブルを作成してパネルに配置しますが、最初の行に列名 ( text : "Names" および "Price") を設定しません。

4

3 に答える 3

3

コードサンプルから何をしているのか正確にわかりません。

表示されている GUI でテーブルを動的に更新しようとしている場合は、新しいテーブルを作成する必要はなく、TableModel をリセットするだけです。

table.setModel( model );

さらに支援が必要な場合は、問題を示すSSCCEを投稿してください。

編集:

最初のステップは、パネルからすべてのコンポーネントを取り外し、

パネルからコンポーネントを削除するのはなぜですか?

パネルを「交換」する必要がある場合は、CardLayout を使用します。

既存のコンポーネントを「リフレッシュ」する必要がある場合は、上記で説明したようにモデルをリセットしてください。

// MainPanel.add(pan);
MainPanel.add(jTab);               

scrollPane は、テーブルではなく GUI に追加する必要があります。

于 2011-09-28T17:32:40.130 に答える
2

テーブル ヘッダーは、テーブルが JScrollPane 内にある場合にのみ自動的に追加される別のコンポーネントです。あなたの最善の策は、 JScrollPane を作成することです

new JScrollPane(table)

それを MainPanel に追加します。

もう1つのオプションは、ヘッダーを必要な場所に直接追加することです。そのためには、次のことができます。

panel.add(table.getTableHeader())
于 2011-09-28T21:04:49.873 に答える
1

JScrollPane に入れてみてください。

于 2011-09-28T20:33:40.190 に答える