SWT Table Selection Color +Focus Out

lumo

Top Contributor
Hallo,

Ich habe folgendes problem
ich habe in meiner rcp mehrere views in denen ich daten darstelle.
zb habe ich in einem view eine listendarstellung und in einem andere die selbe liste auf einer landkarte verzeichnet, in einem dritten view habe ich den derzeitig ausgewählten datensatz mit detailinformationen.
nun habe ich allerdings das problem, dass wenn ich einen datensatz auf der mappe auswähle ich zwar den datensatz auf meiner tabelle markiert bekomme, ABER
das teil ist fast nicht sichtbar, da die hintergrundfarbe für die selection in einem leicht dezenten hellst-grau ist...

kann man die farbe ändern?

konnte mit google (meinem freund) nur die hintergrundfarbe der selection finden....

oder MUSS ich das per backgroundColor händisch machen...
@see Color cells and rows in SWT table : TableSWT JFace EclipseJava
 
G

Gast2

Gast
Zeig mal ein Bild check gar net was du meinst...

Wenn du in einer Spalte die Hintergrund Farbe ändern willst musst du in deinem LabelProvider glaub IColorProvider implmenetieren...
 
Zuletzt bearbeitet von einem Moderator:

lumo

Top Contributor
links die liste & rechts die mappe,
man sieht es kaum, aber der zweite eintrag in der liste ist selektiert.
wenn ich den focus auf die liste gebe, sieht man es hervorragend mit dunkelblau (will den focus aber nicht in den listen-view geben...)
 

Anhänge

  • table_sample.jpg
    table_sample.jpg
    100,1 KB · Aufrufe: 49
G

Gast2

Gast
Ah okay verstehe was du meinst... Woran es liegt hast du richtig gesagt weil deine andere view den focus hat.
Mhm ist es notwendig dass du dafür 2 views brauchst? Könntest die Informationen auch in eine view packen?

Evt. findest du hier was
Eclipse Corner Article: Custom Drawing Table and Tree Items

EDIT: Damit gehts aber beachte den Kommentar...

Java:
				final Color red = display.getSystemColor(SWT.COLOR_RED);
				final Color yellow =  display.getSystemColor(SWT.COLOR_YELLOW);
		/*
		 * NOTE: EraseItem is called repeatedly.  Therefore it is critical
		 * for performance that this method be as efficient as possible.
		 */
		tableViewer.getTable().addListener(SWT.EraseItem, new Listener() {
			public void handleEvent(Event event) {
				event.detail &= ~SWT.HOT;
				if ((event.detail & SWT.SELECTED) == 0) return; /* item not selected */
				int clientWidth = tableViewer.getTable().getClientArea().width;
				GC gc = event.gc;

				Color oldForeground = gc.getForeground();
				Color oldBackground = gc.getBackground();
				gc.setForeground(red);
				gc.setBackground(yellow);
				gc.fillGradientRectangle(0, event.y, clientWidth, event.height, false);
				gc.setForeground(oldForeground);
				gc.setBackground(oldBackground);
				event.detail &= ~SWT.SELECTED;
			}
		});
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Ich denke mal du willst sowas erreichen
Java:
		/*
		 * NOTE: EraseItem is called repeatedly.  Therefore it is critical
		 * for performance that this method be as efficient as possible.
		 */
		tableViewer.getTable().addListener(SWT.EraseItem, new Listener() {
			Color background;
			Color foreground;
			
			public void handleEvent(Event event) {
				event.detail &= ~SWT.HOT;
				if ((event.detail & SWT.SELECTED) == 0) return; /* item not selected */
				int clientWidth = tableViewer.getTable().getClientArea().width;
				GC gc = event.gc;
				if(tableViewer.getTable().isFocusControl()){
					background = gc.getBackground();
					foreground = gc.getForeground();
				}
				Color oldForeground = gc.getForeground();
				Color oldBackground = gc.getBackground();
				gc.setBackground(background);
				gc.setForeground(foreground);
				gc.fillRectangle(0, event.y, clientWidth, event.height);
				gc.setBackground(oldBackground);
				gc.setBackground(oldForeground);
				event.detail &= ~SWT.SELECTED;
			}
		});
 

