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,创建表并将此表放在面板上。

第一步是从面板中删除所有组件,然后JTable使用 Hashmap 中的数据创建

全功能:

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);            

}

此代码有效,创建表并将其放在面板上,但没有设置第一行的列名(文本:“名称”和“价格”)。

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。

另一种选择是直接在任何你想要的地方添加标题,为此你可以这样做:

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

尝试将其放入 JScrollPane 中。

于 2011-09-28T20:33:40.190 回答