JTable darstellen von leeren Zellen

Status
Nicht offen für weitere Antworten.
R

redbomber

Gast
Hi zusammen, ich brauche mal wieder eure Hilfe.

Ich besitze eine LinkedList<Probe> von Objekten (Probe), die ich in einer JTable darstelle.
Jede Probe befindet sich in einer Zelle.
Die Proben beistzen Positionen (sind nach diesen auch sortiert).
Anhand der Positionen werden die Proben auf die Zellen aufgeteilt.

Bisher stelle ich alle Proben direkt aufeinander in den Zellen dar. Nun gibt es aber zwischen zwei Proben auch Lücken.

Z.B: probe03 an Position 1007
probe04 an Position 1012

Nun möchte ich die Lücken in der Tabelle auch noch darstellen, also befinden sich dann zwischen Zellen von probe03 und probe04 view "leere" Zellen (Zellen in denen sich keine Proben befinden).



Ich weiss zu Beginn wieviele Zellen es ingesamt gibt, also weiss dann auch wieviele mit Proben gefüllt sind und wieviele leer sind.


Wie aber befülle ich die Tabelle?
Normal hole ich mir das Objekt wie folgt im TableModel implementiert:

Code:
public Object getValueAt(int row, int col) {
       Object object = null;

	int indexOfProbe = -1;
        // Hier berechne ich den Index der Probe. Einfach zählen um die wievielte Zelle es sich handelt.
	indexOfProbe = tableManager.getProbeId(row, col);

	Probe probe = tableManager.getProbe(indexOfProbe); //hier greif ich auf die LinkedList<Probe> zu
	object = pb.getValue();

	} 
// Entweder gebe ich den Wert zurück, wenn sich in der Zelle ein Objekt befindet, oder ich gebe "-" zurück
return (object == null) ? "-" : object;
}

Diese Implementierung funktioniert aber nur, wenn ich alle Zellen direkt nacheinander befülle, ich darf also keine "leere" Zellen zwischendrin besitzen.


Möchte ich das ganze auch mit den "leeren" Zellen dazwischen realisieren, müsste ich ja einfach ebenfalls "-" zurückgeben.

Also bisher muss ich ja einfach zählen in der wievielten Zelle ich bin, dann hab ich den Index der Probe von der ich den Wert holen kann.
Aber mit den "leeren" Zellen geht das dann ja nicht mehr so.

Habt ihr mir eine Idee?
 
R

redbomber

Gast
Ich könnte mir einen int[] erzeugen.

Wenn getValueAt() aufgerufen wird, dann berechne ich die Position in dem Array.
ist der Wert <0 weiss ich dass es sich um eine Lücke handelt.
ist der Wert >0, dann handelt es sich um den INdex der Probe, mit dem ich wiederum die Probe aus der LinkedList<Probe> heraushole.

Ich müsste bei der Initialisierung einmal diesen Array erzeugen. Allerdings kann der Array gut 1.000.000 Zellen enthalten. Ob das dann noch schnell genug ist? Und der Array belegt ja wieder eine Menge an Speicher.
Was meint ihr, ist das ein sinnvoller Ansatz?
 

hdi

Top Contributor
Nein :bae:

(Ich bin leider grad beschäftigt, dir wird hier sicherlich gleich jemand helfen, aber so ein riesen
Array kannst du sofort ausschließen)
 

Ebenius

Top Contributor
Du meinst, da können Lücken sein. Wie kommt es zu solchen Lücken? Soll ein Nutzer "Hier Lücke einfügen" klicken? Oder gibt es eine Regel "alle 24h 10 neue Lücken zufällig verteilen"? Oder ergibt sich das aus den Proben, in etwa "zwischen Proben die mit 'A' anfangen und Proben die mit 'B' anfangen gibt's immer eine Lücke"? Oder, oder, oder...

Davon hängt natürlich maßgeblich die Herangehensweise ab.

[ edit ] Darauf wollte ich ja vorhin schon hinweisen: Eine LinkedList ist genau die falsche Listen-Implementation, um mit einem Index darauf zuzugreifen. Du willst eine Million Zeilen, dann heißt das, das 500.000te Element bekommst Du mit list.get(500000); durch 499.999maliges Vorwärtslaufen. Nich so gut. Wie wäre denn eine ArrayList?
 
