我正在使用JavaFX 8,並具有一個只讀的TextArea,它根據具體情況顯示確認消息或錯誤消息。我希望確認消息具有黑色文本,但我希望錯誤消息具有紅色文本。我如何在JavaFX 8中做到這一點?目前,我寧願以編程的方式進行,但我肯定會對如何在FXML中完成此項任務以及該程序的下一個草稿感興趣。如何動態更改JavaFX TextArea中文本的前景色?
本質上,我顯示一個tableView並讓用戶編輯TableView的單元格中的信息。如果用戶在單元格中輸入了一個無效值,我想給他/她一個關於錯誤的明確錯誤信息,並且我希望該信息是紅色的(或以某種方式突出顯示)。如果他們以可接受的方式更改值,我需要一條確認消息,告訴他們已經在表和數據庫中成功更改了值;我寧願那個消息是黑色的(或類似的)。
我對JavaFX相當陌生,很驚訝地發現沒有setForeground()。我們現在應該怎麼做?或者我應該使用某種HTML字段?我還沒有玩過那些......
================================== ===================================== 後續問題
我可能誤解了意圖James_D的答案,但我創建了兩個僞類,一個錯誤消息和一個報告消息:
private static final PseudoClass ERROR = PseudoClass.getPseudoClass("error");
private static final PseudoClass INFO = PseudoClass.getPseudoClass("info");
我本來希望能夠有一個可以寫或者親切的消息,信息或錯誤的簡單方法,只需通過將僞類傳遞給方法。這裏的方法:
writeMessage("This is an error message.", ERROR);
和這樣一個信息消息:
private void writeMessage(String message, PseudoClass pseudoClass) {
messageArea.pseudoClassStateChanged(pseudoClass, true);
messageArea.setText(message);
}
我調用該方法上的錯誤信息如下
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'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/HTMLEditor.html)。如果你只需要一個或另一個,使用'setStyle(...)'。澄清我可以提供更完整的答案。 –
我一次只需要一種前景色。至少這是我最初的概念;這可能會改變。 – Henry
您是否每次切換僞類都關閉?雖然這種方法可行,但它可能過於複雜。如果只有兩種可能性,你只需要一個僞類。您需要的兩個CSS選擇器是'.text-area {}'和'.text-area:error {。 }'。如果有兩種以上的可能性,那麼你可能需要更多的僞類,但是你的邏輯必須確保所有的僞類狀態都被設置爲正確的值。 –