Aggiunta di pulsanti all'interno delle cellule di JTable insieme ai dati?
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 [-].
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:
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.