首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AbstractTableModel -不返回getRowCount()

AbstractTableModel -不返回getRowCount()
EN

Stack Overflow用户
提问于 2013-04-11 20:51:06
回答 2查看 1.8K关注 0票数 2

下面是我将表格模型添加到表格中的代码:

代码语言:javascript
复制
table = new JTable(new TerminiTableModel());
scrollPane = new JScrollPane(table);

然后我创建了这个类TerminiTableModel(),下面是一个简单的生成代码,我想在其中获取列数和行数……Column count工作得很好,在我的表中添加了3列("Termini","Ime I prezime“和"Napomena")。当我在getRowCount中添加这行代码时,我得到了错误,甚至无法编译它……这是代码。我对此进行了搜索,但就是想不出来……:-/

代码语言:javascript
复制
public class TerminiTableModel extends AbstractTableModel implements TableModel {

    protected TableModel tableModel;

    private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
    private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };

    @Override
    public void addTableModelListener(TableModelListener arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public Class<?> getColumnClass(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public int getRowCount() {
        return data.length;   //  <<----- this line is problem
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }

    @Override
    public Object getValueAt(int row, int col) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        if (col > 0) {
            return true;
        } else
        return false;
    }

    @Override
    public void removeTableModelListener(TableModelListener arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setValueAt(Object data, int row, int col) {
        // TODO Auto-generated method stub
    }
}

解决方案可能很简单,但我需要一些帮助...先谢谢你……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-11 21:03:02

基于通信网络进行编辑

JTable中的行是基于二维数组的,然后

代码语言:javascript
复制
private String[] data = {"7:00", "8:00", "9:00" , "10:00" , "11:00" , "12:00" };

应该是

代码语言:javascript
复制
private String[][] data = {{"7:00", null, null}, {"8:00", null, null}, 
            {"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null}, 
            {"12:00", null, null}};

对于已定义的列

来自代码

代码语言:javascript
复制
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;

public class MyTable {

    private JFrame frame = new JFrame("TableDemo");
    private JScrollPane tableScroll = new JScrollPane();
    private MyTableModel tableModel = new MyTableModel();
    private JTable dialogTable = new JTable(tableModel);

    public MyTable() {
        dialogTable.setPreferredScrollableViewportSize(dialogTable.getPreferredSize());
        tableScroll = new JScrollPane(dialogTable, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        frame.add(tableScroll);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        System.out.println(dialogTable.getRowCount());
        System.out.println(dialogTable.getColumnCount());
        System.out.println(tableModel.getRowCount());
        System.out.println(tableModel.getColumnCount());
    }

    private class MyTableModel extends AbstractTableModel {

        private String[] columnNames = {"Termin", "Ime i prezime", "Napomena"};
        private String[][] data = {{"7:00", null, null}, {"8:00", null, null}, 
            {"9:00", null, null}, {"10:00", null, null}, {"11:00", null, null}, 
            {"12:00", null, null}};

        @Override
        public void addTableModelListener(TableModelListener arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public Class<?> getColumnClass(int columnNames) {
            switch (columnNames) {
                case 0:
                    return String.class;//return Date.class;
                case 1:
                    return String.class;//return Double.class;
                case 2:
                    return String.class;//return Boolean.class;
                default:
                    return String.class;
            }
        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public int getRowCount() {
            return data.length;   //  <<----- this line is problem
        }

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        @Override
        public Object getValueAt(int row, int col) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public boolean isCellEditable(int row, int col) {
            if (col > 0) {
                return true;
            } else {
                return false;
            }
        }

        @Override
        public void removeTableModelListener(TableModelListener arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void setValueAt(Object data, int row, int col) {
            // TODO Auto-generated method stub
        }
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                MyTable myTable = new MyTable();
            }
        });
    }
}
票数 3
EN

Stack Overflow用户

发布于 2013-04-11 21:03:08

导致的错误如下:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

这是由于未指定列类造成的:

代码语言:javascript
复制
@Override
public Class<?> getColumnClass(int arg0) {
   return String.class;
}

此外,getValueAt不返回任何数据。您正在使用一维数组来存储数据,鉴于JTable数据是以行和列表示的,因此您需要使用二维数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15949269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档