M
mhsampson
Dear group,
I am writing an desktop app that uses a JTable with a special Renderer
for the column headers that parses the text for end-of-line characters
and renders it as a JList. This is so I can show column headings of
more than one line. Example:
+----------------+
| Monday |
| Dec 11 |
+----------------+
| 45 |
+----------------+
| 31 |
+----------------+
The code works fine on Win2KP in Java 1.5.
I have started testing it on a Macintosh with Mac OS X 10.4.8 and Java
1.5. So far, I have found that I have to be more specific in my
PropertyChangeEvent handling code (the Macintosh Swing created more
property change events during normal operation), and that my multiple
line JTable headers do not display.
Does this sound familiar to anyone?
Mike Sampson
Here is the code for the renderer. It is borrowed from somewhere on
the net.
public class MultiLineHeaderRenderer extends JList implements
TableCellRenderer
{
public MultiLineHeaderRenderer()
{
setOpaque(true);
setForeground(UIManager.getColor("TableHeader.foreground"));
setBackground(UIManager.getColor("TableHeader.background"));
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
ListCellRenderer renderer = getCellRenderer();
((JLabel)renderer).setHorizontalAlignment(JLabel.CENTER);
setCellRenderer(renderer);
}
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus, int row, int
column)
{
setFont(table.getFont());
String str = (value == null) ? "" : value.toString();
BufferedReader br = new BufferedReader(new StringReader(str));
String line;
Vector<String> v = new Vector<String>();
try
{
while ((line = br.readLine()) != null)
{
v.addElement(line);
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
setListData(v);
return this;
}
}
I am writing an desktop app that uses a JTable with a special Renderer
for the column headers that parses the text for end-of-line characters
and renders it as a JList. This is so I can show column headings of
more than one line. Example:
+----------------+
| Monday |
| Dec 11 |
+----------------+
| 45 |
+----------------+
| 31 |
+----------------+
The code works fine on Win2KP in Java 1.5.
I have started testing it on a Macintosh with Mac OS X 10.4.8 and Java
1.5. So far, I have found that I have to be more specific in my
PropertyChangeEvent handling code (the Macintosh Swing created more
property change events during normal operation), and that my multiple
line JTable headers do not display.
Does this sound familiar to anyone?
Mike Sampson
Here is the code for the renderer. It is borrowed from somewhere on
the net.
public class MultiLineHeaderRenderer extends JList implements
TableCellRenderer
{
public MultiLineHeaderRenderer()
{
setOpaque(true);
setForeground(UIManager.getColor("TableHeader.foreground"));
setBackground(UIManager.getColor("TableHeader.background"));
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
ListCellRenderer renderer = getCellRenderer();
((JLabel)renderer).setHorizontalAlignment(JLabel.CENTER);
setCellRenderer(renderer);
}
public Component getTableCellRendererComponent(JTable table, Object
value,
boolean isSelected, boolean hasFocus, int row, int
column)
{
setFont(table.getFont());
String str = (value == null) ? "" : value.toString();
BufferedReader br = new BufferedReader(new StringReader(str));
String line;
Vector<String> v = new Vector<String>();
try
{
while ((line = br.readLine()) != null)
{
v.addElement(line);
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
setListData(v);
return this;
}
}