JDK-4855121 : XP L&F: Table Header does not have rollover effect
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 1.4.1,1.4.2
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2003-04-28
  • Updated: 2003-09-26
  • Resolved: 2003-09-26
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
5.0 tigerFixed
Related Reports
Duplicate :  
Duplicate :  
Relates :  
Relates :  
Description

Name: jk109818			Date: 04/28/2003


FULL PRODUCT VERSION :
1.4.2 beta

FULL OS VERSION :
Windows XP

A DESCRIPTION OF THE PROBLEM :
Table Header does not look exactly like Windows XP.

1) It doesn't have the rollover effect, when mouse cursor flies over it. 
It should be highlighted with orange line.


REPRODUCIBILITY :
This bug can be reproduced always.
(Review ID: 184855) 
======================================================================

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: tiger FIXED IN: tiger INTEGRATED IN: tiger tiger-b22
14-06-2004

WORK AROUND The following workaround is meant for 1.4.2 only. It adds rollover handling for the table headers and also corrects the header size problem described in bug 4774013. import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.table.*; import com.sun.java.swing.plaf.windows.*; public class XPTableHeaderRenderer extends DefaultTableCellRenderer implements MouseListener, MouseMotionListener { private JTableHeader header; private DefaultTableCellRenderer oldRenderer; private int rolloverColumn = -1; public XPTableHeaderRenderer(JTableHeader header) { this.header = header; this.oldRenderer = (DefaultTableCellRenderer)header.getDefaultRenderer(); header.addMouseListener(this); header.addMouseMotionListener(this); } private void updateRolloverColumn(MouseEvent e) { int col = header.columnAtPoint(e.getPoint()); if (col != rolloverColumn) { rolloverColumn = col; header.repaint(); } } public void mouseMoved(MouseEvent e) { updateRolloverColumn(e); } public void mouseEntered(MouseEvent e) { updateRolloverColumn(e); } public void mouseExited(MouseEvent e) { rolloverColumn = -1; header.repaint(); } public void mousePressed(MouseEvent e) { rolloverColumn = -1; header.repaint(); } public void mouseReleased(MouseEvent e) { updateRolloverColumn(e); } public void mouseClicked(MouseEvent e) { } public void mouseDragged(MouseEvent e) { } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JComponent comp = (JComponent)oldRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus || (column == rolloverColumn), row, column); comp.setBorder(new EmptyBorder(3, 8, 4, 8)); return comp; } public static void main(String[] a) throws Exception { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); JFrame f = new JFrame(); JTable table = new JTable(5, 5); f.getContentPane().add(new JScrollPane(table)); if (System.getProperty("java.version").startsWith("1.4.2")) { // Replace the XP renderer with our own final JTableHeader header = table.getTableHeader(); TableCellRenderer renderer = header.getDefaultRenderer(); String name = renderer.getClass().getName(); if (name.equals("com.sun.java.swing.plaf.windows.WindowsTableHeaderUI$XPDefaultRenderer")) { header.setDefaultRenderer(new XPTableHeaderRenderer(header)); } } f.setBounds(100, 100, 200, 200); f.setVisible(true); } } ###@###.### 2003-08-29
29-08-2003

EVALUATION Rollover implemented for XP. ###@###.### 2003-08-28
28-08-2003