Wie kann man dieses "Table" Problem am besten löse

Status
Nicht offen für weitere Antworten.
L

LuMpeH

Gast
Hi!

Ich habe ein Problemchen. Ich beschreib mal kurz.
Ich habe eine Tabelle, diese soll farbige Rows haben können. Nun habe ich einen Cellrenderer geschrieben und diesem der Tabelle zugewiesen. Hier mein CellRenderer.

Code:
public class myCellRenderer extends DefaultTableCellRenderer{
    private Color color = new Color(240,240,240);
    private int RowToColor = -1;
    
    public void setRowToColor(int row) {
        RowToColor = row;
    }
    public void setColor(Color c){
        color = c;
    }
   
    public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        
        JLabel label = (JLabel) super.getTableCellRendererComponent(table, obj, isSelected,hasFocus, row, column);      
        if (RowToColor != -1 && row == RowToColor) {
            label.setOpaque(true);
            label.setBackground(color);
        }
        return label;
    }
    
    

}

zuweisen dann so
Code:
     ScanTableCellr = new myCellRenderer();
      JTableTabelle.setDefaultRenderer(Object.class, ScanTableCellr);

Nun arbeitet das Programm und fügt cirka jede sekunde eine neue Row zur Tabelle hinzu. Die Row wird dann je nach gewünschter Farbe gefärbt.
Nun kommt das Problem.
Die Farben werden nach ein paar Rows aufeinmal chaotisch. Aufeinmal ist alles rot z.B. oder grün... irgendwie komisches verhalten. Ich hab das gefühl der Renderer kommt durcheinander und färbtganz falsche Rows mit falschen farben. Also irgendwas stimmt da ganz und garnicht...
Wie kann man das besser realisieren?

Also ich möchte folgende Funktionalität: Das Programm scannt etwas und fügt das Ergebnis als Row dieser Tabelle hinzu. Und das Ergebniss soll eine bestimmte Farbe haben, z.b. rot (also die Row soll rot sein). Das muss nicht die Tabelle selbst wissen, sondern das Ergebnis "weiß" dass es rot sein muss :). Deshalb hab ich auch ne Methode "setColor()".
Das ganze soll auch nach eventuellen SortierAktionen erhalten bleiben (also die Färbung). Deshalb ist es glaub ich schlecht zu sagen, dass z.B. Ergebnis X ist in Row 5 und hat Farbe rot. Weil wenn man umsortiert ist z.B. Ergebnis X nicht mehr in Row 5 sondern in row 29.. Dann müsste row 29 Rot werden und Row 5 wieder weiß.

Ist blöd zu erklären.. aber ich hoffe jemand versteht mich.

Vielleicht noch zur Verdeutlichung, im TableModel rufe ich dann folgendes auf

Code:
cR = (myCellRenderer) table.getDefaultRenderer(Object.class);
cR.setColor(Color.GREEN);
cR.setRowToColor(table.getRowCount());
super.dataVector.add(otm.getTableVector()); //das hier ist das Ergebnis
fireTableStructureChanged();

Wie gesagt er färbt schon nur nicht richtig ...
Muss ich vielleicht explizit für JEDE Zelle einen eigenen Renderer haben?

Danke für die Hilfe!
 
B

Beni

Gast
Am Beispiel des Renderers:

Du kannst nicht wissen, für welche Zeile der Renderer als nächstes benutzt wird. Die Farbe müsstest du also irgendwie in dem Model speichern.

Da der Renderer das Model bekommt, kannst du dann direkt das Model nach der Farbe fragen.

Code:
public class ColoredTableModel extends ...{
  public Color getColor( int row ){
    // z.B. eine Liste mit allen Farben
    return irgendeineListe.get( row );
  }
}
Code:
public Component getTableCellRendererComponent(
    JTable table, Object obj, boolean isSelected,
    boolean hasFocus, int row, int column) { 
  Color c = ((ColoredTableModel)model).getColor( row );
  ...
}
 
