JTable标头未设置

时间:2013-05-25 17:15:38

标签: java swing jtable

过去两天我一直在尝试使用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));}

2 个答案:

答案 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区域