【问题标题】:JTable column names displayed wrongJTable 列名显示错误
【发布时间】:2013-04-30 21:09:51
【问题描述】:

我想在 JTable 中显示一些东西。

问题在于 JTable 列名是“A”、“B”、“C”、...

我的代码是这样的:

import javax.swing.JTable;

public class View extends JFrame implements Observer {

    private JTable contentTable;

    public View() {
        ...

        String[][] s = {{"test","test","test", "test}};
        String[] columnNames = { "Name", "Category", "Start", "End" };
        this.contentTable = new JTable(new MyTableModel(columnNames, s));
        this.contentPanel.add(new JScrollPane(this.contentTable));

        ...
    }

}

这里是 MyTableModel 类

import javax.swing.table.AbstractTableModel;

    public class MyTableModel extends AbstractTableModel {

        private String[] columnNames;
        private Object[][] data;

        public MyTableModel(String[] columns, Object[][] dat){
            this.columnNames = columns;
            this.data = dat;
        }

    ...

    }

如果我不使用 TableModel,它可以工作 f.e.:this.contentTable = new JTable(s, columnNames);,但是如果有一些新数据,我不知道如何更改表...这就是我使用的原因一个 TableModel。

不知道为什么不显示列,但显示数据...

亲切的问候!

【问题讨论】:

  • 这个问题无法回答,感觉就像给我代码一样,请阅读Oracles JTable tutorial,然后用SSCCE 编辑您的问题,简短、可运行、可编译,只是关于带有JTable 的JFrame在 JScrollPane 内,
  • "A", "B", "C" 是 API 中实现的默认值,在 JTableHeader 的值不可访问的情况下
  • @mKorbel 我制作了 SSCCE,但现在得到了答案,所以我不会添加它...谢谢您的提示..

标签: java swing jtable abstracttablemodel jtableheader


【解决方案1】:

在 MyTableModel 中你需要重写

public String getColumnName(int column)

返回您的数据,例如

public String getColumnName(int column) {
  return columnNames[column];
}

您还需要覆盖

getColumnCount();

findColumnName();

【讨论】:

  • 在您的情况下,您可能可以使用 DefaultTableModel 来节省一些工作。但是,总的来说,DefaultTableModel 很糟糕——最好做你所做的事情并编写你自己的 AbstractTableModel 子类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2014-04-21
  • 2014-09-29
  • 2014-01-10
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多