Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如果AbstractTableModel插入了行,如何将行(数据)显式插入JTable_Java_Swing_Jtable_Abstracttablemodel - Fatal编程技术网

Java:如果AbstractTableModel插入了行,如何将行(数据)显式插入JTable

Java:如果AbstractTableModel插入了行,如何将行(数据)显式插入JTable,java,swing,jtable,abstracttablemodel,Java,Swing,Jtable,Abstracttablemodel,在我的应用程序中有一个JTable,我想在创建表之后插入行 以下所有代码都在框架的构造函数中 代码: 现在我想在表中插入行或数据。这是怎么可能的。 以前我使用了DefaultTableModel,但是我们不能在DefaultTableModel中使用isCellEditable和其他方法,所以我用上面的代码更改了这一点。但在上面的代码中,我无法显式插入数据(行),请帮帮我。只从DefaultTableModel扩展而不是从AbstractTableModel扩展就可以了。只从DefaultTab

在我的应用程序中有一个JTable,我想在创建表之后插入行

以下所有代码都在框架的构造函数中

代码:

现在我想在表中插入行或数据。这是怎么可能的。
以前我使用了DefaultTableModel,但是我们不能在DefaultTableModel中使用isCellEditable和其他方法,所以我用上面的代码更改了这一点。但在上面的代码中,我无法显式插入数据(行),请帮帮我。

只从
DefaultTableModel
扩展而不是从
AbstractTableModel
扩展就可以了。

只从
DefaultTableModel
扩展而不是从
AbstractTableModel
扩展就可以了。

AbstractTableModel不会做你想做的事,为此,您需要使用DefaultTableModel

使用DefaultTableModel时,可以通过以下方式设置isCellEditable或任何其他方法:

    DefaultTableModel model = new DefaultTableModel(data, columnNames) {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }       
    };
在上面的代码中,数据将是字符串[]。通过编写上述代码,您将“单元格可编辑”设置为false


除此之外,您还可以像以前一样在swingworker或afterwords中加载数据

AbstractTableModel不会执行您想要执行的操作,为此,您需要使用DefaultTableModel

使用DefaultTableModel时,可以通过以下方式设置isCellEditable或任何其他方法:

    DefaultTableModel model = new DefaultTableModel(data, columnNames) {
        private static final long serialVersionUID = 1L;

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            return false;
        }       
    };
在上面的代码中,数据将是字符串[]。通过编写上述代码,您将“单元格可编辑”设置为false


除此之外,您还可以像以前一样在swingworker或afterwords中加载数据

@Peter是对的+1使用
DefaultTableModel
而不是
AbstractTableModel
,因为您的
AbstractTableModel
错过了方法
addRow()(还有其他方法)


关于

@Peter的示例是正确的+1使用
DefaultTableModel
而不是
AbstractTableModel
,因为您的
AbstractTableModel
错过了方法
addRow()(还有其他方法)


关于

的示例我认为您需要在AbstractTableModel中实现
setValueAt()
函数,以便可以修改给定位置的任何数据

请仔细阅读以下教程:


我认为您需要在AbstractTableModel中实现
setValueAt()
函数,以便修改给定位置的任何数据

请仔细阅读以下教程:


像这样,您可以实现其他方法,如deleteRow(intRowIndex)和insertRowToIndex(intRowIndex,List rowData)

更改数据后,必须触发表事件,如fireTableRowsInserted()等

