gpt4 book ai didi

java - JavaFX ComboBox 元素上的文本颜色仅在第一次选择后更改

转载 作者:行者123 更新时间:2023-11-30 08:22:07 25 4
gpt4 key购买 nike

我正在使用 Windows 7 上的 e(fx)clipse 中的 SceneBuilder 2.0 从 Java 8.0 在 JavaFx 中构建输入表单。

我有一个简单的字符串组合框,我想更改列表和所选字符串中字体的颜色和大小。我使用的 css 代码更改了所选元素上的文本。但是,第一次删除列表时,它是黑色默认字体。第二次,所有元素的字体颜色和大小都更改为正确的值。

如何使字体列表以正确的颜色和大小启动?

这是我的 Controller 类中初始化方法的简化代码:

ObservableList<String> types = FXCollections.observableArrayList
( "large", "medium", "small" );

comboBox.setItems( types );

和当前的CSS:

#comboBox .list-cell
{
-fx-font-family: arial;
-fx-font-size: 16px;
-fx-text-fill: #a0522d;
}

最佳答案

你必须创建一个 CellFactory 并且你不能使用 CSS(我不知道为什么,但这是我让它工作的唯一方法):

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.stage.Stage;
import javafx.util.Callback;

public class Mainu extends Application {

@Override
public void start(Stage stage) throws Exception {
ComboBox<String> cb = new ComboBox<String>();
cb.setItems(FXCollections.observableArrayList("Foo","Bar","777","Batman"));
cb.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override public ListCell<String> call(ListView<String> p) {
return new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
//This won't work for the first time but will be the one
//used in the next calls
getStyleClass().add("my-list-cell");
setTextFill(Color.RED);
//size in px
setFont(Font.font(16));
}
}
};
}
});
cb.getSelectionModel().selectFirst();
Pane root = new Pane();
root.getChildren().add(cb);
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {launch(args);}
}

尽管您使用的是标准 API,但我相信您也应该在 CSS 中使用它并在 CSS 中指定第一次有以编程方式设置,因为这对维护您的软件的人很有用。

样式.css

.combo-box .cell{
-fx-text-fill: blue;
-fx-font: 16px "Arial";
}
.my-list-cell {
-fx-text-fill: blue;
-fx-font: 16px "Arial";
/* No alternate highlighting */
-fx-background-color: #FFF;
}

奇怪的细节:对于 JavaFX 2 你 could set this via CSS但仍然必须使用 CellFactory。

关于java - JavaFX ComboBox 元素上的文本颜色仅在第一次选择后更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24664701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com