过去两天我一直在尝试使用JTable
在Java应用中创建数据视图表。
Netbeans绑定选项不起作用,但没关系,我设法创建了自己的TableModel
。
数据显示在表格中,但标题始终只包含字母(每列的A,B,C ......)。在某一点上,一切都运行良好,但后来我想为该特定表设置另一个模型,即使我创建全新的JPanel
并从头开始设置它也不会正确显示标签。
这是我的自定义TableModel类
public class MyTableModel extends AbstractTableModel{
private ArrayList<Options> list;
String[] headers;
public MyTableModel(ArrayList<Options> list, String[] headers) {
this.list = list;
this.headers = headers;
}
@Override
public int getRowCount() {
return this.list.size();
}
@Override
public int getColumnCount() {
return headers.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(columnIndex == 0) {
return list.get(rowIndex).getId();
}
if(columnIndex == 1) {
return list.get(rowIndex).getText();
}
else {
return null;
}
} }
这是jframe类中代码的一部分(我运行的代码)
ArrayList<Options> list;
String[] optionHeaders = {"id", "text"};
public table2frame() {
initComponents();
list = (ArrayList) zadanie_2_app.Zadanie_2_app.findAll();
JTable table2 = new JTable(new MyTableModel(list, optionHeaders));}
答案 0 :(得分:2)
AbstractTableModel
要求覆盖getColumnName
,否则将使用占位符列名称。添加
@Override
public String getColumnName(int column) {
return headers[column];
}
答案 1 :(得分:1)
我想为该特定表设置另一个模型,即使我创建了全新的JPanel并从头开始设置它,它也不再正确显示标签。
AFAIK从这个方面理解,JTable是JTable的容器
将JTable放入JScrollPane,JTable应放入JScrollPane,否则JTableHeader不会自动显示
从JTable获取JTableHeader,将JPAnel的LayoutManager更改为BorderLayout,将JTable置于CENTER区域,将JTableHeader置于NOTHR区域