当前位置: 首页 > 知识库问答 >
问题:

JavaFX桌面颜色

翟沈义
2023-03-14

我需要创建带有多色行的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;}

但我仍然需要高亮显示选定的行。我该怎么做?

共有1个答案

章越
2023-03-14

不要为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