- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
JavaFX:如何使用自定义样式表将文本颜色应用于 TableCell?
当我直接在我的 CellFactory 中使用 setTextFill()
时它工作正常,但我想使用外部 CSS 文件应用自定义样式。我可以证明我的 CSS 类已应用,因为字体变为粗体。但是,未应用 CSS 文件的字体颜色。
@Override
protected void updateItem(MyObject item, boolean empty) {
super.updateItem(item, empty);
if (null != item) {
// EITHER:
this.getStyleClass().add("styleImportant"); // Does NOT set color.
// OR:
this.setTextFill(Color.RED); // Does set color.
}
else {
this.getStyleClass().remove("styleImportant");
}
}
样式表:
.styleImportant {
-fx-font-weight: bold; /** Does work. */
-fx-text-fill: red; /** Does NOT work. */
}
它与 CSS 选择器的特殊性有某种关系,但我没有设法找到任何有效的设置。
编辑:我设法使用 CSS 应用自定义文本颜色和背景颜色。我的实现现在使用 Label
包装在 VBox
中,以使背景颜色填充整个表格单元格。但是,在删除自定义样式时,我仍然遇到一些背景颜色未被清除的问题。
有没有比应用清晰样式更好的解决方案?
colExample.setCellFactory(new Callback<TableColumn<Example, Example>, TableCell<Example, Example>>() {
@Override
public TableCell<Example, Example> call(TableColumn<Example, Example> tableColumn) {
return new TableCell<Example, Example>() {
private VBox container;
private Label text;
// Anonymous constructor
{
this.container = new VBox();
this.text = this.createLabel();
this.container.getChildren().add(this.text);
this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
this.setStyle("-fx-padding: -1 -1 -1 -1;"); // Remove padding from cell
this.setGraphic(this.container);
}
private final Label createLabel() {
Label label = new Label();
VBox.setVgrow(label, Priority.ALWAYS);
label.setMaxWidth(Double.MAX_VALUE);
label.setMaxHeight(Double.MAX_VALUE);
label.setAlignment(Pos.CENTER);
return label;
}
@Override
protected void updateItem(Example example, boolean empty) {
super.updateItem(example, empty);
// Reset column styles
if (null != this.text && null != this.text.getStyleClass()) {
String[] possibleStyles = new String[] { "styleImportant", "clearStyle" };
for (String style: possibleStyles) {
if (this.text.getStyleClass().contains(style)) {
// Will not reset background, even though style is removed?
this.text.getStyleClass().remove(style);
}
}
// Apply reset style to clear background color
this.text.getStyleClass().add("clearStyle");
}
if (null != example) {
this.text.setText(example.getContent());
if (example.isImportant()) {
this.text.getStyleClass().add("styleImportant");
}
}
}
};
}
});
我的样式表:
/** Keep black text color, when user selects row */
.table-row-cell:focused {
-fx-dark-text-color: #000000;
-fx-mid-text-color: #000000;
-fx-light-text-color: #000000;
}
/** Style to reset background color */
.clearStyle {
-fx-background-color: transparent;
}
/** Style for important cells */
.styleImportant {
/** Red text color on any background */
-fx-dark-text-color: #FF0000;
-fx-mid-text-color: #FF0000;
-fx-light-text-color: #FF0000;
-fx-background-color: #FF9999;
}
最佳答案
正如 José 在他的回答中指出的那样,如果您在单元格中设置图形,您(可能)需要将 css 样式类应用到图形(取决于图形是什么)。如果您只是调用 setText(...)
,您的代码应该可以工作。
设置为图形的 Label
不从表格单元格继承 -fx-text-fill
的原因是 Label
还有 -fx-text-fill
的设置。在默认样式表中,TableCell
和 Label
都有如下设置:
-fx-text-fill: -fx-text-background-color ;
fx-text-background-color
是 looked-up color定义为阶梯,如下所示:
-fx-text-background-color: ladder(
-fx-background,
-fx-light-text-color 45%,
-fx-dark-text-color 46%,
-fx-dark-text-color 59%,
-fx-mid-text-color 60%
);
这个(相当复杂的)设置意味着 -fx-text-background-color
的值取决于 -fx-background
的值。如果 -fx-background
小于最大强度的 45%(即黑暗),则 -fx-text-background-color
的值设置为 -fx-light-text-color
。如果 -fx-background
强度介于 46% 和 59% 之间,则该值等于 -fx-drak-text-color
。如果是 60% 或更多,则设置为 -fx-mid-text-color
。这里的想法是文本颜色会自动调整以适应背景以保持可见。 -fx-dark-text-color
、-fx-mid-text-color
和 -fx-light-text-color
的值> 分别设置为黑色、深灰色 (#333) 和白色。
由于 Label
不会覆盖 -fx-text-background-color
的值,您只需更改表格的值即可实现所需的效果细胞:
.styleImportant {
-fx-text-background-color: red ;
}
现在这会覆盖表格单元格的查找颜色值,并且由于单元格内的图形不会覆盖该值本身,它会从单元格继承它。
一种更复杂的方法是重新定义 -fx-[light|mid|dark]-text-color
。这样做的好处是,如果您更改背景,颜色会适当调整:特别是如果选择了单元格,您可以确保文本保持可见:
.styleImportant {
-fx-light-text-color: white ;
-fx-mid-text-color: #c00 ;
-fx-dark-text-color: red ;
}
关于JavaFX:使用自定义样式表将文本颜色应用于 TableCell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26997008/
我有一个包含单元格的 TableView。我的表格的工作方式类似于坐标系,而不是像通常的表格。 Click here for more about this. 现在,我需要将一个单元格拖放到另一个单元
我目前正在开发一个应用程序,其中使用 TableView,其中包含一个 TableCell 中的 RadioButton。为此,我创建了一个自己的 RadioButtonCell 类。我还有一个“添加
我在 tableviewcell(原型(prototype)单元格)内添加了一个标签,并使用 Storyboard对标签应用了以下约束: 50 领先利润率 50 尾随 margin 20 上边距 20
我需要放入一个表格单元格、一个标签和进度条。 对于进度条,我使用的是: @FXML private TableView tableView; @FXML private TableColumn col
我对表格单元格中的分段控件有疑问。分段控制无 Action segmentedFilter.addTarget(self, action: #selector(ProductListFilterCel
我需要你的帮助! 我有一个表格,里面有行(姓名等)现在,当位于该行上的对象具有特定值时,我想为特定的 tableCells 背景着色。但我只得到它来读取这个单元格的值。但我需要阅读对象(在我的代码中称
JavaFX:如何使用自定义样式表将文本颜色应用于 TableCell? 当我直接在我的 CellFactory 中使用 setTextFill() 时它工作正常,但我想使用外部 CSS 文件应用自定
我想从 TableCell 中的模型获取一个属性,这样我就可以根据该属性来操纵单元格,让我们看一下以下示例: 我有一个像这样的模型: public class Model { private
我的应用程序有一个 TableView,其中填充了对图像文件的引用列表。 数据从数据库加载,仅提供有关如何定位图像文件本身的信息(因此它指示图像的子文件夹和文件名)。 在我的 TableView 中,
如何确定 javafx 表单元格引用的数据类型(字符串、整数、 double 等)。例如。我有一个自定义单元工厂,它被分配给 Javafx Controller 中的一个字段,如下所示: Custom
这不是一个特定于语言的问题,但我需要它来玩 java 游戏。我有一个尺寸为 3x3 的表(二维数组)。所以单元格的一维索引是: 1 2 3 4 5 6 7 8 9 当有这个索引时,我想从中获取二维索引
例如,当您按下 Enter 键时,TextFieldTableCell 会响应并调用 commitEdit()。 如果我使用自定义节点来显示,那么我如何监听确认编辑的方法?例如,我有一个 DateTi
我正在尝试将 tableCell 添加到 TableView 中的适当部分。我有一个按如下方式索引的客户端列表: var clients = Client.loadAllClients()
Xcode: swift 完全错误: 无法找到接受 caseImage 类型的参数列表的类型 TableCell 的初始值设定项:(UIImge, caseName: String, caseDate
我最近遇到了一个有趣的tutorial在 Ray Wenderlich 的网站上,了解如何通过使用长按手势并拖动 TableCell 来重新定位 TableCell,以更改顺序。一切正常,但我相信它会
我创建了一个自定义 tableCell 当我通过 backgroundView 将 xib 连接到文件所有者时,我成功地让项目出现在我的表中。问题是我无法选择一行并获得返回。 如果我取消选择 back
我正在尝试使用 segue 将注释传递给 mapkit 但是当我测试它时总是以 fatal error 结束:在展开可选值时意外发现 nil annotation is not a nil obj b
我的代码如下。我想在 tableCell() 中的单元格之间添加空间相当于的东西 我不是在寻找 cellpadding 或 cellspacing,因为它们都在左单元格边框和
我必须根据显示的数据更改 TableCell 的样式类,例如:如果两个连续行中的单元格值相同,则必须突出显示该单元格(即:背景红色)。这必须既能将数据添加到表中又能按任何列排序。 为此,在排序时,我向
我正在尝试在我的 TableView 中创建自定义 TableCell。我希望它显示一个 ComboBox,我可以在其中选择一个 String 值,然后显示 String 值,就好像它是用户输入一样。
我是一名优秀的程序员,十分优秀!