Pregunta

¿Es posible agregar botones dentro de la celda JTable junto con los datos?Lo que estoy tratando de hacer es crear una tabla con columnas que muestren datos (número) de la base de datos y dos botones para aumentar/disminuir el número dentro de la misma celda.

|ID | Cantidad|
|06| 2 [+][-] |

sería algo como lo anterior con [+][-] siendo botones.Entonces, cuando presiono [+], el número cambiará a 3 y 1 si presiono [-].

¿Fue útil?

Solución

Sí, es posible, aunque no será fácil.

Tienes que escribir tu propia costumbre. renderizador celular y el tuyo editor de celdas.

Esta es una muestra que hice en 5 minutos:

sample

Está lejos de ser perfecto, pero muestra el concepto.

Aquí está el código fuente:

import java.awt.Component;
import java.awt.Font;
import javax.swing.*;
import javax.swing.table.*;
import java.awt.Dimension;

public class CustomCell {
    public static void main( String [] args ) { 
        Object [] columnNames = new Object[]{ "Id", "Quantity" };
        Object [][] data        = new Object[][]{ {"06", 1}, {"08", 2} };

        JTable table = new JTable( data, columnNames ) { 
            public TableCellRenderer getCellRenderer( int row, int column ) {
                return new PlusMinusCellRenderer();
            }
         };

        table.setRowHeight( 32 );
        showFrame( table );
    }

    private static void showFrame( JTable table ) {
        JFrame f = new JFrame("Custom Cell Renderer sample" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.add( new JScrollPane( table ) );
        f.pack();
        f.setVisible( true );
    }
}

class PlusMinusCellRenderer extends JPanel implements TableCellRenderer {
        public Component getTableCellRendererComponent(
                            final JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
                this.add( new JTextField( value.toString()  ) );
                this.add( new JButton("+"));
                this.add( new JButton("-"));
                return this;
        }
}

Aquí hay un hilo que puede ser interesante y aquí.

Otros consejos

Como se discutió en el tutorial Necesitará un procesador para mostrar su valor y un editor para detectar eventos de la celda que se está editando.En esto ejemplo, el Component es un JCheckBox.Tenga en cuenta que esto requiere una costumbre DataModel que se extiende AbstractTableModel para suministrar el correcto Class para una columna determinada.Sugerencia de Joonas para usar JSpinner es bueno y funciona bien.

Creo que necesitas crear un procesador de celdas personalizado si quieres mostrar algo más que texto (o números) en la celda.El trabajo del renderizador de celdas es pintar lo que necesites mostrar en la celda.

Ver Documentación del renderizador de tablas.

Entonces, en este caso, podría crear un pequeño JPane que contenga el campo de texto y los pequeños botones + y -, o simplemente un componente JSpinner, si hace lo que necesita.Un poco complicado, sin duda, pero debería ser posible.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top