公共静态类MyTableModel扩展了AbstractTableModel
{
private List columnNames=new ArrayList();
私有列表数据=新的ArrayList();
{
列名。添加(“名”);
columnNames。添加(“姓氏”);
列名。添加(“运动”);
列名称。添加(“#年”);
添加(“素食者”);
}
public void addRow(列出行数据)
{
data.add(rowData);
fireTableRowsInserted(data.size()-1,data.size()-1);
}
public int getColumnCount()
{
返回columnNames.size();
}
public int getRowCount()
{
返回data.size();
}
公共字符串getColumnName(int-col)
{
尝试
{
返回columnNames.get(col);
}
捕获(例外e)
{
返回null;
}
}
公共对象getValueAt(整数行,整数列)
{
返回数据.get(行).get(列);
}
公共布尔值可编辑(int行,int列)
{
返回false;
}
公共类getColumnClass(int c)
{
返回getValueAt(0,c).getClass();
}
};
公共静态void main(字符串[]args)
{
MyTableModel模型=新的MyTableModel();
addRow(Arrays.asList(“yi”,“chen”,“sleep”,35,true));
JTable table=新的JTable(模型);
表.setPreferredScrollableViewportSize(新维度(500,70));
表.setFillsViewPerthweight(真);
JScrollPane scrollPane=新的JScrollPane(表);
滚动窗格。后退(5218、884、194);
//现在将此添加到我要显示的框架中
JFrame=新JFrame();
frame.add(滚动窗格);
frame.setVisible(true);
}

像这样,您可以实现其他方法,如deleteRow(intRowIndex)和insertRowToIndex(intRowIndex,List rowData)

更改数据后,必须触发表事件,如fireTableRowsInserted()等

公共静态类MyTableModel扩展了AbstractTableModel
{
private List columnNames=new ArrayList();
私有列表数据=新的ArrayList();
{
列名。添加(“名”);
columnNames。添加(“姓氏”);
列名。添加(“运动”);
列名称。添加(“#年”);
添加(“素食者”);
}
public void addRow(列出行数据)
{
data.add(rowData);
fireTableRowsInserted(data.size()-1,data.size()-1);
}
public int getColumnCount()
{
返回columnNames.size();
}
public int getRowCount()
{
返回data.size();
}
公共字符串getColumnName(int-col)
{
尝试
{
返回columnNames.get(col);
}
捕获(例外e)
{
返回null;
}
}
公共对象getValueAt(整数行,整数列)
{
返回数据.get(行).get(列);
}
公共布尔值可编辑(int行,int列)
{
返回false;
}
公共类getColumnClass(int c)
{
返回getValueAt(0,c).getClass();
}
};
公共静态void main(字符串[]args)
{
MyTableModel模型=新的MyTableModel(
public void addRow(Object[][] data) {
    this.data.add(data);
    this.fireTableRowsInserted(data.size() - 1, data.size() - 1);
}
public static class MyTableModel extends AbstractTableModel
{
    private List<String> columnNames = new ArrayList();
    private List<List> data = new ArrayList();

    {
        columnNames.add("First Name");
        columnNames.add("Last Name");
        columnNames.add("Sport");
        columnNames.add("# of Years");
        columnNames.add("Vegetarian");
    }

    public void addRow(List rowData)
    {
        data.add(rowData);
        fireTableRowsInserted(data.size() - 1, data.size() - 1);
    }

    public int getColumnCount()
    {
        return columnNames.size();
    }

    public int getRowCount()
    {
        return data.size();
    }

    public String getColumnName(int col)
    {
        try
        {
            return columnNames.get(col);
        }
        catch(Exception e)
        {
            return null;
        }
    }

    public Object getValueAt(int row, int col)
    {
        return data.get(row).get(col);
    }

    public boolean isCellEditable(int row, int col)
    {
        return false;
    }

    public Class getColumnClass(int c)
    {
        return getValueAt(0, c).getClass();
    }
};

public static void main(String[] args)
{
    MyTableModel model = new MyTableModel();

    model.addRow(Arrays.asList("yi", "chen", "sleep", 35, true));

    JTable table = new JTable(model);
    table.setPreferredScrollableViewportSize(new Dimension(500, 70));
    table.setFillsViewportHeight(true);

    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setBounds(5, 218, 884, 194);
    //now adding this to the frame where I want to show 
    JFrame frame = new JFrame();
    frame.add(scrollPane);
    frame.setVisible(true);
}