lumo

Top Contributor
lol
hast du den code mal getestet?
wenn ich den listener adde dann fährt avaw mit 99% hoch und mein system ist so ausgelastet dass ich erst nach 10 minuten den prozess kilen kann... (darum auch erst etzt die antwort! ;) )
 
G

Gast2

Gast
lol
hast du den code mal getestet?
wenn ich den listener adde dann fährt avaw mit 99% hoch und mein system ist so ausgelastet dass ich erst nach 10 minuten den prozess kilen kann... (darum auch erst etzt die antwort! ;) )

Bei wieviel Einträgen in der Tabelle?

Also bei 10000 Einträge gibt es bei mir keine Probleme, du musst halt in deinem TableViewer SWT.Virtual eintragen...
 
Zuletzt bearbeitet von einem Moderator:

lumo

Top Contributor
hatte nur 25 einträge, allerdings hängt er sich schon auf, wenn noch nicht mal einer drin ist...
ich probiers nochmal...
 

lumo

Top Contributor
faszinierend.

vor deinem code:
alles läuft normal
mit deinem code
alles stürzt ab.
dein code wieder raus.
stürzt noch immer ab...

wtf?!
 

lumo

Top Contributor
Hab ein revert aus meinem svn gemacht und jetzt klapps wieder... Werde deinen Code am Freitag nocheinmal einbauen...
 

lumo

Top Contributor
no, nachdem ich jetzt den bug endlich los bin...
zurück zum thema hier...

Java:
java.lang.IllegalArgumentException: Argument cannot be null
und zwar passiert das in zeile:
Java:
gc.setBackground(background);