R

redbomber

Gast
Also das ganze wird eine Erweiterung einer bestehenden Software.
Die Daten werden von der Software gesammelt und ich erhalte diese als LinkedList<Probe>. Intern kann ich diese natürlich in einem anderen Datentyp intern speichern.


Die JTable kann man sich bei mir wie eine Karte vorstellen. Jede einzelne Zelle ist ein Teil dieser Karte.
An vielen Positionen besitzte ich Informationen, an diesen werden dann die Proben dargestellt (Zelle bekommt spezielle Farbe). An aber noch viel mehr Positionen besitze ich einfach keine Informationen. Diese Zellen möchte ich dann zb. weiss machen.

Wenn ich jetzt die Tabelle aufbaue, muss ich ja für jede Zelle wissen ob ich da eine Information besitze -> dann die passende Probe suchen und darstellen.
Oder ob die Zelle ohne Information ist -> also einfach weiss lassen.

Die Zellen ohne Informationen machen bestimmt 2/3 der Zellen aus (diese müssen aber angezeigt werden)
 

Ebenius

Top Contributor
Sollte dann nicht Dein TableManager wissen, wo sich die noch nicht probierten Zellen befinden? An diesen Stellen sollte er dann null zurückliefern.
 
R

redbomber

Gast
also du meinst mein TableModel?
Ja genau, die Methode
Code:
public Object getValueAt(int row, int col)
ruft er ja für jede Zelle auf.
Aber in dieser Methode muss ich ja irgendwie wissen auf welche Daten ich zugreifen muss.
 

Ebenius

Top Contributor
Anonymous hat gesagt.:
also du meinst mein TableModel?

Nö. Ich meine den TableManager... Oder was auch immer das für eine Klasse ist, die diese Zugriffe bedient:
Code:
indexOfProbe = tableManager.getProbeId(row, col); 

Probe probe = tableManager.getProbe(indexOfProbe); //hier greif ich auf die LinkedList<Probe> zu 
object = pb.getValue();

Ebenius
 

redbomber

Bekanntes Mitglied
hmm,
also das macht bei mir das TableModel. Dieses legt die Anzahl der Spalten und Zeilen der Tabelle fest und liest die Werte aus den Zellen aus.
Wenn ich mir eine Tabelle anzeigen lassen möchte, dann ruft das TableModel für jede Zelle die getValueAt(row,col) Methode auf.
 

redbomber

Bekanntes Mitglied
AHSO!!!
Sorry!
Ja also hinter dem tableManager versteckt sich nur eine weitere Klasse, welche spezielle Methoden anbietet.

Code:
indexOfProbe = tableManager.getProbeId(row, col);
liefert mir für die row/col den index der Probe für die aktuelle Zelle.
-> hier berechne ich aber nur in der wievielten Zelle ich gerade bin, damit ich somit den Index erhalte.

Code:
tableManager.getProbe(indexOfProbe)
liefert mir dann für diesen Index die Probe

Hab diese Funktionen in meinen tableManager verpackt, da ich die auch an anderer Stelle brauche.
 

Ebenius

Top Contributor
Naja, aber dann sollte der TableManager doch das Wissen haben, welche Zelle keine Probe hat, oder?
 

redbomber

Bekanntes Mitglied
also meinen TableManager können wir eigentlich ignorieren.
Meine Tabelle hat einen speziellen Aufbau, zb. ist die erste Spalte nicht mit Werten belegt, ist sowas wie eine Legende.
Weiter habe ich immer wieder eine Zeile von Zellen als Platzhalter eingefügt (muss so sein)
Also macht mein Table Manager nichts anderes als aus (row,col) die ganzen Platzhalterzellen abzuziehen.
-------------------------------------------------------------------------------------------------------------------------------------------

Vielleicht kann ich dir kurz meinen neuen Ansatz vorstellen:

Zu beginn beitzte ich eine LinkedList<Probe> die ich auf die Tabelle anhand der Positionen der Proben verteilen muss.

Mit einer HashMap<Position,Probe> kann ich so etwas realisieren. DIese HashMap muss ich zu beginn einmal initialisieren.

