Question

Est-il possible d'ajouter des boutons à l'intérieur de la cellule JTable ainsi que des données? Ce que je suis en train de faire est de créer une table avec des colonnes qui affichent des données (nombre) de la base de données, et deux boutons pour augmenter / diminuer le nombre dans la même cellule.

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

ce serait quelque chose comme ci-dessus avec [+] [-] boutons étant. Alors, quand j'appuyez sur [+], le nombre passera à 3 et 1 si la touche [-].

Était-ce utile?

La solution

Oui, il est possible, bien qu'il ne sera pas facile.

Vous devez écrire votre propre coutume CellRenderer et vos propres .

Ceci est un exemple que j'ai fait en 5 minutes:

échantillon

Il est loin d'être parfait, mais montre le concept.

Voici le code source:

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

Voici un fil qui peut être intéressant et ici .

Autres conseils

Comme indiqué dans le tutoriel vous aurez besoin à la fois pour afficher un moteur de rendu votre valeur et un éditeur pour détecter des événements de la cellule en cours d'édition. Dans cet exemple , le Component est un JCheckBox. Notez que cela nécessite un DataModel personnalisé qui étend AbstractTableModel pour fournir la Class correcte pour une colonne donnée. La suggestion de Joonas d'utiliser JSpinner est un bon qui fonctionne bien.

Je pense que vous devez créer une CellRenderer personnalisée si vous voulez montrer quoi que ce soit d'autre que du texte (ou chiffres) dans la cellule. Le travail de la cellule est de peindre renderer tout ce que vous devez montrer dans la cellule.

Voir Tableau Renderer Documentation .

Donc, dans ce cas, vous pouvez créer un petit JPane qui contient le champ texte et le minuscule boutons + et - - ou juste un composant JSpinner, si ce que vous avez besoin ne. Un peu délicat, bien sûr, mais devrait être possible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top