在没有CSS文件的情况下设置JavaFX ComboBox样式

时间:2018-04-09 05:48:41

标签: java javafx

我想知道是否有任何方法可以通过编程方式设置JavaFX ComboBox的样式。我试图使用方法setStyle(String);并设置按钮样式,但它不会影响列表

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以更改(例如)ComboBox中列表单元格的文本填充颜色,如下所示:

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();
  }
}

答案 1 :(得分:0)

我认为更好的方法是在代码中设置CSS ID或CSS类。例如你的comboBox。

{"recentEvents": {"modifyDate": {"operation": "greaterThanDate","options": [{"name": "date","value": ["03/21/2018 17:29:44"]}]}}}

或设置课程:

yourComboBox.setId("fancybox");

然后在CSS中设置它们的样式。 然后你可以在comboBox上设置几乎所有的样式。

示例:

yourComboBox.getStyleClass().clear();
yourComboBox.getStyleClass().add("fancyboxes");

有许多不同的&#34;扩展&#34;您可以在#fancyBox之后添加什么,然后设置样式。 (扩展我的意思是&#34; .cell&#34; #fancyBox之后) 这可以帮到你。继续搜索。

Javafx combobox styling