现在的位置: 首页 > 综合 > 正文

Jtable的应用:model,添加行,删除行

2018年01月30日 ⁄ 综合 ⁄ 共 3329字 ⁄ 字号 评论关闭

假设我创建的Jtable名称为table,table存的是PersonItem的信息:

1.首先创建PersonItem的demo:

class PersonItem {
private String name;
private String age;
private String sex;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}
}

2,,创建一个MyTableModel继承AbstractTableModel ,并重写一些方法,作为table的model:

class MyTableModel extends AbstractTableModel {

private String[] columnNames = new String[] { "num", "name", "age", "sex" };
ArrayList<PersonItem> itemList = new ArrayList<PersonItem>();
private Class[] typeNames = new Class[] { java.lang.String.class,
java.lang.String.class, java.lang.String.class,
java.lang.String.class };

@Override
public int getRowCount() {
return itemList.size();
}

@Override
public int getColumnCount() {
return columnNames.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (columnIndex == 0) {
return rowIndex + 1;
} else if (columnIndex == 1) {
return itemList.get(rowIndex).getName();
} else if (columnIndex == 2) {
return itemList.get(rowIndex).getAge();
} else if (columnIndex == 3) {
return itemList.get(rowIndex).getSex();
}
return "";
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == 1) {
itemList.get(columnIndex).setName(aValue.toString());
} else if (columnIndex == 2) {
itemList.get(columnIndex).setAge(aValue.toString());
} else if (columnIndex == 3) {
itemList.get(columnIndex).setSex(aValue.toString());
}
fireTableRowsUpdated(rowIndex, rowIndex);
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex == 0) {// 第一列为需要,不允许修改
return false;
} else {
return true;
}
}

@Override
public String getColumnName(int column) {
return columnNames[column];
}

@Override
public Class<?> getColumnClass(int columnIndex) {
return typeNames[columnIndex];
}

public void add(int index) {
PersonItem item = new PersonItem();
item.setName("");
item.setAge("");
item.setSex("");

if (index < 0 || index > itemList.size()) {
itemList.add(item);// 没有指定在某一行后添加一行
} else {
itemList.add(index, item);// 指定在某一行后添加一行
}
fireTableDataChanged();
}

public void remove(int index) {
itemList.remove(index);
fireTableDataChanged();
}
}

3.table有添加和删除操作:

public void addRow(){
if (table.getCellEditor() != null && table.getRowCount() > 0) {
table.getCellEditor().stopCellEditing();
}

int selectRow = table.getSelectedRow();

if (selectRow > -1) {// 指定某行被选中,在此行下面添加行
model.add(selectRow + 1);
table.setRowSelectionInterval(selectRow + 1, selectRow + 1);// 选择selectRow这一行
table.setColumnSelectionInterval(1, 1);// 选择第一列
} else {// 没有指定在某一行下添加,默认添加到最后
model.add(table.getRowCount());
table.setRowSelectionInterval(table.getRowCount() - 1,table.getRowCount() - 1);
table.setColumnSelectionInterval(1, 1);
}
table.scrollRectToVisible(table.getCellRect(table.getSelectedRow(), 1,true));//将消息转发到父控件
table.editCellAt(table.getSelectedRow(), 1);
table.requestFocus();

}

public void deleteRow() {
if (table.getCellEditor() != null && table.getRowCount() > 0) {
table.getCellEditor().stopCellEditing();
}
int selectRow = table.getSelectedRow();
if (selectRow < 0) {// 没有行被选中,不继续执行
return;
}
model.remove(selectRow);// 删除指定的某行
if (table.getRowCount() > 0) {
if (selectRow > 0) {
selectRow = selectRow - 1;
}
table.setRowSelectionInterval(selectRow, selectRow);
table.setColumnSelectionInterval(1, 1);
} else {
selectRow = -1;
}
table.requestFocus();
}

4.设置表格的表头居中:

DefaultTableCellRenderer render = (DefaultTableCellRenderer) table.getTableHeader().getDefaultRenderer();

render.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);

抱歉!评论已关闭.