在我的程序中有一個名爲「保存」和「刷新」的JTable和2個按鈕。 我的程序概述:如何在按JButton後清除JTable內容?
讓我們手工輸入10行到JTable。 比我更新這些數據到數據庫通過點擊「保存」按鈕。現在
我的觀點是:
當「刷新」按鈕被點擊,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);
框架按鈕「刷新」。 actionPerformed(ActionEvent e) {}
手動我已經將數據輸入到JTable中。 比我更新這些數據到數據庫通過點擊「保存」按鈕。現在
我的觀點是:
當「刷新」按鈕被點擊,表中的所有單元格應該被清除。
我已經執行TableModeListner
如下。
public void tableChanged(TableModelEvent e) {
// TODO Auto-generated method stub
int row = e.getFirstRow();
int column = e.getColumn();
row_sl被intialised以0
if(row_sl >= row){
if(column == 1){
String dat = (String) dataModel.getValueAt(row, column);
dataModel.removeTableModelListener(this);
//它提取數據庫和retribes材料名稱和單元。然後將其設置到相應的列。
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);
}
}
點擊「刷新」按鈕時,方法dataModel.setValueAt(null, i, j);
被調用。此方法觸發TableModeListner
事件public void tableChanged(TableModelEvent e)
。
因此問題發生。 我需求量的是:
當「點擊刷新按鈕,所有的表格單元格應該被清除,不會影響我的代碼,這種方法下public void tableChanged(TableModelEvent e){
請給我建議在這方面 我時,另一種選擇。」刷新」按鈕,點擊它會調用幀本身通過佈置最後的。它是很好的做法,怎麼辦?建議。
無關:a)不做任何手動調整/定位組件,永遠b)永遠不會調整組件的大小提示[setXXSize](http://stackoverflow.com/a/7229519/203657)相反,使用合適的LayoutManager – kleopatra
不清楚「clear」是什麼意思。如果你的意思是從模型中刪除所有的數據行,那麼你可以使用DefaultTableModel。要清除模型,可以使用setRowCount(0)方法。 – camickr