Zellen in JTable auf Klick kurz markieren auf Klick

Status
Nicht offen für weitere Antworten.

anquijix

Mitglied
Tagwohl

Ich habe es hier mit einer überkomplexen Tabelle zu tun, die auf irgendwelche Weise zusammengebaut wird. Ich kann darin gewisse Zellen anklicken und damit deren Inhalt verändern oder ich kann Text in eine Zelle einfügen oder es geht ein Subfenster auf, wenn ich in die entsprechende Zelle klicke.

Nun ist es meine Aufgabe, die Zellen, die nur zum "Toggeln" angeklickt werden, kurz nach dem Klick zu umrahmen, färben, markieren oder so und darauf gleich wieder auf den alten Zustand bringen. Ich, bzw der Auftrag Gebende möchte das, um zu wissen, was er gerade angeklickt hat.

Für einen Fall funktioniert dies schon wunderbar. Nämlich bei den Zellen, bei denen ein Subfenster auf Klick aufgeht. Da setze ich die Zelle bspw. auf Schwarz, das Subfenster geht auf, ich bearbeite dort dies und das, und wenn ich es schliesse, wird die Zelle wieder in ihre Grundfarbe zurückgesetzt.

So ala:
Code:
cell.setBackground(Color.BLACK);
modalinternalframe.setVisible(true);
cell.setBackground(bg);

Auf ähnliche Weise wollte ich es auch bei den "Toggle-Zellen" machen. Ausser, dass ich eben hier kein Subfenster oder dergleichen öffne. Genau aus diesem Grund geht diese Vorgehensweise nicht wirklich, da es viel zu schnell geht, als dass es sichtbar wäre auf dem Schirm. Die Färbung findet wohl statt, aber ich krieg niemals etwas davon mit. Hab mir auch überlegt, einen kurzen wait einzubauen, aber das ist wohl überbeknackt, darum lass ichs ileber sein.

Hat jemand eine Idee, wie ich die kurze Färbung trotzdem hinkriege? Es würde schon so ein Rahmen reichen, der erscheint, wenn ich cell.setEditable mache. Nur möchte ich das Feld nicht editieren können, lediglich die Markierung soll stattfinden.

Hoffe, meine Problematik verständlich rübergebracht zu haben.

Hier noch ein Code-Schnipsel mit der Spalte "R" als Beispiel. Danke für Tipps.
Code:
 dm.setClickListener(new TableClickListener() {
        public void clicked(JTable table, TableCell cell, int row, int column) {
          String identifier = cell.getIdentifier();
          boolean hasAction = true;
                    

          // the other values
          String r = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 0)).getValue());
          String i = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 1)).getValue());
          String n = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 2)).getValue());
          String a = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 3)).getValue());
          String f = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 4)).getValue());
          TableCell codeCell = (TableCell) table.getValueAt(row, 5);
          String code = nullIfEmpty((String) codeCell.getValue());
          int methtypnr = (Integer) codeCell.
                  getAdditionalRowValue(ROWVAL_METHODETYPNR);
          String meth2 = nullIfEmpty((String) codeCell.
                  getAdditionalRowValue(ROWVAL_METHODENR2));
          String keim = nullIfEmpty((String) ((TableCell) table.
                  getValueAt(row, 10)).getValue());
          

          Color bg = cell.getBackground();            
          if (identifier.equals(TABLE_R)) {                        
            /* ************
             *  RRR
             *  R  R
             *  RRR
             *  R  R
             *  R  R
             ************ */
            // just ignore clicks on 'r'             
            if (hasAction) {
              cell.setBackground(Color.BLACK);
              //nachkontrMif.setVisible(true);
              cell.setBackground(bg);
            }
          }.....etc...
 

André Uhres

Top Contributor
Mit table.setSelectionBackground(..) kann man die Selektionsfarbe setzen. Ansonsten versteh ich dein Problem nicht wirklich.
 

kleiner_held

Top Contributor
Wenn ich das richtig verstehe willst du folgendes:
Nach einer Nutzeraktion soll eine Tabellenzelle eingefärbt werden und nach einem bestimmten Zeitraum (z.B. 10 Sekunden) soll die Einfärbung zurückgesetzt werden.
Während dieses Zeitraums kann man normal weiter arbeiten, andere Tabellenzellen anklicken usw...

kurz skizziert würde ich das so lösen:
Code:
cell.setBackground(Color.RED); // angklickte zelle martkieren
Thread t = new Thread()  // neuen Thread starten der nach 10 Sekunden zurückändert
{
    public void run() 
    {
        try
        {
            // 10 Sekunden warten
            sleep(10000);
        }
        catch ( InterruptedException e )
        {
        }
        // das Zurücksetzen als Runnable durch den AWT EventQueue ausführen lassen
        SwingUtilities.invokeLater(new Runnable()
        {
             public void run() 
             {
                 cell.setBackground(Color.WHITE);
             }
        });
    }
};
t.start();

