ScalaFX/JavaFX:如何更改组合框的溢出样式?

ScalaFX/JavaFX:如何更改组合框的溢出样式?,java,scala,javafx,ellipsis,scalafx,Java,Scala,Javafx,Ellipsis,Scalafx,我需要设置所选项目的名称。要设置溢出样式,据我所知,我需要访问buttonCell(类型为ObjectProperty[javafx.scene.control.ListCell[T]) 因此我写了 val fileComboBox = new ComboBox[java.io.File](Seq()) println(fileComboBox.buttonCell) 要查看按钮cell成员的值 结果:[SFX]对象属性[bean:ComboBox@319f91f9[styleClass=co

我需要设置所选项目的名称。要设置溢出样式,据我所知,我需要访问
buttonCell
(类型为
ObjectProperty[javafx.scene.control.ListCell[T]

因此我写了

val fileComboBox = new ComboBox[java.io.File](Seq())
println(fileComboBox.buttonCell)
要查看
按钮cell
成员的值

结果:
[SFX]对象属性[bean:ComboBox@319f91f9[styleClass=combo box base combo box],名称:buttonCell,值:null]
,这意味着没有可以设置其溢出样式的按钮单元格(
值:null


如何更改组合框的溢出样式?

您可以使用外部CSS文件执行此操作:

.combo box>.list单元格{
-fx文本溢出:前导省略号;
}
有效值为
[中心省略号|中心单词省略号|剪辑|省略号|前导省略号|前导单词省略号|单词省略号]
,默认值为
省略号

也可以通过直接设置按钮单元格来完成此操作。在JavaFX中(我将把它翻译成Scala):

ListCell buttonCell=newlistcell(){
@凌驾
受保护的void updateItem(文件项,布尔值为空){
super.updateItem(项,空);
setText(空?null:item.getName());
}
};
buttonCell.SettexOverflow(Overflow样式.前导字母省略号);
setButtonCell(buttonCell);

您可以使用外部CSS文件执行此操作:

.combo box>.list单元格{
-fx文本溢出:前导省略号;
}
有效值为
[中心省略号|中心单词省略号|剪辑|省略号|前导省略号|前导单词省略号|单词省略号]
,默认值为
省略号

也可以通过直接设置按钮单元格来完成此操作。在JavaFX中(我将把它翻译成Scala):

ListCell buttonCell=newlistcell(){
@凌驾
受保护的void updateItem(文件项,布尔值为空){
super.updateItem(项,空);
setText(空?null:item.getName());
}
};
buttonCell.SettexOverflow(Overflow样式.前导字母省略号);
setButtonCell(buttonCell);

我想不到您能够在组合框中设置此选项。这对于需要用户逐行选择的控件没有意义。不过,您可以设置最小/最大/首选宽度。所选值是指向文件的路径,该文件的长度可能超过窗口宽度(尤其是当窗口大小调整为较小时)。路径的哪一部分更重要:头部还是尾部?是否可以只在组合框显示中存储文件名,而将完整路径存储在其值中?当然,前提是文件名是唯一的。当然是唯一的。但是我仍然必须在某处显示路径,否则用户无法确定是哪个文件。因此,我更喜欢最简单的解决方案:立即显示目录路径+基本名称。我不会想到您能够在组合框上设置它。这对于需要用户逐行选择的控件没有意义。不过,您可以设置最小/最大/首选宽度。所选值是指向文件的路径,该文件的长度可能超过窗口宽度(尤其是当窗口大小调整为较小时)。路径的哪一部分更重要:头部还是尾部?是否可以只在组合框显示中存储文件名,而将完整路径存储在其值中?当然,前提是文件名是唯一的。当然是唯一的。但是我仍然必须在某处显示路径,否则用户无法确定是哪个文件。因此,我更喜欢最简单的解决方案:立即显示目录路径+基本名称。我只是尝试了CSS设置(我非常喜欢,非常感谢您为我指出该设置!),它可以工作:-)我只是尝试了CSS设置(我非常喜欢,非常感谢您为我指出该设置!),它可以工作:-)
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);