Java Swing JTable 高级用法

1、解决JTable 显示问题
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值