Cómo centrar un valor en JTable celular? Estoy usando Netbeans.

  • usted debe estar utilizando algún otro componente dentro de la célula, por ejemplo JLabel por lo que tendría es la alineación de propiedades.

6 Comentarios

  1. 53

    Usted necesita para personalizar el renderizador. El centro de la primera columna que usted puede hacer:

    DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
    centerRenderer.setHorizontalAlignment( JLabel.CENTER );
    table.getColumnModel().getColumn(0).setCellRenderer( centerRenderer );

    Para el centro de todas las columnas de la Cadena de datos que usted puede hacer:

    DefaultTableCellRenderer centerRenderer = new DefaultTableCellRenderer();
    centerRenderer.setHorizontalAlignment( JLabel.CENTER );
    table.setDefaultRenderer(String.class, centerRenderer);
    • eso no funciona para mí. JLabel.A la DERECHA se alinea a la derecha, JLabel.A la IZQUIERDA se alinea a la izquierda, pero si yo uso JLabel.El CENTRO se alinea a la derecha de nuevo. ¿Por qué sería?
    • este trabajo para mí por todas las células, pero no para el encabezado de la tabla
    • JTableHeader tiene su propio procesador.
    • A pesar de que es un viejo post, pero todavía debe ser mejor. Usted debe utilizar SwingConstants.CENTER en lugar de JLabel.CENTER. Aunque, JLabel.CENTER' is also referring to SwingConstants.CENTRO de, it will be much more concise to use generic constant class, rather than JLabel`, que está fuera de contexto en este escenario.
    • ¿Por qué no ((DefaultTableCellRenderer)table.getDefaultRenderer(String.class)).setHorizontalAlignment(SwingConstants.CENTER); trabajo en lugar de su segundo trozo de código? — Yo lo he probado, no funciona, no sé por qué. No hay errores, sólo queda descentrada. A mí me parece este un delineador debe trabajar. El código funciona, por supuesto.
    • Pido a la pregunta anterior, porque el código: ((DefaultTableCellRenderer)table.getTableHeader().getDefaultRenderer()).setHorizontalAlignment(SwingConstants.CENTER);… no funciona para el encabezado de la tabla. Como se ha mencionado en este respuesta.
    • cambiar la alineación del procesador predeterminado funciona muy bien para mí. Sólo puedo suponer que usted tiene algún otro código que reinicia el procesador?
    • No puedo pensar en lo que sería. Tengo un par de líneas de código. JScrollPane sp = new JScrollPane();JTable jt = new JTable(new MyTModel(dataArray, colNames)); ((DefaultTableCellRenderer) jt.getDefaultRenderer(Integer.class)).setHorizontalAlignment(SwingConstants.CENTER); sp.setViewportView(jt); myTPane.addTab("# "+x,sp); — Hago la mesa con mi modelo personalizado, ajuste, ajuste el panel de desplazamiento de la ventanilla, agregar panel de desplazamiento de la ficha. Y no centrada. Datos enteros.
    • crear un adecuado SSCCE que demuestra su problema y, a continuación, publicar una pregunta en el foro.

  2. 7

    Otra buena manera de centro de todas las columnas es con un bucle:

     for(int x=0;x<numberofcols;x++){
             table1.getColumnModel().getColumn(x).setCellRenderer( centerRenderer );
            }
  3. 4

    Aquí vamos:

    import javax.swing.*;
    import javax.swing.table.DefaultTableCellRenderer;
    import javax.swing.table.TableModel;
    
    public class JTableUtilities
    {
        public static void setCellsAlignment(JTable table, int alignment)
        {
            DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();
            rightRenderer.setHorizontalAlignment(alignment);
    
            TableModel tableModel = table.getModel();
    
            for (int columnIndex = 0; columnIndex < tableModel.getColumnCount(); columnIndex++)
            {
                table.getColumnModel().getColumn(columnIndex).setCellRenderer(rightRenderer);
            }
        }
    }

    Uso:

    JTableUtilities.setCellsAlignment(table, SwingConstants.CENTER);
  4. 2

    Lugar de JLabel.CENTER, puede utilizar SwingConstants.CENTER.

    • esa es exactamente la misma 😉
    • no funciona para mí.
  5. 1

    He tenido un problema similar. Yo quería alinear una sola celda en función del valor de otra celda. Si la celda X es NULO, entonces la célula Y debe estar alineado a la DERECHA. Otra cosa, celular Y debe estar alineada a la IZQUIERDA.

    He encontrado esta solución realmente útil. Consiste en la creación de un personalizados de Procesamiento, que se extiende DefaultTableCellRender.

    Aquí está el código:

    public class MyRender extends 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);
        MyTableModel mtm = (MyTableModel)table.getModel();
        switch(column){
            case Y : 
                if(mla.getValueAt(row,X)!=null)
                    setHorizontalAlignment(SwingConstants.RIGHT);
                else
                    setHorizontalAlignment(SwingConstants.LEFT);
                break;
         }
        return this;
       }
    
     }

    Después de eso, sólo tienes que crear una nueva instancia de MyRender y la puso a la columna Y, en este caso. Yo hago esto cuando se carga la información en la tabla.

    MyRender render = new MyRender();
    table.getColumnModel().getColumn(Y).setCellRender(render);

    Espero que sea útil!

  6. 1
    ((DefaultTableCellRenderer) jTable1.getTableHeader().getDefaultRenderer())
                .setHorizontalAlignment(JLabel.CENTER); //header to center

    Este código encabezado centro de jtable

    DefaultTableCellRenderer rendar = new DefaultTableCellRenderer();
        rendar.setHorizontalAlignment(jLabel1.CENTER);
    
        jTable1.getColumnModel().getColumn(0).setCellRenderer(rendar); 

    este código a la columna del centro de

Dejar respuesta

Please enter your comment!
Please enter your name here