Frage

Ist es möglich, Tasten in der JTable -Zelle zusammen mit Daten hinzuzufügen? Ich versuche, eine Tabelle mit Spalten zu erstellen, die Daten (Nummer) aus der Datenbank anzeigen, und zwei Schaltflächen, um die Anzahl in derselben Zelle zu erhöhen/zu verringern.

| Id | Menge |
|06| 2 [+][-] |

Es wäre so etwas wie oben, wenn [+] [-] Schaltflächen sein würde. Wenn ich [+] drücke, ändert sich die Zahl beim Drücken [-] auf 3 und 1.

War es hilfreich?

Lösung

Ja, es ist möglich, obwohl es nicht einfach sein wird.

Sie müssen Ihren eigenen Brauch schreiben Zellenrenderer Und deine eigene Zellredakteur.

Dies ist eine Probe, die ich in 5 Minuten gemacht habe:

sample

Es ist alles andere als perfekt, zeigt aber das Konzept.

Hier ist der Quellcode:

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

Hier ist ein Thread, der sein kann interessant und hier.

Andere Tipps

Wie in der erläutert Lernprogramm Sie benötigen sowohl einen Renderer als auch einen Editor, um Ereignisse aus der zu bearbeitenden Zelle zu erkennen. In diesem Beispiel, das Component ist ein JCheckBox. Beachten Sie, dass dies einen Brauch erfordert DataModel Das erstreckt sich AbstractTableModel die richtigen liefern Class Für eine bestimmte Spalte. Joonas 'Vorschlag zu verwenden JSpinner ist gut, der gut funktioniert.

Ich denke, Sie müssen einen benutzerdefinierten Zell -Renderer erstellen, wenn Sie in der Zelle etwas anderes als Text (oder Zahlen) anzeigen möchten. Die Aufgabe des Zellenrenderers besteht darin, alles zu malen, was Sie in der Zelle zeigen müssen.

Sehen Tabelle Renderer -Dokumentation.

In diesem Fall können Sie also eine kleine JPane erstellen, die das Textfeld und die winzigen + und - Schaltflächen enthält - oder nur eine JSpinner -Komponente, falls Sie das benötigen. Ein bisschen knifflig, sollte aber möglich sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top