我需要创建带有多色行的JavaFx TableView(颜色1表示低优先级,颜色2表示中等优先级等)。我已经创建了CellFactory
public class TaskCellFactory implements Callback<TableColumn, TableCell> {
@Override
public TableCell call(TableColumn p) {
TableCell cell = new TableCell<Task, Object>() {
@Override
public void updateItem(Object item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
TableRow currentRow = getTableRow();
Task currentTask = currentRow == null ? null : (Task)currentRow.getItem();
if(currentTask != null){
Priority priority = currentTask.getPriority();
clearPriorityStyle();
if(!isHover() && !isSelected() && !isFocused()){
setPriorityStyle(priority);
}
}
}
@Override
public void updateSelected(boolean upd){
super.updateSelected(upd);
System.out.println("is update");
}
private void clearPriorityStyle(){
ObservableList<String> styleClasses = getStyleClass();
styleClasses.remove("priorityLow");
styleClasses.remove("priorityMedium");
styleClasses.remove("priorityHigh");
}
private void setPriorityStyle(Priority priority){
switch(priority){
case LOW:
getStyleClass().add("priorityLow");
break;
case MEDIUM:
getStyleClass().add("priorityMedium");
break;
case HIGH:
getStyleClass().add("priorityHigh");
break;
}
System.out.println(getStyleClass());
}
private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};
return cell;
} }
和css
.priorityLow{ -fx-background-color: palegreen; }
.priorityMedium{ -fx-background-color: skyblue;}
.priorityHigh{ -fx-background-color: palevioletred;}
但我仍然需要高亮显示选定的行。我该怎么做?
不要为css中的整个单元格设置背景色,只需设置-fx控件内部背景即可。然后,默认的重音、悬停和焦点环仍然可用。当然,也要删除setPriorityStyle调用周围的if语句。
如果您还想覆盖默认重音(选定)颜色或悬停颜色等内容,您也可以像下面的css一样执行此操作-不确定是否真的推荐高亮覆盖,但我想这将取决于您的应用程序和所需的用户体验。
.priorityLow {
-fx-control-inner-background: palegreen;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
.priorityMedium {
-fx-control-inner-background: skyblue;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
.priorityHigh {
-fx-control-inner-background: palevioletred;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
JavaFX的详细样式信息可以在默认的caspian中找到。JavaFX 2.2的css样式表和JavaFX 2 css参考指南。找到里海。css对于您的JavaFX版本,您可以取消对jfxrt的限制。jar(有时可以在jre/lib目录中找到)。
更新
JavaFX的默认样式表现在命名为modena.css
而不是caspian.css
。
主要内容:RGB颜色,颜色名称,颜色alpha通道,HSB颜色,Web颜色在JavaFX中,我们可以在对象上应用颜色(Paint)。在JavaFX中,所有形状都可以填充简单的颜色和渐变颜色。 RGB颜色 当指定颜色值时,可以使用默认的颜色空间中的颜色。 要创建颜色,请使用方法。此方法使用三个整数值,表示红色,绿色和蓝色分量。请阅读以下一段简单的代码 - 执行上面的代码,得到以下结果 - 颜色名称 以下代码根据颜色名称创建颜色。如:,请参阅如下代码 - 执行上面的代码,得
我使用的是eclipse IDE,并且一直试图从eclipse内部以.exe文件的形式使用Ant部署应用程序。Inno Setup5.0已安装并位于我的环境路径中。 这是我在构建项目中遇到的错误\build\build\classes\meta-inf使用base JDK at:Bundler EXE安装程序跳过,因为配置问题:缺少主应用程序jar。 修复建议:确保使用fx:jar任务创建主应用程
我正在尝试开发一个看起来像终端控制台的应用程序,我正在使用TextArea,我的愿望是对黑色背景和绿色文本进行修饰, 我想在不使用任何ccs模板的情况下做到这一点 我知道我的问题在这里看起来像是重复的: javafx textarea背景色不是css 或 TextArea的JavaFX CSS样式不起作用 但在阅读了这些内容并尝试了它们的建议后,我发现没有运气解决我的问题 到目前为止我所尝试的(未
问题内容: 我有一个非常大的程序,当前正在使用SWT。该程序可以在Windows,Mac和Linux上运行,它是一个包含许多元素的大型桌面应用程序。现在SWT有点老了,我想切换到Swing或JavaFX。我想听听您对三件事的想法。 我主要关心的是桌面GUI应用程序会更好吗?(我在网上看过,很多人认为JavaFX与Swing一样好,但是除了简单的见解大战之外,我没有看到很多有效的论点)。它必须在Wi
主要内容:JavaFX渐变颜色,线性梯度(LinearGradient),径向渐变,半透明渐变,反射循环渐变JavaFX渐变颜色 可以使用径向渐变使形状看起来三维(立体)。 梯度绘制可以在两种或更多种颜色之间内插,这给出形状的深度。JavaFX提供两种类型的渐变:径向渐变()和线性渐变()。 要在JavaFX中创建渐变颜色,需要设置五个属性值。如下 - 设置开始起点的第一个停止颜色。 将终点设置为终止停止颜色。 设置属性以指定是使用标准屏幕坐标还是单位平方坐标。 将循环方法设置为使用三个枚举:,
如何更改JavaFX