62,635
社区成员




import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import java.net.URL;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
public class TableCellRenderer8 extends JPanel implements ItemListener,
ActionListener {
public TableCellRenderer8() {
jb.addActionListener(this);
}
StringBuffer choice;
JButton jb = new JButton();
JFrame jf = new JFrame("使用单元格绘制器");
JTable table;
// 定义二维数组作为表格数据
Object[][] tableData = {};
public static HashMap<String, Object[]> tableList = new HashMap<String, Object[]>() {
/**
*
*/
private static final long serialVersionUID = 1L;
{
for (int i = 0; i < 100; i++) {
put(String.valueOf(i), new Object[] { "王二小" + i, 29,
new ImageIcon("icon/male.png"),
new ImageIcon("icon/3.gif"), true });
}
}
};
public void addData2table(String username, String place, Integer sex,
boolean isFull) {
ImageIcon sexicon = new ImageIcon("icon/male.png");
if (sex == 0) {// 女
sexicon = new ImageIcon("icon/female.png");
}
Object[] row = new Object[] { username, place, sexicon, new TimeLabel(),
isFull };
// tableList.put(DRecv.BJMemUID[myuserIndex],list);
((DefaultTableModel) table.getModel()).insertRow(0, row);// 加入空行
this.FitTableColumns(this.table);
}
public void removedata2table(List<Object[]> list) {
int i = 0;
// for(int j = 0;j<tableList.size();i++){
// if(tableList.get(i).
//
//
}
public Object[][] toArray(Map<String, Object[]> map) {
Object[][] objs = null;
if (map == null || map.isEmpty()) {
return objs;
}
Object[] o = map.keySet().toArray();
objs = new Object[o.length][];
for (int i = 0; i < o.length; i++) {
objs[i] = map.get(o[i]);
}
return objs;
}
// public void addData2table(Object[][] str){
// tableData[][tableData.length] = str[][tableData.length];
// }
//
// 定义一维数据作为列标题
String[] columnTitle0 = {" 员工姓名 " , " 员工毕业院校 " , " 员工性别 " , " 员工本单维护时间 " , "订单状态"};
public void init() {
// 以二维数组和一维数组来创建一个ExtendedTableModel对象
ExtendedTableModel8 model = new ExtendedTableModel8(columnTitle0, null);
// 以ExtendedTableModel来创建JTable
table = new JTable(model);
table.setRowSelectionAllowed(false);
table.setRowHeight(40);
// 获取第三列
// table.setDefaultRenderer(Object.class, new
// GenderTableCellRenderer());
// table.getColumnModel().getColumn(4)
// .setCellEditor(new DefaultCellEditor(new JCheckBox()));
table.getColumnModel().getColumn(2)
.setCellRenderer(new GenderTableCellRenderer8());
table.getColumnModel().getColumn(3)
.setCellRenderer(new GenderTableCellRenderer8());
// 将JTable对象放在JScrollPane中,并将该JScrollPane放在窗口中显示出来
jf.add(new JScrollPane(table));
FitTableColumns(table);
jf.setBounds(new Rectangle(100, 100, 800, 600));
// jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
Timer timer = new Timer(100, new ActionListener() {
public void actionPerformed(ActionEvent e) {
table.updateUI();
}
});
timer.start();
}
public void FitTableColumns(JTable myTable) {
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
Enumeration columns = myTable.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(
column.getIdentifier());
// 取得表头宽度,然后和内容宽度进行逐一比较,取最大者,如果不想表格宽度随表头变化的话就将下面的width设为0
int width = (int) myTable
.getTableHeader()
.getDefaultRenderer()
.getTableCellRendererComponent(myTable,
column.getIdentifier(), false, false, -1, col)
.getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++) {
int preferedWidth = (int) myTable
.getCellRenderer(row, col)
.getTableCellRendererComponent(myTable,
myTable.getValueAt(row, col), false, false,
row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column); // 此行很重要
column.setWidth(width + myTable.getIntercellSpacing().width);
}
}
public static void main(String[] args) {
TableCellRenderer8 re8 = new TableCellRenderer8();
re8.init();
for(int I =0;I<20;I++){
re8.addData2table("CJCO"+I, "3", 0, false);
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
re8.addData2table("CJCO!!!!","北京邮电大学",0,true);
}
// @Override
// public void itemStateChanged(ItemEvent e) {
// // TODO Auto-generated method stub
// //获取改变的复选按键
// Object source = e.getItemSelectable();
// int index = -1;
// char c = '-';
// if (source==chin) {
// index = 0;
// c = 'c';
// } else if(source == glass){
// index = 1;
// c = 'g';
// }else if(source == hire){
// index = 2;
// c = 'h';
// }else if(source == teeth)
// {
// index = 3;
// c = 't';
// }
//
// //判断改变的按键的改变后的状态
// if(e.getStateChange() == ItemEvent.DESELECTED)
// c = '-';
//
//
// choice.setCharAt(index, c);
//
// upDatePicture();
// }
public static void createAndShowGUI() {
JFrame frame = new JFrame("复选框测试");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JComponent panel = new TableCellRenderer8();
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private ImageIcon createImageIcon(String string) {
URL url = TableCellRenderer8.class.getResource(string);
if (url != null)
return new ImageIcon(url);
else
System.out.println("image " + string + "not exist!");
return null;
}
private void upDatePicture() {
ImageIcon ii = createImageIcon(File.separator + "images"
+ File.separator + "geek" + File.separator + "geek-"
+ choice.toString() + ".gif");
}
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
class ExtendedTableModel8 extends DefaultTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
// 重新提供一个构造器,该构造器的实现委托给DefaultTableModel父类
public ExtendedTableModel8(String[] columnNames, Object[][] cells) {
super(cells, columnNames);
}
// // 重写getColumnClass方法,根据每列的第一个值来返回其真实的数据类型
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
class GenderTableCellRenderer8 extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
private String cellValue;
// 定义图标的宽度和高度
final int ICON_WIDTH = 23;
final int ICON_HEIGHT = 21;
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Icon) {
this.setIcon((Icon) value);
} else if (value instanceof String) {
this.setText((String) value);
} else if (value instanceof TimeLabel) {
return (Component) value;
}
// 设置选中状态下绘制边框
if (hasFocus) {
setBorder(UIManager.getBorder("Table.focusCellHighlightBorder"));
} else {
setBorder(null);
}
return this;
}
// // 重写paint方法,负责绘制该单元格内容
// public void paint(Graphics g) {
// // 如果表格值为"男"或"male",则绘制一个男性图标
// if (cellValue.equalsIgnoreCase("男")
// || cellValue.equalsIgnoreCase("male")) {
// drawImage(g, new ImageIcon("icon/male.gif").getImage());
// }
// // 如果表格值为"女"或"female",则绘制一个女性图标
// if (cellValue.equalsIgnoreCase("女")
// || cellValue.equalsIgnoreCase("female")) {
// drawImage(g, new ImageIcon("icon/female.gif").getImage());
// }
// }
// 绘制图标的方法
// private void drawImage(Graphics g, Image image) {
// g.drawImage(image, (getWidth() - ICON_WIDTH) / 2,
// (getHeight() - ICON_HEIGHT) / 2, null);
// }
}
public void itemStateChanged(ItemEvent e) {
JCheckBox box = (JCheckBox) e.getItemSelectable();
if (box.isSelected())
//这里是选中事件,在这里处理。
}