Header của JTable chính là những thanh tiêu đề trên mỗi cột của nó. Trên hầu hết các Look and Feel, header của bảng luôn được căn lề bên trái. Điều này dẫn đến việc những người kỹ tính (như mình chẳng hạn) sẽ thấy nó không đẹp mắt chút nào, đặc biệt nếu một cột có độ rộng lớn. Đó là lý do tại mình muốn căn giữa header của JTable.
Cũng không có gì nhiều để chia sẻ với các bạn. Nó chỉ là một vài dòng code mà thôi, giúp bạn tiết kiệm thời gian tìm kiếm trên Google.
Để căn giữ header của bảng, bạn có thể code như sau:
// center the table header TableColumnModel columnModel = myTable.getColumnModel(); myTable.setTableHeader(new JXTableHeader(columnModel) { @Override public void updateUI() { super.updateUI(); // need to do in updateUI to survive toggling of LAF if (getDefaultRenderer() instanceof JLabel) { ((JLabel) getDefaultRenderer()).setHorizontalAlignment(JLabel.CENTER); } } });
Hoặc một cách tương tự khác:
// center title column TableCellRenderer myRenderer = myTable.getTableHeader().getDefaultRenderer(); JLabel label = (JLabel) myRenderer; label.setHorizontalAlignment(JLabel.CENTER);
Hai cách code trên về cơ bản là chung một nguyên tắc. Nhưng thực tế có một vài trường hợp đặc biệt 1 trong 2 cách có thể không hiệu quả. Mình nêu cả 2 cách để thêm một phương án dự phòng cho các bạn.
Các bạn cũng để ý rằng, không chỉ có các ô của bảng, mà cả header của nó cũng được vẽ nên bởi các renderer. Nếu bạn sử dụng JXTable trong SwingX, cách làm hoàn toàn giống nhau. Bạn có thể thay JTableHeader bằng JXTableHeader ở đoạn code đầu tiên trong trường hợp này.
Happy Coding!