JTable не добавляет строку заголовка - PullRequest
1 голос
/ 28 сентября 2011

Я пытаюсь добавить строку заголовка в мою 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);            

}

Этот код работает, создайте таблицу и вставьтеэто на панели, но не устанавливает первую строку с именами столбцов (текст: «Имена» и «Цена»).

Ответы [ 3 ]

3 голосов
/ 28 сентября 2011

Не могу точно сказать, что вы делаете из примера кода.

Если вы пытаетесь динамически обновить таблицу в видимом графическом интерфейсе, то нет необходимости создавать новую таблицу, просто перезагрузите TableModel.

table.setModel( model );

Если вам нужна дополнительная помощь, опубликуйте SSCCE , который демонстрирует проблему.

Edit:

Первый шаг - удалить все компоненты с панели,

Почему вы удаляете компоненты с панели?

Если вам нужно «поменять местами» панели, используйте CardLayout.

Если вам нужно «обновить» существующие компоненты, просто перезагрузите модель, как описано выше.

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

Панель scrollPane должна быть добавлена ​​в графический интерфейс, а не в таблицу.

2 голосов
/ 29 сентября 2011

Заголовок таблицы - это еще один компонент, который добавляется автоматически только тогда, когда таблица находится внутри JScrollPane.Лучше всего создать JScrollPane с помощью

new JScrollPane(table)

и добавить его к главной панели.

Другой вариант - добавить заголовок непосредственно туда, где вы хотите, и для этого вы можетеделать:

panel.add(table.getTableHeader())
1 голос
/ 29 сентября 2011

Попробуйте поместить его в JScrollPane.

...