2016-03-28 25 views
0

Ich muss die overrun style des ausgewählten Elements festlegen. Um den Überlaufstil einzustellen, muss ich, soweit ich weiß, auf die buttonCell (die vom Typ ObjectProperty[javafx.scene.control.ListCell[T]] ist) zugreifen.ScalaFX/JavaFX: Wie kann ich den Überlaufstil einer ComboBox ändern?

Daher schrieb ich

val fileComboBox = new ComboBox[java.io.File](Seq()) 
println(fileComboBox.buttonCell) 

, um die das buttonCell Mitglied schätzen zu sehen hat.

Ergebnis: [SFX]ObjectProperty [bean: [email protected][styleClass=combo-box-base combo-box], name: buttonCell, value: null], was bedeutet, dass es keine Knopfzelle gibt, deren Überlaufstil ich einstellen könnte (value: null).

Wie kann ich den Überlaufstil der Kombinationsbox ändern?

+0

Ich hätte nicht gedacht, dass Sie in der Lage wäre, dies in einem Kombinationsfeld zu setzen. Es ist nicht sinnvoll für ein Steuerelement, das eine Auswahl Zeile für Zeile vom Benutzer erfordert. Sie können jedoch die minimale/maximale/bevorzugte Breite einstellen. https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/Region.html#setMinWidth-double- – ManoDestra

+0

Der ausgewählte Wert ist ein Pfad zu einer Datei, die länger als die Fensterbreite werden kann (besonders wenn das Fenster auf eine kleine Größe verkleinert wird). Welcher Teil des Weges ist wichtiger: der Kopf oder der Schwanz? – ideaboxer

+0

Ist es möglich, nur den Dateinamen in der Combobox-Anzeige zu speichern, aber den vollständigen Pfad in seinem Wert zu speichern? Vorausgesetzt, der Dateiname ist natürlich eindeutig. – ManoDestra

Antwort

2

Sie können dies tun mit einer externen CSS-Datei:

.combo-box > .list-cell { 
    -fx-text-overrun: leading-ellipsis ; 
} 

Die gültigen Werte sind [ center-ellipsis | center-word-ellipsis | clip | ellipsis | leading-ellipsis | leading-word-ellipsis | word-ellipsis ] mit ellipsis der Standard sein.

Sie können dies auch tun, indem Sie die Knopfzelle direkt einstellen. In JavaFX (Ich überlasse es Ihnen, es zu Scala zu übersetzen):

ListCell<File> buttonCell = new ListCell<File>() { 
    @Override 
    protected void updateItem(File item, boolean empty) { 
     super.updateItem(item, empty); 
     setText(empty ? null : item.getName()); 
    } 
}; 
buttonCell.setTextOverrun(OverrunStyle.LEADING_ELLIPSIS); 
fileComboBox.setButtonCell(buttonCell); 
+0

Ich habe gerade die CSS-Einstellung ausprobiert (was ich wirklich mag, vielen Dank, dass du mich darauf hingewiesen hast!), Und es funktioniert :-) – ideaboxer

Verwandte Themen