Du musst noch das Tablecell Objekt richtig durchreichen, aber das Prinzip sollte deutlich werden. Dabei gibt es ein paar Randeffekte zu beachten, was soll passieren, wenn der Nutzer innerhalb der 10 Sekunden ein zweites mal in die Zelle klickt, kann der angelegte Thread die Programmterminierung blockieren, wirken sich die Threads negativ auf die Performance aus (wenn sehr oft neue Threads gestartet werden) usw. Möglich wäre auch genau einmal einen Deamonthread zu starten und die Aktionen für das Zurücksetzen mit Zeitstempel in eine Queue einzuordnen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
A Swing JTable Umgang mit Zellen AWT, Swing, JavaFX & SWT 2
S Swing Zeilenumbruch in JTable Zellen AWT, Swing, JavaFX & SWT 3
M Swing Jtable zellen zentrieren AWT, Swing, JavaFX & SWT 4
V JTable: Zugriff auf einzelne Zellen AWT, Swing, JavaFX & SWT 4
M JTable Zeilen und Zellen einfärben AWT, Swing, JavaFX & SWT 11
GUI-Programmer JTable - zentrierte Zellen AWT, Swing, JavaFX & SWT 2
B JTable Selektion von Zellen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing JTable Zellen intelligenter Zeilenumbruch AWT, Swing, JavaFX & SWT 4
K Swing JTable Editierfunktion für einzelne Zellen ausschalten AWT, Swing, JavaFX & SWT 3
X JTable Zellen nicht editierbar AWT, Swing, JavaFX & SWT 5
S Swing JTable - Editierung von Zellen abfangen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable (bestimmte Zellen umrahmen) AWT, Swing, JavaFX & SWT 8
T JTable Zellen Farbe AWT, Swing, JavaFX & SWT 13
N Swing JTable: Zellen verbinden AWT, Swing, JavaFX & SWT 11
N Zellen einer JTable unterschiedlich formatieren AWT, Swing, JavaFX & SWT 7
D Swing JTable, Zellen-Farbe über Koordinaten ändern AWT, Swing, JavaFX & SWT 9
J Swing JTable, eigener TableCellRenderer Keine Anzeige in den Zellen AWT, Swing, JavaFX & SWT 8
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
G JTable Multiple Row Header Example - Probleme mit der Höhe der Zellen AWT, Swing, JavaFX & SWT 4
C Swing JTable: Horizontale Linie bei einzelnen Zellen ausblenden AWT, Swing, JavaFX & SWT 5
C JTable: Alle selektierten Zellen abfangen AWT, Swing, JavaFX & SWT 13
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
F Text Vertical in Zellen von JTable AWT, Swing, JavaFX & SWT 3
B Swing Drag&Drop einzelner Zellen in einer JTable AWT, Swing, JavaFX & SWT 12
S Swing JTable Auswahl mehrerer Zellen mit STRG+Maus AWT, Swing, JavaFX & SWT 3
A Flexible JTable mit editierbaren Zellen,abhängig von Data AWT, Swing, JavaFX & SWT 2
C JTable und farbige Zellen AWT, Swing, JavaFX & SWT 5
R JTable: Zellen einer Spalte unterschiedlich befüllen AWT, Swing, JavaFX & SWT 2
R JTable: Zellen einer Zeile zusammenfassen? AWT, Swing, JavaFX & SWT 3
R JTable darstellen von leeren Zellen AWT, Swing, JavaFX & SWT 12
E Drag&Drop JTable; Renderer füllt alle Zellen AWT, Swing, JavaFX & SWT 10
R JTable updatePaint() angabe der geänderten Zellen AWT, Swing, JavaFX & SWT 3
R JTable mehrere Zellen mit Shift selektieren AWT, Swing, JavaFX & SWT 2
R JTable einzelne Zellen selektieren AWT, Swing, JavaFX & SWT 7
R JTable - Rendern der einzelnen Zellen AWT, Swing, JavaFX & SWT 3
X in JTable nur einige Zellen editierbar machen AWT, Swing, JavaFX & SWT 2
G JTable: Spalten & Zellen fixieren wie in Excel AWT, Swing, JavaFX & SWT 4
G JTable Zellen makieren AWT, Swing, JavaFX & SWT 2
M JTable Zelle ändern -> andere Zellen mit ändern AWT, Swing, JavaFX & SWT 5
J JTable Zellen und Header AWT, Swing, JavaFX & SWT 2
E JTable; DefaultTableCellRenderer. Zellen farbig befüllen. AWT, Swing, JavaFX & SWT 5
E JTable-während der Einfügezeit der Zellen in die Table AWT, Swing, JavaFX & SWT 2
H JTable Text aus mehreren Zellen in einer Spalte kopieren? AWT, Swing, JavaFX & SWT 3
M [Swing] Kalender mit JTable / Einfärben von Zellen AWT, Swing, JavaFX & SWT 10
A JTable, mehrere Zellen markieren AWT, Swing, JavaFX & SWT 3
L Again: In JTable bestimmte Zellen färben AWT, Swing, JavaFX & SWT 12
M CellEditor für individuelle Zellen in JTable AWT, Swing, JavaFX & SWT 3
G JTable(Zellen) und JPanel AWT, Swing, JavaFX & SWT 2
D Im JTable bei einzelnen Zellen die Farbe ändern AWT, Swing, JavaFX & SWT 3
G Rowspan (Zellen verbinden) in JTable? AWT, Swing, JavaFX & SWT 3
R JTable Zellen markieren AWT, Swing, JavaFX & SWT 3
R JTable, automatischer resize der Zellen nach einer Eingabe AWT, Swing, JavaFX & SWT 4
T JTable, Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 23
I einzelne Zellen bei JTable markieren AWT, Swing, JavaFX & SWT 3
M JTable und Farbe von Zellen AWT, Swing, JavaFX & SWT 2
G Zellen in JTable alphabetisch sortieren AWT, Swing, JavaFX & SWT 13
N JTable - Problem mit markieren von Zellen AWT, Swing, JavaFX & SWT 3
B JTable-Zellen einfärben AWT, Swing, JavaFX & SWT 6
W JTable Zellen verbinden AWT, Swing, JavaFX & SWT 2
S JTable Zellen ändern AWT, Swing, JavaFX & SWT 3
S Mehrere Tabellen Zellen gleichzeitig färben AWT, Swing, JavaFX & SWT 5
I JavaFX Zellen in Tableview editieren AWT, Swing, JavaFX & SWT 0
B JavaFX TableView-Zellen sollen automatisch so groß wie der größte Inhalt sein AWT, Swing, JavaFX & SWT 6
J Tableview - kann man mit Enter die Zellen wechseln AWT, Swing, JavaFX & SWT 1
S JavaFX GridPane Zellen Seitenverhätnis passend ändern mit der Stage AWT, Swing, JavaFX & SWT 0
E JavaFX TableView mit Zeilenumbruch in Zellen AWT, Swing, JavaFX & SWT 5
L Swing CellRenderer für einzelne Zellen? AWT, Swing, JavaFX & SWT 5
J JavaFX Bestimmte Zellen im TableView ändern (Farbe und Text) AWT, Swing, JavaFX & SWT 1
J Zellen in JavaFx einfärben funktioniert nicht AWT, Swing, JavaFX & SWT 1
D Swing Mit TableCellRenderer einzelne Zellen markieren AWT, Swing, JavaFX & SWT 3
J CellEditorListener wird für ALLE Zellen ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing CellEditor für einzelne Zellen AWT, Swing, JavaFX & SWT 2
E Swing zellen fixen AWT, Swing, JavaFX & SWT 7
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
C GridBagLayout Zellen verbinden AWT, Swing, JavaFX & SWT 13
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
S Übernehmen von Inhalten aus Zellen in JTables ohne Return AWT, Swing, JavaFX & SWT 7
G nicht editierbare Zellen AWT, Swing, JavaFX & SWT 15
T Zellen editierbar oder nicht AWT, Swing, JavaFX & SWT 6
T JTree: Beschriftung der Zellen AWT, Swing, JavaFX & SWT 3
W Zellen Inhalt beim editieren markieren AWT, Swing, JavaFX & SWT 2
C Zellen editieren AWT, Swing, JavaFX & SWT 4
J JTabel: TableHeader und Zellen Problem AWT, Swing, JavaFX & SWT 2
F Zellen über eine Grafik legen AWT, Swing, JavaFX & SWT 7
J [SWT] alle Zellen in einem Tree einzeln selektieren AWT, Swing, JavaFX & SWT 2
B einzelne Zellen scrollbar machen innerhalb einer Tabelle AWT, Swing, JavaFX & SWT 3
J Zellen editieren ausschalten AWT, Swing, JavaFX & SWT 2
D JTree - Größe der Zellen anpassen AWT, Swing, JavaFX & SWT 8
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben