Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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 按下按钮后如何清除JTable内容?_Java_Swing_Jtable - Fatal编程技术网

Java 按下按钮后如何清除JTable内容?

Java 按下按钮后如何清除JTable内容?,java,swing,jtable,Java,Swing,Jtable,在我的程序中有一个JTable和两个名为“保存”和“刷新”的按钮。 我的课程概述: 让我们手动在JTable中输入10行。 然后单击“保存”按钮将这些数据更新到数据库中 现在我的观点是: 单击“刷新”按钮时,应清除JTable的所有行,以便下次输入 dataModel = new AbstractTableModel() { private String[] columnNames = {"Sl No","Material Code", "Material Nam

在我的程序中有一个JTable和两个名为“保存”和“刷新”的按钮。 我的课程概述:

让我们手动在JTable中输入10行。 然后单击“保存”按钮将这些数据更新到数据库中

现在我的观点是:

单击“刷新”按钮时,应清除JTable的所有行,以便下次输入

dataModel = new AbstractTableModel() {
        private String[] columnNames = {"Sl No","Material Code", "Material         Name", "Quntity", "Unit", "Unit/Price","Total Price", "Status" };//new String[9];
        private Object[][] data = new Object[100][9];

          public int getColumnCount() { return columnNames.length; }
          public int getRowCount() { return data.length;}
          public String getColumnName(int col) {
            // TODO Auto-generated method stub
            return columnNames[col];
        }
          public Object getValueAt(int row, int col) {
            // TODO Auto-generated method stub
            return data[row][col];
        }

        @Override
        public void setValueAt(Object aValue, int row, int col) {
            // TODO Auto-generated method stub
            data[row][col] = aValue;
            fireTableCellUpdated(row, col);
        }

        public boolean isCellEditable(int rowIndex, int columnIndex) {
            // TODO Auto-generated method stub
            return true;
        }
        public Class getColumnClass(int col) {
            if((col == 3) || (col == 5) || (col == 6))
                return Double.class;
            //return getValueAt(0, c).getClass();
            return String.class;
        }
      };
使用抽象数据模型创建表

    table = new JTable(dataModel);
    JTableHeader header = table.getTableHeader();
    header.setBackground(Color.yellow);
    JScrollPane pane = new JScrollPane(table);
    pane.setPreferredSize(new Dimension(800, 350));
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
将此面板添加到ContentPane

   panel.add(pane);
    panel.setBounds(100, 100, 800, 360);
    c.add(panel);
“刷新”按钮<代码>执行的动作(动作事件e){} 我已手动将数据输入JTable。 然后单击“保存”按钮将这些数据更新到数据库中

现在我的观点是:

单击“刷新”按钮时,应清除表中的所有单元格

我已经实现了
TableModeListner
,如下所示

public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
int row = e.getFirstRow();
int column = e.getColumn();
行_sl已用0初始化

 if(row_sl >= row){
 if(column == 1){
 String dat = (String) dataModel.getValueAt(row, column);
dataModel.removeTableModelListener(this);
//它获取数据库并检索材料名称和单位。然后将其设置为相应的列

   mat.getmaterial_name(dat); 
       dataModel.setValueAt(mat.materialname, row, column+1);
dataModel.setValueAt(mat.unit, row, column+3);
//dataModel.setValueAt(dat, 1, 2);
dataModel.addTableModelListener(this);
}
if((column == 5) && (Double)dataModel.getValueAt(row, 3) != null){
    dataModel.removeTableModelListener(this);
    Double d = (Double) dataModel.getValueAt(row, 3);
    d = d * (Double)dataModel.getValueAt(row, column);
    dataModel.setValueAt(d, row, 6);
    dataModel.addTableModelListener(this);
}
if(row == row_sl && column == 7)
    row_sl ++;
}
else
    new error_frame("Complete the row no:"+row_sl);

  public void actionPerformed(ActionEvent e) {
  if(e.getSource() == Refresh){
     dataModel.removeTableModelListener(this);
        for (int i=0;i<=count;i++){
            for(int j=0;j<=7;j++){
                    dataModel.setValueAt(null, i, j);
            }
        }
        dataModel.addTableModelListener(this);
 }
}
材料名称(dat); dataModel.setValueAt(材料名称,行,列+1); dataModel.setValueAt(材料单位、行、列+3); //dataModel.setValueAt(dat,1,2); addTableModelListener(这个); } if((列==5)&&(双精度)数据模型.getValueAt(行,3)!=null){ removeTableModelListener(这个); Double d=(Double)dataModel.getValueAt(第3行); d=d*(双精度)数据模型.getValueAt(行、列); dataModel.setValueAt(d,第6行); addTableModelListener(这个); } if(行==行和列==7) 行_sl++; } 其他的 新的错误帧(“填写行号:“+row_sl”); 已执行的公共无效操作(操作事件e){ 如果(如getSource()==刷新){ removeTableModelListener(这个); 对于(int i=0;i
public static void removeAllDataFromJTable(JTable表){
f=薄片;
int numberOfRows=table.getRowCount();
int numberOfColumns=table.getColumnCount();
int rowCounter=0;
int columnCounter=0;
//我们会到每一排去打扫
对于(rowCounter=0;rowCounter
如前所述,删除需要更新模型的内部数据结构。一种权宜之计是只需为一些行和列创建数组:

data = new Double[rows][cols];
fireTableDataChanged();

也考虑<代码>数组.fIL[(或代码>)以替换默认值,<代码> null

不相关:A)不要对任何组件进行手动调整/定位,永远不要更改组件的大小提示,使用适当的LayOutMealServer不确定“清除”的意思。。如果您的意思是从模型中删除所有数据行,则可以使用DefaultTableModel。要清除模型,可以使用setRowCount(0)方法。我不确定这正是OP想要的。它不是删除行,而是简单地将值置零,这可能不适用于每个单元格……还需要触发一个合适的
TableModelEvent
。这意味着我必须显式清除JTable。是否有任何预定义的方法?@trashgod,我不确定您为什么需要触发一个Table使用setValueAt(…)方法时删除。table setValueAt()方法将调用model setValueAt()方法,后者将调用fireTableCellUpdated。@camickr:Oops,您说得对;感谢您的评论。这可能会暴露此方法的限制:它将触发
numberOfRows*numberOfColumns
事件。
data = new Double[rows][cols];
fireTableDataChanged();