您的位置:首页 > 其它

【Swing系列】JTable 与 AbstractTableModel

2017-01-25 13:13 323 查看
摘要: 通过List<Map> 转变为二位数组 在AbstractTableModel封装,提供给JTable使用

import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.swing.table.AbstractTableModel;
/**
*构造函数
*/
public class TableValues extends AbstractTableModel{
private static final long serialVersionUID = 1L;
public String[] columnNames;
public Object[][] values ;
public TableValues(String[] columnNames,List<Map<String,Object>> vs){
this.columnNames=columnNames;
values=listToArr(vs,columnNames.length);
}
public int getColumnCount() {
return  values[0].length;
}
public int getRowCount() {
return values.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return values[rowIndex][columnIndex];
}
/**
* 获取列名
*/
public String getColumnName(int column){
return columnNames[column];
}

/**
* list<map> 转变成二位数组
* [@param](https://my.oschina.net/u/2303379) list
* [@param](https://my.oschina.net/u/2303379) titleLength
* [@return](https://my.oschina.net/u/556800)
*/
private static <T> Object[][] listToArr(List<Map<String,Object>> list,int titleLength){
Object[][] data=new Object[list.size()][titleLength];
for(int i=0;i<list.size();i++){
Map<String,Object> map = list.get(i);
Set<Map.Entry<String,Object>> set=map.entrySet();
int index=titleLength-1;
for(Map.Entry<String,Object> entry:set){
if(index <titleLength){
data[i][index]=entry.getValue();
}
index=index-1;
}
}
return data;
}
}

================================================================

import java.awt.BorderLayout;
import java.awt.Container;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class SimpleTableTest extends JFrame{
private static final long serialVersionUID = -4172876583187222326L;
protected JTable table;
public SimpleTableTest(){
Container pane = getContentPane();
pane.setLayout(new BorderLayout());

List<Map<String,Object>> list=new ArrayList<Map<String,Object>>();
Map<String,Object> map=new HashMap<String,Object>();
map.put("name", "何素华");
map.put("sex", "女");
map.put("age", "27");
Map<String,Object> map2=new HashMap<String,Object>();
map2.put("name", "徐良俊");
map2.put("sex", "男");
map2.put("age", "28");
list.add(map);
list.add(map2);
TableValues tv =  new TableValues(new String[]{"姓名","性别","年龄"},list);
table= new JTable(tv);
//		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//设置行高
table.setRowHeight(30);
//必须把table放入JScrollPane才会有列名出现
JScrollPane jsp = new JScrollPane(table);
pane.add(jsp,BorderLayout.CENTER);
}

public static void main(String[] args) {
SimpleTableTest stt = new SimpleTableTest();
stt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
stt.setSize(400,200);
stt.setVisible(true);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JTable AbstractTab