texto centrar ajustar java swing jtable alignment center

java - ajustar - Cómo centrar células en JTable



centrar texto jtable (1)

Tengo un problema específico con mi código.

import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.io.*; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.*; import java.awt.Color; class ver_his_sign extends JFrame { ver_his_sign() { JTable table = new JTable(); JScrollPane scroll = new JScrollPane(); DefaultTableModel model = new DefaultTableModel(get_data(), get_header()); JFrame hk = new JFrame("Historial de Significados"); Image icon = Toolkit.getDefaultToolkit().getImage("JLPT.jpg"); ImageIcon ima = new ImageIcon("JLPT.jpg"); table = new JTable(model) { public boolean isCellEditable(int row, int col) { switch (col) { case 0: return false; case 1: return false; case 2: return true; default: return false; } } @Override public Class getColumnClass(int column) { switch (column) { case 0: return String.class; case 1: return String.class; case 2: return Boolean.class; default: return Boolean.class; } } }; table.setFont(new Font("Microsoft JhengHei", Font.BOLD, 13)); // a custom renderer which uses a special font DefaultTableCellRenderer r = new DefaultTableCellRenderer() { Font font = new Font("Microsoft JhengHei", Font.BOLD, 50); @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setFont(font); setForeground(Color.blue); return this; } }; table.getColumnModel().getColumn(0).setCellRenderer(r); TableColumn column = null; DefaultTableCellRenderer tcr = new DefaultTableCellRenderer(); tcr.setHorizontalAlignment(JLabel.CENTER); DefaultTableCellRenderer defaultRenderer = (DefaultTableCellRenderer) table.getDefaultRenderer(Object.class); defaultRenderer.setHorizontalAlignment(JLabel.CENTER); defaultRenderer.setFont(new Font("Microsoft JhengHei", Font.BOLD, 50)); tcr.setFont(new Font("Microsoft JhengHei", Font.BOLD, 50)); for (int i = 0; i < 3; i++) { column = table.getColumnModel().getColumn(i); if (i == 0) { column.setPreferredWidth(200); } else { if (i == 1) { column.setPreferredWidth(100); } else { column.setPreferredWidth(300); } } } table.setRowHeight(table.getRowHeight() + 70); table.setModel(model); scroll.add(table); this.add(scroll); this.setTitle("Historial de Significados"); this.setSize(1350, 700); this.setIconImage(icon); this.setVisible(true); this.setLocationRelativeTo(null); scroll.setViewportView(table); } Object[][] get_data() { Object data[][] = new Object[][]{ {"Uno, 1", "/u4e00", true}, {"Uno, 1", "/u4e01", true}, {"Uno, 1", "/u4e02", true}, {"Uno, 1", "/u4e03", true}, {"Uno, 1", "/u4e04", true} }; return data; } String[] get_header() { String header[] = new String[]{"KANJI", "SIGNIFICADO", "Agregar"}; return header; } }

Entonces sucede lo que aparece en la imagen. Necesito que la columna Kanji sea la alineación CENTRAL, pero por alguna razón DefaultTableCellRenderer , `tcr, no está funcionando como debería, pero el renderizador predeterminado lo está haciendo como se supone que debe ser.

¿Alguna sugerencia / ayuda?


He reducido tu ejemplo a lo esencial:

  • Su renderizador personalizado, r , debe condicionar la alineación, así como también el tamaño y el color.

  • Anula los métodos del modelo en el modelo, no en la vista.

  • Los objetos Swing GUI se deben construir y manipular solo en el hilo de envío del evento .

  • Use deriveFont() según sea necesario.

  • Consulte también esta sección de tutorial sobre cómo se seleccionan los representadores.

import java.awt.*; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; import javax.swing.table.*; import java.awt.Color; import javax.swing.JLabel; class ver_his_sign extends JFrame { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new ver_his_sign(); } }); } ver_his_sign() { DefaultTableModel model = new DefaultTableModel(get_data(), get_header()) { @Override public boolean isCellEditable(int row, int col) { switch (col) { case 0: return false; case 1: return false; case 2: return true; default: return false; } } @Override public Class getColumnClass(int column) { switch (column) { case 0: return String.class; case 1: return String.class; case 2: return Boolean.class; default: return Boolean.class; } } }; DefaultTableCellRenderer r = new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); setForeground(Color.blue); setHorizontalAlignment(JLabel.CENTER); setFont(getFont().deriveFont(50f)); return this; } }; JTable table = new JTable(model); table.setRowHeight(table.getRowHeight() + 50); table.getColumnModel().getColumn(1).setCellRenderer(r); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.add(new JScrollPane(table)); this.pack(); this.setLocationRelativeTo(null); this.setVisible(true); } Object[][] get_data() { Object data[][] = new Object[][]{ {"Uno, 1", "/u4e00", true}, {"Uno, 1", "/u4e01", true}, {"Uno, 1", "/u4e02", true}, {"Uno, 1", "/u4e03", true}, {"Uno, 1", "/u4e04", true} }; return data; } String[] get_header() { String header[] = new String[]{"SIGNIFICADO", "KANJI", "Agregar"}; return header; } }