不带CSS文件的JavaFX组合框样式
我想知道是否有任何方法可以通过编程方式设计JavaFX组合框。我尝试过使用方法不带CSS文件的JavaFX组合框样式,java,javafx,Java,Javafx,我想知道是否有任何方法可以通过编程方式设计JavaFX组合框。我尝试过使用方法setStyle(String)并设置了按钮的样式,但它不会影响列表 有什么方法可以做到这一点吗?您可以更改(例如)组合框中列表单元格的文本填充颜色,如下所示: import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.ComboBox;
setStyle(String)
并设置了按钮的样式,但它不会影响列表
有什么方法可以做到这一点吗?您可以更改(例如)组合框中列表单元格的文本填充颜色,如下所示:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.util.Callback;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group(), 200, 200);
ComboBox<String> myComboBox = new ComboBox<String>();
myComboBox.getItems().addAll("A", "B", "C", "D", "E");
myComboBox
.setCellFactory(new Callback<ListView<String>, ListCell<String>>() {
@Override
public ListCell<String> call(ListView<String> param) {
final ListCell<String> cell = new ListCell<String>() {
{
super.setPrefWidth(100);
}
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if (item != null) {
setText(item);
if (item.contains("A")) {
setTextFill(Color.RED);
} else if (item.contains("B")) {
setTextFill(Color.GREEN);
} else {
setTextFill(Color.BLACK);
}
} else {
setText(null);
}
}
};
return cell;
}
});
Group root = (Group) scene.getRoot();
root.getChildren().add(myComboBox);
stage.setScene(scene);
stage.show();
}
}
导入javafx.application.application;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.paint.Color;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类主扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公众假期开始(阶段){
场景=新场景(新组(),200,200);
ComboBox myComboBox=新ComboBox();
myComboBox.getItems().addAll(“A”、“B”、“C”、“D”、“E”);
myComboBox
.setCellFactory(新回调函数(){
@凌驾
公共ListCell调用(ListView参数){
最终ListCell单元格=新ListCell(){
{
super.setPrefWidth(100);
}
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(项!=null){
setText(项目);
如果(项目包含(“A”)){
setTextFill(颜色为红色);
}否则,如果(项目包含(“B”)){
setTextFill(颜色为绿色);
}否则{
setTextFill(颜色:黑色);
}
}否则{
setText(空);
}
}
};
返回单元;
}
});
组根=(组)scene.getRoot();
root.getChildren().add(myComboBox);
舞台场景;
stage.show();
}
}
我认为更好的方法是在代码中设置CSS ID或CSS类。例如,您的组合框
yourComboBox.setId("fancybox");
或设置类:
yourComboBox.getStyleClass().clear();
yourComboBox.getStyleClass().add("fancyboxes");
然后在CSS中设置样式。
然后,您可以在comboBox上设置几乎所有的样式
yourComboBox.setId("fancybox");
例如:
#fancyBox .cell {
-fx-text-fill: #4059a9;
}
在#fancyBox之后可以添加许多不同的“扩展”,然后对其进行样式化。(扩展名我是指#fancyBox后面的“.cell”)
这可以帮助你。继续搜索
感谢您的回复,我会尝试一下(:嗯……您没有显示的代码中有错误;)对于以后的问题,请阅读并采取相应的行动。