Я не получаю названия столбцов
Я размещаю 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
(менятьJPanel
sLayoutManager
в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 отображается без заголовка. Это по замыслу.
Изменить: Также посмотрите этот ответ для более подробной информации.