Right now my Boolean
values for my JTable display as JCheckBoxes
. This would normally be fine but I would like to display them as either an alternative String or image.
I can get them to display as true/false but I would like to display them as a checkmark (✔) if true and nothing if false. Possibly an image but lets do a String first...
Asked
Active
Viewed 8,320 times
4

marcosbeirigo
- 11,098
- 6
- 39
- 57

twodayslate
- 2,803
- 3
- 27
- 43
2 Answers
9
Create a custom renderer. Extend the DefaultTableCellRenderer and add your own code to display whatever you want. It could be a custom Icon or if the "checkmark" is a printable character than you can just set the renderer text to the appropriate character.
Read the JTable API and you will find a link to the Swing tutorial on "How to Use Tables" which will give more information about renderers.
If you need more help post your SSCCE showing the problems you are having creating the renderer.
Edit:
The tutorial shows how to add a custom renderer for a given class but it doesn't show how to add a custom renderer for a specific column. You would use:
table.getColumnModel().getColumn(...).setCellRenderer(...);

camickr
- 321,443
- 19
- 166
- 288
-
So when I create `BooleanRenderer(Format formatter)` what do I put for formatter... – twodayslate May 22 '10 at 18:22
-
Sorry, I have no idea why you are using a Format. You suggested you might use an Icon for the renderer. Well in this cause you just use the setIcon(...) method to set the Icon. If you want to use a displayable character, then you just use the setText(...) method. The default renderer extends JLabel so you use whatever label method is appropriate for how you want to render the Boolean value. – camickr May 22 '10 at 19:14
3
Example:
table.setDefaultRenderer(Boolean.class, new BooleanRenderer(true));
with BooleanRenderer
public class BooleanRenderer extends JLabel implements TableCellRenderer
{
.....
}

Peter
- 5,728
- 20
- 23
-
Please read my suggestion to extend DefaultTableCellRenderer (which was given 2 hours earlier). There are multiple reasons for extending the default renderer. First you get the default behaviour by default such as row highlighting, border highlighting when a cell receives focus. Secondly, the default renderer has been optimized for faster painting. – camickr May 21 '10 at 15:58