0

过去两天我一直在尝试在 java 应用程序中创建一个数据视图表JTable

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

2 回答 2

2

AbstractTableModel要求getColumnName被覆盖,否则使用占位符列名。添加

@Override
public String getColumnName(int column) {
   return headers[column];
}
于 2013-05-25T17:30:04.900 回答
1

我想为那个特定的表设置另一个模型,即使我创建了全新的 JPanel 并从头开始设置,它也不再正确显示标签。

AFAIK 从这个描述中了解到,JTable 是 JTable 的容器

  • 将 JTable 放到 JScrollPane 中,JTable 应该放到 JScrollPane 中,否则 JTableHeader 不自动可见

  • 从 JTable 中获取 JTableHeader,将 JPanel 的 LayoutManager 更改为 BorderLayout,将 JTable 放到 CENTER 区域,将 JTableHeader 放到 NOTHR 区域

于 2013-05-25T17:27:35.900 回答