Java 按下按钮后如何清除JTable内容?
在我的程序中有一个JTable和两个名为“保存”和“刷新”的按钮。 我的课程概述: 让我们手动在JTable中输入10行。 然后单击“保存”按钮将这些数据更新到数据库中 现在我的观点是: 单击“刷新”按钮时,应清除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
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;ipublic 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();