I want to add right cell-padding to a column in my JTable, how do I do it?
I tried searching online but I can't seem to find a definitive answer for this.
I hope someone can help me.
Regards, Chad
We can add or insert a JButton to JTable cell by customizing the code either in DefaultTableModel or AbstractTableModel and we can also customize the code by implementing TableCellRenderer interface and need to override getTableCellRendererComponent() method.
By default the width of a JTable is fixed, we can also change the width of each column by using table. getColumnModel(). getColumn(). setPreferredWidth() method of JTable class.
We can change the background and foreground color for each column of a JTable by customizing the DefaultTableCellRenderer class and it has only one method getTableCellRendererComponent() to implement it.
Use a custom TableCellRenderer
, and specify setHorizontalAlignment(JLabel.RIGHT)
. There's a related example here that illustrates JLabel.CENTER
.
Addendum: My problem is padding and not alignment.
If you want the padding inside the cell, rather than between cells, you can use a border in the renderer, as @Guillaume Polet suggests. Note that the border can be asymmetric; the example below pads only on the right.
setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
A slightly enhanced version of @trashgod's correct answer is to compound the border with the padding: doing so guarantees that the default borders (f.i. the focus indicator) are not lost:
DefaultTableCellRenderer r = new DefaultTableCellRenderer() {
Border padding = BorderFactory.createEmptyBorder(0, 10, 0, 10);
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus,
row, column);
setBorder(BorderFactory.createCompoundBorder(getBorder(), padding));
return this;
}
};
Or use SwingX' JXTable and decorate the renderer with a Highlighter:
BorderHighlighter hl = new BorderHighlighter(
BorderFactory.createEmptyBorder(0, 10, 0, 10));
hl.setInner(true);
table.addHighlighter(hl);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With