Discussions
Categories
- 197K All Categories
- 2.5K Data
- 546 Big Data Appliance
- 1.9K Data Science
- 450.8K Databases
- 221.9K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 552 MySQL Community Space
- 479 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.1K ORDS, SODA & JSON in the Database
- 555 SQLcl
- 4K SQL Developer Data Modeler
- 187.2K SQL & PL/SQL
- 21.4K SQL Developer
- 296.3K Development
- 17 Developer Projects
- 139 Programming Languages
- 293K Development Tools
- 110 DevOps
- 3.1K QA/Testing
- 646.1K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 158 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.2K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 19 Java Essentials
- 162 Java 8 Questions
- 86K Java Programming
- 81 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 205 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 468 LiveLabs
- 39 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 175 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 233 Portuguese
JTable - right align in cell even if the text is wider than the cell
Hello!
I want to display text in cells right aligned. When the size of the cell is smaller than the text, the text will be automatically left aligned. E.g:
e.g. text is abcdefgh
|abcd...|
i am interested in right alignment even if the size of the text is bigger than the cell it contains, because the relevant information stands on the right hand side of every entry.
E.g:
|...fgh|
or something like that.
thnx!
I want to display text in cells right aligned. When the size of the cell is smaller than the text, the text will be automatically left aligned. E.g:
e.g. text is abcdefgh
|abcd...|
i am interested in right alignment even if the size of the text is bigger than the cell it contains, because the relevant information stands on the right hand side of every entry.
E.g:
|...fgh|
or something like that.
thnx!
Comments
-
There are several good responses to this on these forums. Basically you need to implement custom table cell renderering and set text alignment.
Cheers
DB -
To be honest I have already implemented an own cell rendering - after I read lot of responses related to this topic, but only text alignment does not solve the problem I sketched.
here you can see:
public Component getTableCellRendererComponent (...){
Component comp = super.getTableCellRendererComponent(...);
JLabel currentCell = (JLabel) comp;
currentCell.setHorizontalAlignment(JLabel.RIGHT);
return currentCell;
} -
Maybe something like this:
import java.awt.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class TableLeftDotRenderer extends JFrame { JTable table; public TableLeftDotRenderer() { String[] columnNames = {"Default", "Left Dot"}; Object[][] data = { {"A1234567890", "A1234567890"}, {"qwertyasdfghzxcvbn", "qwertyasdfghzxcvbn"} }; DefaultTableModel model = new DefaultTableModel(data, columnNames); table = new JTable( model ); table.setPreferredScrollableViewportSize(table.getPreferredSize()); JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane ); // Override default renderer for a specific column DefaultTableCellRenderer leftDotRenderer = new LeftDotRenderer(); table.getColumnModel().getColumn(1).setCellRenderer( leftDotRenderer ); } public static void main(String[] args) { TableLeftDotRenderer frame = new TableLeftDotRenderer(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setLocationRelativeTo( null ); frame.setVisible(true); } class LeftDotRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); int availableWidth = table.getColumnModel().getColumn(column).getWidth(); availableWidth -= table.getIntercellSpacing().getWidth(); Insets borderInsets = getBorder().getBorderInsets((Component)this); availableWidth -= (borderInsets.left + borderInsets.right); String cellText = getText(); FontMetrics fm = getFontMetrics( getFont() ); if (fm.stringWidth(cellText) > availableWidth) { String dots = "..."; int textWidth = fm.stringWidth( dots ); int nChars = cellText.length() - 1; for (; nChars > 0; nChars--) { textWidth += fm.charWidth(cellText.charAt(nChars)); if (textWidth > availableWidth) { break; } } setText( dots + cellText.substring(nChars + 1) ); } return this; } } }
-
H!
Thanks for this solution, this is what I meant and works perfectly!
eha
This discussion has been closed.