Colors JavaFX2-组合框中显示颜色

Colors JavaFX2-组合框中显示颜色,colors,combobox,javafx-2,render,Colors,Combobox,Javafx 2,Render,按照Oracle的ListView示例,我已经能够获得一个组合框颜色渲染列表颜色 我的问题是,一旦选择了一种颜色,ComboBox将显示字符串名称,而我希望显示颜色本身,不管是否将颜色名称放在一边 如何更改此代码以显示选定的颜色 谢谢大家 import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import

按照Oracle的ListView示例,我已经能够获得一个组合框颜色渲染列表颜色

我的问题是,一旦选择了一种颜色,ComboBox将显示字符串名称,而我希望显示颜色本身,不管是否将颜色名称放在一边

如何更改此代码以显示选定的颜色

谢谢大家

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
import javafx.util.Callback;


public class ProvaComboRendering extends Application {

@Override
public void start(Stage primaryStage) {


    StackPane root = new StackPane();
    ComboBox<String> cb = new ComboBox<String>();

    cb.setPrefSize(150, 20);
    root.getChildren().add(cb);


    Scene scene = new Scene(root, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();

ObservableList<String> data = FXCollections.observableArrayList(
        "chocolate", "salmon", "gold", "coral", "darkorchid",
        "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue",
        "blueviolet", "brown");

  cb.setItems(data);

  cb.setCellFactory(new Callback<ListView<String>, ListCell<String>>(){
      @Override
      public ListCell<String> call(ListView<String> list){
          return new ColorRectCell();
      }

  });
}
  static class ColorRectCell extends ListCell<String>{
      @Override
      public void updateItem(String item, boolean empty){
          super.updateItem(item, empty);
          Rectangle rect = new Rectangle(120,18);
          if(item != null){
              rect.setFill(Color.web(item));
              setGraphic(rect);
      }
  }
  }   

public static void main(String[] args) {
    launch(args);
}         
}
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.ComboBox;
导入javafx.scene.control.ContentDisplay;
导入javafx.scene.control.ListCell;
导入javafx.scene.control.ListView;
导入javafx.scene.layout.StackPane;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类provacombo扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
StackPane root=新的StackPane();
ComboBox cb=新ComboBox();
cb.setPrefSize(150,20);
root.getChildren().add(cb);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
ObservableList data=FXCollections.observableArrayList(
“巧克力”、“鲑鱼”、“黄金”、“珊瑚”、“达科奇德”,
“黑沉香”,“轻鲑鱼”,“黑沉香”,“蓝沉香”,
“蓝紫色”、“棕色”);
cb.设置项目(数据);
cb.setCellFactory(新回调(){
@凌驾
公共ListCell调用(ListView列表){
返回新的ColorRectCell();
}
});
}
静态类ColorRectCell扩展了ListCell{
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
矩形rect=新矩形(120,18);
如果(项!=null){
rect.setFill(Color.web(item));
设置图形(rect);
}
}
}   
公共静态void main(字符串[]args){
发射(args);
}         
}
编辑:当鼠标指针位于某个颜色列表上时,是否可以显示显示显示颜色名称的工具提示


使用组合框的按钮单元格属性。您可以使用相同的cellfactory:

@Override
public void start(Stage primaryStage) {
    StackPane root = new StackPane();
    ComboBox<String> cb = new ComboBox<String>();

    cb.setPrefSize(150, 20);
    root.getChildren().add(cb);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();

    ObservableList<String> data = FXCollections.observableArrayList(
            "chocolate", "salmon", "gold", "coral", "darkorchid",
            "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue",
            "blueviolet", "brown");

    cb.setItems(data);

    Callback<ListView<String>, ListCell<String>> factory = new Callback<ListView<String>, ListCell<String>>() {
        @Override
        public ListCell<String> call(ListView<String> list) {
            return new ColorRectCell();
        }
    };

    cb.setCellFactory(factory);
    cb.setButtonCell(factory.call(null));

}
@覆盖
公共无效开始(阶段primaryStage){
StackPane root=新的StackPane();
ComboBox cb=新ComboBox();
cb.setPrefSize(150,20);
root.getChildren().add(cb);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
ObservableList data=FXCollections.observableArrayList(
“巧克力”、“鲑鱼”、“黄金”、“珊瑚”、“达科奇德”,
“黑沉香”,“轻鲑鱼”,“黑沉香”,“蓝沉香”,
“蓝紫色”、“棕色”);
cb.设置项目(数据);
回调工厂=新回调(){
@凌驾
公共ListCell调用(ListView列表){
返回新的ColorRectCell();
}
};
cb.赛赛尔工厂(工厂);
cb.setButtonCell(工厂调用(null));
}
或者为按钮单元定义新的单元工厂,如下所示,添加工具提示:

@Override
public void start(Stage primaryStage) {
    StackPane root = new StackPane();
    ComboBox<String> cb = new ComboBox<String>();

    cb.setPrefSize(150, 20);
    root.getChildren().add(cb);

    Scene scene = new Scene(root, 300, 250);

    primaryStage.setScene(scene);
    primaryStage.show();

    ObservableList<String> data = FXCollections.observableArrayList(
            "chocolate", "salmon", "gold", "coral", "darkorchid",
            "darkgoldenrod", "lightsalmon", "black", "rosybrown", "blue",
            "blueviolet", "brown");

    cb.setItems(data);

    Callback<ListView<String>, ListCell<String>> factory = new Callback<ListView<String>, ListCell<String>>() {
        @Override
        public ListCell<String> call(ListView<String> list) {
            return new ColorRectCell();
        }
    };
    cb.setCellFactory(factory);

    Callback<ListView<String>, ListCell<String>> factoryTooltip = new Callback<ListView<String>, ListCell<String>>() {
        @Override
        public ListCell<String> call(ListView<String> list) {
            return new ColorRectTooltipCell();
        }
    };
    cb.setButtonCell(factoryTooltip.call(null));

}


static class ColorRectTooltipCell extends ColorRectCell {
    @Override
    public void updateItem(String item, boolean empty) {
        super.updateItem(item, empty);
        if (item != null) {
            Tooltip.install(this.getParent(), new Tooltip(item));
        }
    }
}
@覆盖
公共无效开始(阶段primaryStage){
StackPane root=新的StackPane();
ComboBox cb=新ComboBox();
cb.setPrefSize(150,20);
root.getChildren().add(cb);
场景=新场景(根,300,250);
初级阶段。场景(场景);
primaryStage.show();
ObservableList data=FXCollections.observableArrayList(
“巧克力”、“鲑鱼”、“黄金”、“珊瑚”、“达科奇德”,
“黑沉香”,“轻鲑鱼”,“黑沉香”,“蓝沉香”,
“蓝紫色”、“棕色”);
cb.设置项目(数据);
回调工厂=新回调(){
@凌驾
公共ListCell调用(ListView列表){
返回新的ColorRectCell();
}
};
cb.赛赛尔工厂(工厂);
Callback factoryTooltip=new Callback(){
@凌驾
公共ListCell调用(ListView列表){
返回新的ColorRectToolTiCell();
}
};
cb.setButtonCell(factoryTooltip.call(null));
}
静态类ColorRectToolTiCell扩展了ColorRectCell{
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
如果(项!=null){
install(this.getParent(),新工具提示(项));
}
}
}

@Albertoacepsut。请参见根据更新的问题更新。