2013-03-26 16 views
11

ich ein Listview haben und will, dass die folgenden Schritte aus:JavaFX - CSS Styling Listview

  • Odd Reihen mit weißer Hintergrundfarbe;
  • ListView: Wenn Sie mit der Maus über einen Gegenstand fahren, markieren Sie ihn mit einem blauen Farbton;
  • ListView: Wenn ein Objekt ausgewählt ist, malen Sie es mit einem Farbverlauf;
  • ListView: Wenn der Fokus von ListView verloren geht, sollte das ausgewählte Element mit Farbverlauf gezeichnet werden;
  • ListView: Alle Elemente beginnen mit Text-füllen schwarz. Aber wenn die Maus über und/oder ausgewählt wird, wird sie zu weiß wechseln.

Das ist mein Code. Es funktioniert gut, außer für die geraden Zeilen: Bei Mausüberfahrt wird es weiß hervorgehoben. Der Text ist also weiß und kann nicht angezeigt werden. Was stimmt damit nicht?

.list-cell:filled:selected:focused, .list-cell:filled:selected { 
    -fx-background-color: linear-gradient(#328BDB 0%, #207BCF 25%, #1973C9 75%, #0A65BF 100%); 
    -fx-text-fill: white; 
} 

.list-cell:odd { 
    -fx-cell-hover-color: #0093ff; 
    -fx-background-color: white; 
} 

.list-cell:filled:hover { 
    -fx-cell-hover-color: #0093ff; 
    -fx-text-fill: white; 
} 

Vielen Dank im Voraus.

Antwort

18

EDIT:

leicht Ihre css Wechsel:

.list-cell:filled:selected:focused, .list-cell:filled:selected { 
    -fx-background-color: linear-gradient(#328BDB 0%, #207BCF 25%, #1973C9 75%, #0A65BF 100%); 
    -fx-text-fill: white; 
} 

.list-cell:even { /* <=== changed to even */ 
    -fx-background-color: white; 
} 

.list-cell:filled:hover { 
    -fx-background-color: #0093ff; 
    -fx-text-fill: white; 
} 

Diese CSS erzeugt die folgende Darstellung:

ListView presentation variant 1

das tut, was Sie erwarten?

Ich habe odd zu even geändert. Die erste Zelle ist gerade, weil ihr Indexwert 0 (Null) ist. Auch -fx-cell-hover-color ist nicht gültig. Ich änderte es zu -fx-background-color wo erforderlich oder entfernt es.


Originaltext: (beachten Sie, dass diese unterschiedliche Auslegung der ungeraden hat/even)

Meine Meinung sein würde.
(I Referenz Ihre Anforderungen in einer nummerierten Liste, die in der CSS-I auch aus der Gradient offensichtliche und einen grünen Hintergrund für sogar Zellen hinzugefügt)

/* 
1. Odd rows with white background color; 
2. ListView: when mouse over an item, highlight with a blue shade; 
3. ListView: when an item is selected, paint it with a gradient; 
4. ListView: when focus is lost from ListView, selected item should be painted with gradient; 
5. ListView: all items will start with text-fill black. But on mouse over and/or selected it will change to white. 
*/ 

.list-cell:filled:selected:focused, .list-cell:filled:selected { 
    /* 3:, 4: */ 
    -fx-background-color: linear-gradient(#333 0%, #777 25%, #aaa 75%, #eee 100%); 
    -fx-text-fill: white; /* 5 */ 
} 
.list-cell { -fx-text-fill: black; /* 5 */ } 
.list-cell:odd { -fx-background-color: white; /* 1 */ } 
.list-cell:even { -fx-background-color: #8f8; /* for information */ } 
.list-cell:filled:hover { 
    -fx-background-color: #00f; /* 2 */ 
    -fx-text-fill: white; /* 5 */ 
} 

Dies führt zu dieser Wiedergabe.

ListView rendering variant 2

+0

danke für deine antwort. Aber mein Hauptproblem ist ungerade ausgewählte Zeilen. Mit der Maus funktioniert '-fx-text-fill' und wird weiß. Aber seine Hintergrundfarbe wird auch weiß. – Leonardo

+1

Ich hatte den Eindruck, dass Sie andere Erwartungen haben könnten, welche Zelle gerade und welche ungerade ist. Ich fügte eine leicht modifizierte Variante Ihrer CSS hinzu, die nicht die ganz weißen Zellen ergibt. Ist das besser? –