Wenn nun das TableModel Werte aus den Zellen ausliesst, muss ich einfach nur prüfen ob bei der eben betrachtete Zelle (z.B. Zelle nummer 128) für die Position 128 ein eintrag in der HashMap vorliegt.

Falls ja, dann wird die Zelle farblich dargestellt, falls nein, dann hab ich eine weisse Zelle.


Das funktioniert soweit!


Aber:
- Wie schnell wird das ganze werden wenn ich z.b. 200.000 Einträge in der Zelle habe?
- Was mache ich, wenn eine Probe nicht nur 1 Position groß ist, sondern z.B. 10 Positionen lang?
 

redbomber

Bekanntes Mitglied
Also der Ansatz mit der Heatmap geht sogar.
Ebenfalls wenn bei mir eine Probe in mehreren Zellen vorkommt.
Als Key verwende ich dabei immer die Position der Probe und der Value ist dann die Probe.


Das befüllen der HeatMap bei der Initialisierung dauert allerdings etwa eine Minute, bei 220.000 Proben.
Und den Arbeitsspeicher, den ich der JVM zur Verfügung gestellt habe, knickt von 1400 MB auf 300 MB ein. :(
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
M Jtable besser darstellen AWT, Swing, JavaFX & SWT 6
J jTable anders darstellen AWT, Swing, JavaFX & SWT 4
M Swing XML Datei in JTable darstellen + verändern AWT, Swing, JavaFX & SWT 3
C JTable: Mehrere Farben in einer Zelle darstellen AWT, Swing, JavaFX & SWT 10
S Swing JTable: in erster Spalte Image darstellen AWT, Swing, JavaFX & SWT 30
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
R JTable Darstellen der selektierten Zelle braucht lange AWT, Swing, JavaFX & SWT 7
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
G Icon und Text in JTable darstellen AWT, Swing, JavaFX & SWT 3
M JTable text zentriert darstellen AWT, Swing, JavaFX & SWT 5
$ JTree in JTable darstellen und selectieren AWT, Swing, JavaFX & SWT 13
O Dateien aus Verzeichnis filtern und in JTable darstellen AWT, Swing, JavaFX & SWT 3
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
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2
T Swing JTable auslesen und befüllen AWT, Swing, JavaFX & SWT 8
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
J JTable und Suchlogik AWT, Swing, JavaFX & SWT 4
Viktim Swing JTable mit Tab verlassen AWT, Swing, JavaFX & SWT 1
F Swing Spaltenbreite einer Column eines JTable auslesen AWT, Swing, JavaFX & SWT 5
Viktim Swing JTable Mit Tab druch Zeilen Wechseln AWT, Swing, JavaFX & SWT 5
Thallius Warum refrehsed mein JTable nicht? AWT, Swing, JavaFX & SWT 5
Ghostman1711 Hinzufügen ausgewählter Dateinen des Filechoosers zu einem JTable AWT, Swing, JavaFX & SWT 9
S Swing JTable - Einzelne Rows einfärben AWT, Swing, JavaFX & SWT 11
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
K JTable getValueAt() klappt nicht immer AWT, Swing, JavaFX & SWT 1
K JTable in extra Klasse, Zugriff in einer anderen klasse nicht möglich AWT, Swing, JavaFX & SWT 26
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
P JTable - bei Eingabe Selektion AWT, Swing, JavaFX & SWT 0
P Fokus auf Zelle in JTable AWT, Swing, JavaFX & SWT 1
S Swing Deselektion in JTable verhindern AWT, Swing, JavaFX & SWT 0
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
N Swing Print JTable mit AbstractTableModel AWT, Swing, JavaFX & SWT 1
Ananaskirsche Swing jTable Reihen zuviel eingefügt AWT, Swing, JavaFX & SWT 12
P im JTable die Schriftfarbe ändern AWT, Swing, JavaFX & SWT 19
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
S Dreiecke in bestimmte Zellen einer JTable AWT, Swing, JavaFX & SWT 9
LexeB4F Zelle in JTable gezielt einfärben AWT, Swing, JavaFX & SWT 4
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
D Swing JTable Renderer Grafikfehler AWT, Swing, JavaFX & SWT 0
K Swing JTable mit ImageIcon und Text in einer Zelle AWT, Swing, JavaFX & SWT 1
M Swing JTable GroupableHeader Background Color AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben