1、解决JTable 显示问题
2、更方便的更新JTable 内容
3、希望更了解,Swing 内核机制的 请给与补充。
赞为解决问题:需要通知调用TableModelEvent 实现实时刷新
需要用到 一个自定义Annotation
主要用于直接获取 需要转换对象 显示的 列名称
实现TableModel 接口
直接创建JTalbe,使用以上Model即可动态改变JTalbe
2、更方便的更新JTable 内容
3、希望更了解,Swing 内核机制的 请给与补充。
赞为解决问题:需要通知调用TableModelEvent 实现实时刷新
需要用到 一个自定义Annotation
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableAnnotation {
String name();
boolean isedit() default false;
int width() default 0;
}
主要用于直接获取 需要转换对象 显示的 列名称
实现TableModel 接口
class Model<E> implements TableModel{
private List<E> values;
private Class<?> clazz;
private List<TableAnnotation> ants = new ArrayList<TableAnnotation>();
private List<Class<?>> clazzs = new ArrayList<Class<?>>();
private List<Field> fields = new ArrayList<Field>();
//构造方法将需要,用于显示的List传入,解析需要具体显示的行及其他信息
public Model(List<E> values,Class<?> clazz){
this.values = values;
this.clazz = clazz;
Field[] fieldss = clazz.getFields();
for(int i=0;i<fieldss.length;i++){
Field f = fieldss[i];
TableAnnotation ant = f.getAnnotation(TableAnnotation.class);
if(ant != null){
fields.add(f);
this.ants.add(ant);
clazzs.add(f.getDeclaringClass());
}
}
}
@Override
public int getRowCount() {
return values.size();
}
@Override
public int getColumnCount() {
return ants.size();
}
@Override
public String getColumnName(int columnIndex) {
return ants.get(columnIndex).name();
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return clazzs.get(columnIndex);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
try {
return fields.get(columnIndex).get(values.get(rowIndex));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
}
直接创建JTalbe,使用以上Model即可动态改变JTalbe