62,628
社区成员
发帖
与我相关
我的任务
分享
import javax.swing.table.AbstractTableModel;
import java.util.List;
import java.util.Iterator;
import java.util.Vector;
import java.util.ArrayList;
public class SimpleTableModel extends AbstractTableModel{
public Vector<Vector> content = null;
private String[] title_name = null;
private int[] editColumns = null;
/**
* 构造
* @param title_name String[] 表格标题
* @param vector Vector 表格数据
* @param editColumns int[] 可编辑列数
*/
public SimpleTableModel(String[] title_name, Vector vector, int[] editColumns){
this.title_name = title_name;
this.content = vector;
this.editColumns = editColumns;
}
/**
* 添加新向量
* @param v Vector
*/
public void addRow(Vector v) {
content.add(v);
}
/**
* 添加新向量
* @param index int 索引位置
* @param v Vector
*/
public void addRow(int index, Vector v){
content.add(index, v);
}
/**
* 单行删除
* @param row int
*/
public void removeRow(int row) {
content.remove(row);
}
public void removeRow(Vector<Integer> row) {
for(int i=0;i<row.size();i++) {
content.remove(row.get(i));
}
}
/**
* 多行删除
* @param row int
* @param count int
*/
public void removeRows(int row, int count) {
for (int i = 0; i < count; i++) {
if (content.size() > row) {
content.remove(row);
}
}
}
/**
* 让表格中某些值可修改,但需要setValueAt(Object value, int row, int col)方法配合才能使修改生效
*/
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (editColumns != null) {
for (int i = 0; i < editColumns.length; i++) {
if (columnIndex == editColumns[i]) {
return true;
}
}
}
return false;
}
/**
* 设置单元格值
* @param value Object 给定值
* @param row int 表格行
* @param col int 表格列
*/
public void setValueAt(Object value, int row, int col) {
content.get(row).remove(col);
content.get(row).add(col, value);
fireTableCellUpdated(row, col);
}
/**
* 设置单元格值
* @param value Object 给定值
* @param row int 表格行
* @param columnName String 指定列名
*/
public void setValueAt(Object value, int row, String columnName){
for (int col = 0; col < getColumnCount(); col++) {
if(columnName.equals(getColumnName(col))){
content.get(row).remove(col);
content.get(row).add(col, value);
fireTableCellUpdated(row, col);
break;
}
}
}
public String getColumnName(int col) {
return title_name[col];
}
public int getColumnCount() {
return title_name.length;
}
public int getRowCount() {
if(content != null){
return content.size();
}else{
return 0;
}
}
public Object getValueAt(int row, int col) {
if(content.size() > 0){
return content.get(row).get(col);
}else{
return "";
}
}
/**
* 返回数据类型
*/
public Class getColumnClass(int col) {
return getValueAt(0, col).getClass();
}
/**
* 根据表格上的id数据获取行号
* @return int
*/
public int getRowById(String id){
if(content.size() > 0){
for(int i=0;i<content.size();i++){
Vector v = content.get(i);
if(v.get(0).toString().equals(id)){
return i;
}
}
}
return -1;
}
public List getSeleIds(){
List ls = new ArrayList();
Iterator<Vector> iter = content.iterator();
while(iter.hasNext()){
Vector v = iter.next();
//System.out.println(" " + (Boolean)v.get(1));
if((Boolean)v.get(1) == true){
ls.add(v.get(0));
}
}
return ls;
}
}
import java.awt.*;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.util.Vector;
public class TableRolloverTest {
public static void main(String[] args) {
TableRolloverTest trt = new TableRolloverTest();
String[] title = {"第一列","第二列","第三列","第四列"};
Vector<Vector> data = new Vector<Vector>();
int[] editColumn = {};
SimpleTableModel tableModel = new SimpleTableModel(title, data, editColumn);
JTable table = new JTable(tableModel);
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.show();
for (int i = 0; i < 10; i++) {
Vector v = new Vector();
v.add("一" + i);
v.add("二" + i);
v.add("三" + i);
v.add("四" + i);
tableModel.addRow(v);
table.repaint();
table.revalidate();
}
}
}
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class RoutineColor extends DefaultTableCellRenderer {
int mouseEnterRow = -1;
public void setMouseEnterRowRow(int mouseEnterRow) {
this.mouseEnterRow = mouseEnterRow;
System.out.println("mouseEnterRow = "+mouseEnterRow);
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
System.out.println("row = "+row);
Component comp = super.getTableCellRendererComponent(table,
value, isSelected, hasFocus, row, column);
if(mouseEnterRow != -1 && mouseEnterRow == row){
System.out.println("setred");
setBackground(Color.red); //设置其它行
}else{
setBackground(Color.white); //设置其它行
}
return comp;
}
}
2、监听鼠标事件的类
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTable;
public class MyMouseListener extends MouseAdapter {
JTable table;
RoutineColor routineColor;
public MyMouseListener(JTable table, RoutineColor routineColor) {
this.table = table;
this.routineColor = routineColor;
}
@Override
public void mouseMoved(MouseEvent e) {
Point mousepoint = e.getPoint();
routineColor.setMouseEnterRowRow(table.rowAtPoint(mousepoint));
table.repaint();
super.mouseMoved(e);
}
}
3、最后在你原来的类里面增加了几句代码,设置自定义的外观和监听器
import java.awt.BorderLayout;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class TableRolloverTest {
public static void main(String[] args) {
TableRolloverTest trt = new TableRolloverTest();
String[] title = {"第一列","第二列","第三列","第四列"};
Vector<Vector> data = new Vector<Vector>();
int[] editColumn = {};
SimpleTableModel tableModel = new SimpleTableModel(title, data, editColumn);
JTable table = new JTable(tableModel);
//设置表格每列用自定义外观
RoutineColor routineColor = new RoutineColor();
for (int i = 1; i < table.getColumnCount(); i++) {
table.setDefaultRenderer(table.getColumnClass(i), routineColor);
}
//设置鼠标监听器
MyMouseListener mouseListener = new MyMouseListener(table, routineColor);
table.addMouseMotionListener(mouseListener);
JScrollPane sp = new JScrollPane(table);
JFrame f = new JFrame();
f.getContentPane().add(sp, BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800, 600);
f.setLocationRelativeTo(null);
f.show();
for (int i = 0; i < 10; i++) {
Vector v = new Vector();
v.add("一" + i);
v.add("二" + i);
v.add("三" + i);
v.add("四" + i);
tableModel.addRow(v);
table.repaint();
table.revalidate();
}
}
}