G

Guest

Gast
@Beni

ich habs mal grad nach deine Methode probiert. Das klappt soweit echt gut, nur werden die Rows jetzt falsch gefärbt, wenn ich auf die Header klicke zum sortieren. Es bleiben immer die gleichen Rows mit den farben.
Das muss ich noch hinbekommen.
 
L

LuMpeh

Gast
@André

deine Version werd ich probieren falls das andere nicht klappt :).
Das war jetzt einfacher auszuprobieren, da es eigentlich nur ein paar Zeilen Änderung war :)
 
B

Beni

Gast
Du benutzt also Java 1.6?

Dann frag die JTable nach dem RowSorter ("getRowSorter"), und beim RowSorter benutzt du dann "convertRowIndexToModel" um das "row" in den unsortieren Zustand zurückzurechnen.
 

dark

Mitglied
Ja ich nutze Java 1.6 :)

Ok super, danke das werd ich direkt mal probieren :)

Und danke für die schnelle Hilfe !

PS: Wusste nicht dass ich hier schon registriert bin, nicht verwirren weil ich mit anderem Namen poste *g*
 

dark

Mitglied
Es funktioniert !

Vielen dank nochmal :)

Grüße
Alex

PS: Das Thema kann nun ein "Häkchen" bekommen. leider kann ich das nicht machen weil ich da noch mit meinem unregistrierten Nick gepostet hab. Ein Mod kann das sicherlich machen ..
 

André Uhres

Top Contributor
LuMpeh hat gesagt.:
@André
deine Version werd ich probieren falls das andere nicht klappt :).
Das war jetzt einfacher auszuprobieren, da es eigentlich nur ein paar Zeilen Änderung war :)
Der Nachteil beim Renderer: du musst in jedem Renderer die gleiche Anpassung wiederholen.

Man könnte z.B. einen Date- und einen Number-renderer benötigen.
Mit "prepareRenderer" werden dann die Zeilen gefärbt, ohne diese (und eventuell zukünftige) Renderer
anpassen zu müssen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Wie kommt dieses Ergebnis zu stande Allgemeine Java-Themen 15
M Warum hat Java dieses und jenes nicht... Allgemeine Java-Themen 8
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
H was ist den dieses zur Kompilierzeit und zur Laufzeit in Java? Allgemeine Java-Themen 3
Thallius Wie parse ich dieses Datum richtig? Allgemeine Java-Themen 5
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
O Compiler-Fehler Wie kompiliere ich dieses Alt-Projekt ? Allgemeine Java-Themen 9
D File mit Inhalt kopieren und dieses File dann neu erstellen ? Allgemeine Java-Themen 4
cedi int Zahl in ein ASCII zeichen umwandeln und dieses in ein externes Textfenster schreiben Allgemeine Java-Themen 6
T Wie intelligent ist dieses überschriebene .equals() ? Allgemeine Java-Themen 13
M Wie heißt denn dieses grafische Element ? Allgemeine Java-Themen 2
D wie gliedere ich dieses programm am besten? dringend! Allgemeine Java-Themen 3
B Wie heißt dieser kleine Typ links oben? Also dieses JavaVieh Allgemeine Java-Themen 5
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
D Möglichkeit mit GAE eine Table auszulesen und eine csv zu schreiben Allgemeine Java-Themen 22
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
C Wie kann man die IText Table Position bestimmen? Allgemeine Java-Themen 3
G Transaction Script, Table- Domain Model Allgemeine Java-Themen 2
F IText Table ohne Rand Allgemeine Java-Themen 5
D iText und Table.setTableFitsPage(); geht nicht Allgemeine Java-Themen 12
L Drag and Drop Table Allgemeine Java-Themen 9
E HashMap/Table sortiert nach nacheinander eingefuegten Elmeme Allgemeine Java-Themen 6
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben