Domanda

E 'possibile aggiungere i pulsanti all'interno della cellula JTable insieme ai dati? Quello che sto cercando di fare è quello di creare una tabella con colonne che visualizzano i dati (numero) dal database, e due pulsanti per aumentare / diminuire il numero all'interno della stessa cella.

| ID | Quantità |
| 06 | 2 [+] [-] |

sarebbe qualcosa come sopra, con [+] [-] che sono i pulsanti. Così, quando si preme [+], il numero cambia a 3 e 1 se premendo [-].

È stato utile?

Soluzione

Sì, è possibile, anche se non sarà facile.

Si deve scrivere il proprio personalizzato renderer di celle il proprio e rel="nofollow editor di cella noreferrer"> .

Questo è un esempio che ho fatto in 5 minuti:

campione

E 'ben lungi dall'essere perfetto, ma mostra il concetto.

Ecco il codice sorgente:

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;
        }
}

Ecco un filo che può essere interessante e qui .

Altri suggerimenti

Come discusso nel esercitazione avrete bisogno sia un renderer per visualizzare il vostro valore e un editor per rilevare eventi dalla cella in fase di modifica. In questo esempio , il Component è un JCheckBox. Si noti che questo richiede un DataModel personalizzato che si estende AbstractTableModel per fornire il Class corretto per una data colonna. suggerimento Joonas' di utilizzare JSpinner è un buon uno che funziona bene.

Credo che è necessario creare un renderer di celle personalizzato se si desidera mostrare altro che il testo (o numeri) nella cella. Il lavoro del renderer di celle è quello di dipingere tutto ciò che è necessario mostrare nella cella.

Tabella Renderer documentazione .

Quindi, in questo caso si potrebbe creare un piccolo JPane che contiene il campo di testo e la piccola pulsanti + e - - o un solo un componente JSpinner, se non quello che vi serve. Un po 'complicato, di sicuro, ma dovrebbe essere possibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top