Я не получаю названия столбцов

Я размещаю JTable в JPanel, но при отображении я вижу содержимое таблицы, но не имена столбцов.

public class Neww extends JPanel
{
    Connection conn = null;
    Statement st;
    DefaultTableModel model = new DefaultTableModel(new Object[][] {
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " },
        { " ", " " }
    }, new Object[] {
        "ItemName",
        "No of items"
    });

    JTable table = new JTable(model);
    TableColumn ItemName = table.getColumnModel().getColumn(0);
    JComboBox comboBox = new JComboBox();
    Neww()
    {
        this.setLayout(new FlowLayout(FlowLayout.CENTER));
        this.add(table);

        comboBox.addItem("Spoon");
        comboBox.addItem("Plate");
        comboBox.addItem("Mixer");
        comboBox.addItem("Glass");
        ItemName.setCellEditor(new DefaultCellEditor(comboBox));
    }
}

3 ответа

Есть два пути

  • (правильные пути) должны поставить JTable к JScrollPane, затем JTableHeader виден

  • получить JTableHeader от JTable (менять JPanels LayoutManager в BorderLayout) и положить на NORTH area в JPanel

1) Оберните JTable в JScrollPane, Как это:

JTable table=...;

JPanel container = new JPanel();

JScrollPane jsp=new JScrollPane(table);

container.add(jsp);

2) Использование getTableHeader() и добавьте его в случае необходимости (обычно на север):

...

JTableHeader header = table.getTableHeader();

JPanel container = new JPanel(new BorderLayout());

// Add header at NORTH position
container.add(header, BorderLayout.NORTH);

//Add table below header
container.add(table, BorderLayout.CENTER);

Следующее утверждение создает проблему в вашем коде.

 this.add(table);

Используйте панель прокрутки при добавлении таблицы.

 add(new JScrollPane(table));

Почему мы должны использовать JScrollPane?

Как заявлено @OscarRyz в этом комментарии.

Заголовок таблицы, который он помещает в верхний компонент JScrollPane (или вид сверху или что-то подобное, называется). Когда нет верхнего компонента, JTable отображается без заголовка. Это по замыслу.

Изменить: Также посмотрите этот ответ для более подробной информации.

Другие вопросы по тегам