grund, ist... dass die tabelle noch nie focus hatte... (ich kann einen default wert einstellen
Java:
			Color background = new Color(Display.getDefault(), 0, 0, 0); // back
			Color foreground = new Color(Display.getDefault(), 255, 255, 255); // white
dann klappts, allerdings... wie bekomme ich die korrekten farben?
Java:
			Color background = viewer.getTable().getBackground();
			Color foreground = viewer.getTable().getForeground();
liefert nicht die korrekten retour... (wahrscheinlich weil es die derzeitigen zurückgibt, und nicht die, der selection...)
 

lumo

Top Contributor
hab die lösung selbst gefunden!

Java:
/*
		 * NOTE: EraseItem is called repeatedly. Therefore it is critical for
		 * performance that this method be as efficient as possible.
		 */
		viewer.getTable().addListener(SWT.EraseItem, new Listener() {
			Color background = Display.getDefault().getSystemColor(SWT.COLOR_LIST_SELECTION);
			Color foreground = Display.getDefault().getSystemColor(SWT.COLOR_LIST_FOREGROUND);

			public void handleEvent(Event event) {
				event.detail &= ~SWT.HOT;
				if ((event.detail & SWT.SELECTED) == 0)
					return; /*
							 * item not selected
							 */
				int clientWidth = viewer.getTable().getClientArea().width;
				GC gc = event.gc;
				Color oldForeground = gc.getForeground();
				Color oldBackground = gc.getBackground();
				gc.setBackground(background);
				gc.setForeground(foreground);
				gc.fillRectangle(0, event.y, clientWidth, event.height);
				gc.setBackground(oldBackground);
				gc.setBackground(oldForeground);
				event.detail &= ~SWT.SELECTED;
			}
		});
 
G

Gast2

Gast
Ja klar wenn deine Table nie den Focus bekommt, dann ists klar aber ich wusste auch nimmer wie man die Selektion Farbe bekommt ;) aber hast ja selber rausbekommen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
D Selection SWT Table AWT, Swing, JavaFX & SWT 5
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
J Anbindung Textfeldklasse an Table funktioniert nicht AWT, Swing, JavaFX & SWT 3
A JavaFX Daten in eine HTML-Table mit JS schreiben AWT, Swing, JavaFX & SWT 3
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14
B JavaFX JavaFX Table gespeichertes Wert auswählen/anvisieren AWT, Swing, JavaFX & SWT 3
C TableModel zugehörige Table ermitteln AWT, Swing, JavaFX & SWT 3
T Table Renderer AWT, Swing, JavaFX & SWT 2
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
E JavaFX Von der Table-Cell zur Row AWT, Swing, JavaFX & SWT 0
A JavaFX Table Delete Row AWT, Swing, JavaFX & SWT 5
D JavaFX Table Filter AWT, Swing, JavaFX & SWT 4
R Swing JTable : Header der Spalten ergänzen mit caption (wie bei html-table) AWT, Swing, JavaFX & SWT 2
I JTable: Doppelklick auf Table soll neues Fenster öffnen und Daten aus JTable anzeigen AWT, Swing, JavaFX & SWT 4
J JTabbedPane: table in new tab: tooltip benutzt die column-widths von table in erstem geöffneten tab AWT, Swing, JavaFX & SWT 17
G Border der Komponente bei Table CellRenderer überschreiben AWT, Swing, JavaFX & SWT 0
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
T SWT checkbox in table AWT, Swing, JavaFX & SWT 6
C JTable Drag and Drop von Zeilen innerhalb einer Table AWT, Swing, JavaFX & SWT 2
Z JavaFX Table mit MenuButton AWT, Swing, JavaFX & SWT 6
T SWT Table (mit Spinner Spalte) Daten auslesen AWT, Swing, JavaFX & SWT 4
E extended Swing Table AWT, Swing, JavaFX & SWT 2
J Einträge aus Table löschen ohne Exception AWT, Swing, JavaFX & SWT 6
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
E SWT Popupmenu auf der Überschrift eines swt.widgets.Table verhindern? AWT, Swing, JavaFX & SWT 3
Nicklas2751 Table View zeigt keinen Inhalt nur leere Zeilen AWT, Swing, JavaFX & SWT 2
reibi SWT SWT - Table AWT, Swing, JavaFX & SWT 8
A Swing JButton in einer Table Cell AWT, Swing, JavaFX & SWT 9
lumo SWT JFace Databinding +Custom Table AWT, Swing, JavaFX & SWT 2
M SWT - Table deselecten AWT, Swing, JavaFX & SWT 2
R SWT | Table | Zeilenkopf AWT, Swing, JavaFX & SWT 2
M SWT Table disabled und Scrollbar enabled AWT, Swing, JavaFX & SWT 11
C [SWT] Widget Table verliert nach Sortierung farbige / eingefärbter Background / Zellen AWT, Swing, JavaFX & SWT 3
L Inhalt einer table löschen AWT, Swing, JavaFX & SWT 2
L Jbutton in table AWT, Swing, JavaFX & SWT 2
S SWT Maximum an Items in Table? AWT, Swing, JavaFX & SWT 2
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
Q SWT Mindetsgröße für Table AWT, Swing, JavaFX & SWT 7
1 Swing manual resize table column to min size AWT, Swing, JavaFX & SWT 2
hdi SWT SWT Table: 2 kleine Probleme AWT, Swing, JavaFX & SWT 4
S SWT Table Größen verändern AWT, Swing, JavaFX & SWT 10
lumo SWT Table und Klassen AWT, Swing, JavaFX & SWT 14
lumo SWT Table CellEditor - knifflig AWT, Swing, JavaFX & SWT 35
M SWT Table mit Columns und Items AWT, Swing, JavaFX & SWT 3
L Java Table AWT, Swing, JavaFX & SWT 4
F Swing J(X)Table Spalten umsortieren NUR im View (Wie finde ich eine Spalte nach Name?) AWT, Swing, JavaFX & SWT 3
A SWT Table mit Bildern und Checkboxes AWT, Swing, JavaFX & SWT 4
A SWT Table hat keine Scrollbar AWT, Swing, JavaFX & SWT 12
A SWT Table clearAll() und zurücksetzen. AWT, Swing, JavaFX & SWT 3
K SWT Table Modell / Datenmodell AWT, Swing, JavaFX & SWT 14
S Table oder TableModel so ueberschreiben, dass Columns minimale Breite haben? AWT, Swing, JavaFX & SWT 2
T SWT - Table Events AWT, Swing, JavaFX & SWT 3
B SWT - Drag & Drop innerhalb einer Table AWT, Swing, JavaFX & SWT 3
T Fokus auf CB in Table mit beliebiger Taste AWT, Swing, JavaFX & SWT 12
S swt table mit checkboxen: wie nachträglich im code setzen? AWT, Swing, JavaFX & SWT 6
S Seltsam: SWT Table zeigt keine Scrollbar an AWT, Swing, JavaFX & SWT 12
G SWT-Table sortieren AWT, Swing, JavaFX & SWT 12
T Input-Check bei Textfeldern in Table AWT, Swing, JavaFX & SWT 5
G SWT Table Controll AWT, Swing, JavaFX & SWT 7
L SWT-Table: Datum ausgeben? AWT, Swing, JavaFX & SWT 5
G Table in SWT AWT, Swing, JavaFX & SWT 2
S Table Row per Drag and Drop in andere Table schieben? AWT, Swing, JavaFX & SWT 14
S SWT Table - Wie Columns hinzufügen / entfernen AWT, Swing, JavaFX & SWT 3
K javax.swing.table.TableRowSorter AWT, Swing, JavaFX & SWT 13
I JComboBox in Table AWT, Swing, JavaFX & SWT 4
G wo wird die table mit daten gefüllt? oô AWT, Swing, JavaFX & SWT 4
S SWT Drag&Drop / Table AWT, Swing, JavaFX & SWT 9
E JTable-während der Einfügezeit der Zellen in die Table AWT, Swing, JavaFX & SWT 2
S table - combobox AWT, Swing, JavaFX & SWT 7
D SWT Table AWT, Swing, JavaFX & SWT 5
P Table Layout remove()? AWT, Swing, JavaFX & SWT 2
W Zeile in Table (SWT) selektieren und auslesen AWT, Swing, JavaFX & SWT 4
G Dringend ! SWT-Table übernimmt Änderung nicht AWT, Swing, JavaFX & SWT 2
L Multiline Table AWT, Swing, JavaFX & SWT 3
R SWT: Icons im Table vor den Einträgen AWT, Swing, JavaFX & SWT 3
T mit rechter maustaste Table row selektieren AWT, Swing, JavaFX & SWT 2
F Zeilenhöhe bei SWT Table AWT, Swing, JavaFX & SWT 3
S Nochmal Spaltenbriete im Table AWT, Swing, JavaFX & SWT 2
G mal wieder table. AWT, Swing, JavaFX & SWT 3
V SWT Table mit SWT.CHECK AWT, Swing, JavaFX & SWT 2
P SWT table updaten AWT, Swing, JavaFX & SWT 7
S Frage zu Table(Column)Model AWT, Swing, JavaFX & SWT 3
J ScrollPanel mit 2 Table`s AWT, Swing, JavaFX & SWT 5
J Table Model AWT, Swing, JavaFX & SWT 2
J Abstract Table Model AWT, Swing, JavaFX & SWT 7
T in einer Table soll jede zweite Zeile markiert werden AWT, Swing, JavaFX & SWT 3
E Inhalt einer Zelle eine Table in ein TextField bekommen AWT, Swing, JavaFX & SWT 24
Salo JTabel Selection listener Bsp. AWT, Swing, JavaFX & SWT 5
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
S Zwei JTree, ein Model, bei Selection im ersten JTree soll der zweite die Inhlate anzeigen AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
M Swing JTree: Wie kann ich die Hintergrundfarbe der selection ändern?!?! AWT, Swing, JavaFX & SWT 7
J Sinn eines Selection Listener AWT, Swing, JavaFX & SWT 5
S SWT Enable Selection AWT, Swing, JavaFX & SWT 11
B ButtonGroup mit mehr als einer Selection AWT, Swing, JavaFX & SWT 2
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
H JList: Selection-Border entfernen AWT, Swing, JavaFX & SWT 2
P SWT Tree - Keine Selection zulassen AWT, Swing, JavaFX & SWT 4
R JTree und Selection mit Ctrl AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben