我继承了JPanel,实现了TableCellRenderer接口,直接在JPanel上的组件上addMouseListener没有效果。应该如何才能对每个单元格实现鼠标监听呢?我想实现鼠标悬停在单元格上单元格背景变化的效果。多谢!
解决方案 »
- 问个并发的问题:CyclicBarrier和CountDownLatch的区别
- webservice异常 谁见过
- 想考SCJP 淘宝卖的600块左右的考试券可信吗?
- JSP中是中文,传递到后台后是乱码!
- 用getResource方法返回的路径中多了一个!符号。
- 一个很简单的问题!
- 怎么调用自己定义的class ,小菜
- 在JAVA的“石头,剪子,布)中如何加入中 ‘WHILE’ 的语句呢?
- 很奇怪的问题,请教各位大虾
- Web service出错AxisFault: org.xml.sax.SAXException: Invalid element
- 简单的问题:关于一个类的2维数组的赋值
- 求教!!!
一般是单元格change后才能触发事件,呵呵,楼主要求高了点
http://blog.csdn.net/allenchue
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseEvent;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.MouseInputListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;public class TableRolloverTest {
public static void main(String[] args) {
TableModel model = new DefaultTableModel(10, 10);
JTable table = new JTable(model);
RolloverRenderer renderer = new RolloverRenderer();
table.setDefaultRenderer(Object.class, renderer);
table.addMouseListener(renderer);
table.addMouseMotionListener(renderer); 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();
}
private static class RolloverRenderer extends DefaultTableCellRenderer
implements MouseInputListener
{
int row = -1;
int col = -1;
JTable table = null; public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
this.table = table;
super.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
if (row == this.row && column == this.col) {
setBackground(Color.red);
}
else if (isSelected) {
setForeground(table.getSelectionForeground());
setBackground(table.getSelectionBackground());
}
else {
setBackground(Color.white);
}
return this;
} public void mouseExited(MouseEvent e) {
if (table != null) {
int oldRow = row;
int oldCol = col;
row = -1;
col = -1;
if (oldRow != -1 && oldCol != -1) {
Rectangle rect = table.getCellRect(oldRow, oldCol, false);
table.repaint(rect);
}
}
} public void mouseDragged(MouseEvent e) {
mouseMoved(e);
} public void mouseMoved(MouseEvent e) {
if (table != null) {
Point p = e.getPoint();
int oldRow = row;
int oldCol = col;
row = table.rowAtPoint(p);
col = table.columnAtPoint(p); if (oldRow != -1 && oldCol != -1) {
Rectangle rect = table.getCellRect(oldRow, oldCol, false);
table.repaint(rect);
}
if (row != -1 && col != -1) {
Rectangle rect = table.getCellRect(row, col, false);
table.repaint(rect);
}
}
} public void mouseClicked(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
}
}