* 用來JTable控制輸入數字判斷
*/
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import com.sa.fb.pos.utils.DialogUtil;
public class IntegerEditor extends DefaultCellEditor {
private static final long serialVersionUID = -3781656457614462617L;
private String oldText;
public IntegerEditor() {
super(new JTextField());
//field.setBorder(BorderFactory.createLineBorder(Color.black));
}
public Object getCellEditorValue() {
String value = (String) delegate.getCellEditorValue();
if (value != null && value.trim().length() > 0) {
try {
Integer.parseInt(value);
} catch (Throwable t) {
//JOptionPane.showMessageDialog(null, "請輸入實數值! ");
DialogUtil.alert("請輸入實數值! ");
return oldText;
}
}
return value;
}
public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int col) {
oldText = value.toString();
return super.getTableCellEditorComponent(table, value, isSelected, row,
col);
}
public static void main(String[] arg){
String[][] data={};
String[] columnNames={};
TableModel model = new ReportTableModel(data, columnNames);
tableColumn = new JTable(model);
tableColumn.setCellSelectionEnabled(true);
tableColumn.getTableHeader().setReorderingAllowed(false);//不允許列重新排序
tableColumn.setRowHeight(23); // 設置表格的行高度
TableColumnModel TCM=tableColumn.getColumnModel();
TCM.getColumn(3).setCellEditor(new IntegerEditor());
TCM.getColumn(4).setCellEditor(new IntegerEditor());
}
}
import javax.swing.table.AbstractTableModel;
/***
* 功能:處理JTable,包括現實列表,對列表改動等
* @author
*
*/
public class ReportTableModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
Object[][] data;
Object[] columnNames;
ReportTableModel(Object[][] data, Object[] columnNames) {
this.data = data;
this.columnNames = columnNames;
}
public int getColumnCount() {
return columnNames.length;
}
public int getRowCount() {
return data.length;
}
public Object getValueAt(int row, int col) {
// System.out.println("第"+(row+1)+"行"+(col+1)+"列:"+data[row][col]);
return data[row][col];
}
// 該方法不一定要加入AbstractTableModel類,該方法設置列表的標題
public String getColumnName(int col) {
return columnNames[col] + "";
}
// 通過getClass()方法設置默認的控件,如true與false的默認控件是複選框,
// 該方法不一定要加入AbstractTableModel類
public Class getColumnClass(int c) {
if(null == getValueAt(0, c))
{//防止某一列沒有賦值,Boolean類型的話,直接在VO默認爲false,所以在這不判斷。
return String.class;
}else{
return getValueAt(0, c).getClass();
}
}
// 定義可以編輯的單元,true表示可編輯,false表示不可編輯
public boolean isCellEditable(int row, int col) {
return true;
}
// 將改變後的值保存在表格中
public void setValueAt(Object value, int row, int col) {
data[row][col] = value;
System.out.println(row + 1 + "行:" + (col + 1) + "列:" + value);
fireTableCellUpdated(row, col);
}
}