【发布时间】:2016-07-26 01:43:48
【问题描述】:
我正在使用 JavaFX 8 并且有一个只读的 TextArea,它会根据情况显示确认消息或错误消息。我希望确认消息有黑色文本,但我希望错误消息有红色文本。我如何在 JavaFX 8 中做到这一点?目前,我更喜欢以编程方式进行,但我当然会对如何在 FXML 中以及程序的下一个草案中完成这一点感兴趣。
本质上,我正在显示一个 tableView 并让用户编辑 TableView 单元格中的信息。如果用户在单元格中输入了无效值,我想给他/她一个明确的错误消息,说明出了什么问题,我希望该消息为红色(或以某种方式突出显示)。如果他们以可接受的方式更改值,我想要一条确认消息,告诉他们他们已成功更改表和数据库中的值;我希望该消息是黑色的(或类似的)。
我对 JavaFX 还很陌生,我惊讶地发现不再有 setForeground()。我们现在应该怎么做?还是我应该使用某种 HTML 字段?我还没有玩过那些....
================================================ ========================= 后续问题
我可能误解了 James_D 回答的意图,但我创建了两个伪类,一个用于错误消息,一个用于信息消息:
private static final PseudoClass ERROR = PseudoClass.getPseudoClass("error");
private static final PseudoClass INFO = PseudoClass.getPseudoClass("info");
我曾希望能够有一个简单的方法来编写任何类型的消息,信息或错误,只需将伪类传递给方法。方法如下:
private void writeMessage(String message, PseudoClass pseudoClass) {
messageArea.pseudoClassStateChanged(pseudoClass, true);
messageArea.setText(message);
}
我调用如下方法得到错误信息:
writeMessage("This is an error message.", ERROR);
这样的信息消息:
writeMessage("This is an information message.", INFO);
这是我添加到我的 CSS 文件中的内容:
.text-area:error {
-fx-text-fill: red ;
-fx-font-weight: 700;
}
.text-area:info {
-fx-text-fill: black;
-fx-font-weight: normal;
}
为什么我的错误消息不显示为粗体? (所有消息都以正常字体显示。)为什么有些错误消息不显示为红色?我始终以相同的方式调用 writeMessage()。
【问题讨论】:
-
如果您希望黑色和红色文本同时出现在文本区域中,那么文本区域无法做到这一点。也许考虑使用
HTMLEditor。如果您只需要其中一个,请使用setStyle(...)。澄清我可以提供更完整的答案。 -
我一次只需要一种前景色。至少这是我最初的构想;这可能会改变。
-
你每次都关闭任何一个伪类吗?虽然这种方法可行,但它可能过于复杂。如果只有两种可能,你只需要一个伪类。您需要的两个 CSS 选择器是
.text-area{ }和.text-area:error {. }。如果有两种以上的可能性,那么您可能需要更多的伪类,但您的逻辑必须确保所有伪类状态都设置为正确的值。 -
[抱歉回复晚了;起初我没有看到您的评论。] 我可能在关闭伪类方面做得不是很好。我不知道我需要!除了我引用的 writeMessage() 方法之外,我还有一个 clearMessage() 方法,它仅删除消息 textArea 的内容并将字体粗细设置为正常,但它不调用伪类;听起来应该。