Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不带CSS文件的JavaFX组合框样式_Java_Javafx - Fatal编程技术网

不带CSS文件的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;

我想知道是否有任何方法可以通过编程方式设计JavaFX组合框。我尝试过使用方法
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”) 这可以帮助你。继续搜索


感谢您的回复,我会尝试一下(:嗯……您没有显示的代码中有错误;)对于以后的问题,请阅读并采取相应的行动。