当前位置: 首页 > 知识库问答 >
问题:

如何在javaFX中将颜色从ColorPicker转换为字符串值

元玮
2023-03-14

我想让用户使用ColorPicker选择颜色,然后使用该颜色更改按钮的颜色。JavaFX

    ColorPicker cp = new ColorPicker();
            cp.setOnAction(e -> {
                Color c = cp.getValue();
                System.out.println(c);
            });

在println中,它将给出诸如0xe6e64dff,0xccffccff...

    Button button = new Button();
    button.setStyle("-fx-background-color: #ff0000; ");

所以我假设我必须将颜色值转换为字符串才能使用它?或者我该怎么做?如何使选择的颜色在setStyle行中可用?

共有1个答案

周涵畅
2023-03-14

可以使用以下方法从颜色创建十六进制字符串:

private static String toHexString(Color color) {
  int r = ((int) Math.round(color.getRed()     * 255)) << 24;
  int g = ((int) Math.round(color.getGreen()   * 255)) << 16;
  int b = ((int) Math.round(color.getBlue()    * 255)) << 8;
  int a = ((int) Math.round(color.getOpacity() * 255));
  return String.format("#%08X", (r + g + b + a));
}

这也包括颜色的alpha(即不透明度)。请注意,JavaFX CSS参考指南没有记录对4位数/8位数十六进制值的任何支持:

RGB十六进制:十六进制表示法中RGB值的格式是一个“#”,后面紧跟着三个或六个十六进制字符。三位RGB表示法(#RGB)是通过复制数字而不是通过添加零来转换为六位形式(#RRGGB)的。例如,#FB0扩展为#FFBB00。这确保了白色(#FFFFF)可以用短符号(#FFF)指定,并消除了对显示器颜色深度的任何依赖。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    StackPane root = new StackPane();

    ColorPicker picker = new ColorPicker();
    root.getChildren().add(picker);
    picker.setOnAction(
        event -> {
          event.consume();

          Color value = picker.getValue();
          if (value == null) {
            root.setStyle(null);
          } else {
            String style = String.format("-fx-background-color: %s;", toHexString(value));
            root.setStyle(style);
          }
        });

    primaryStage.setScene(new Scene(root, 500, 300));
    primaryStage.setTitle("Color to Hexadecimal Example");
    primaryStage.show();
  }

  private static String toHexString(Color color) {
    int r = ((int) Math.round(color.getRed()     * 255)) << 24;
    int g = ((int) Math.round(color.getGreen()   * 255)) << 16;
    int b = ((int) Math.round(color.getBlue()    * 255)) << 8;
    int a = ((int) Math.round(color.getOpacity() * 255));

    return String.format("#%08X", (r + g + b + a));
  }
}

还有另一种方法来完成你正在做的事情。设置样式需要将颜色转换为字符串,而不是直接设置区域#background属性。这里有一个例子:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    StackPane root = new StackPane();

    ColorPicker picker = new ColorPicker();
    root.getChildren().add(picker);
    picker.setOnAction(
        event -> {
          event.consume();

          Color value = picker.getValue();
          if (value == null) {
            root.setBackground(null);
          } else {
            root.setBackground(new Background(new BackgroundFill(value, null, null)));
          }
        });

    primaryStage.setScene(new Scene(root, 500, 300));
    primaryStage.setTitle("Programmatically Set Background Color Example");
    primaryStage.show();
  }
}
 类似资料:
  • 问题内容: 在.NET中,您可以实现以下目标: 在Java中有没有一种方法可以不必诉诸反射? PS:我不是在寻找其他存储/加载颜色的方法。我只想知道在哪里有可能做到这一点。 问题答案: 使用反射访问类的静态成员。

  • 我在JavaFX ColorPicker中选择了颜色。现在我需要将其保存为十六进制字符串。我找到了这个方法,但是对于JavaFX它不适用。JavaFX有自己的Color类,没有getRGB()方法,可以用作中间转换。

  • 我正在将颜色转换为字符串。然后我将颜色转换为字符串。不幸的是,当我想把它转换回颜色时,操作失败了:

  • 问题内容: 我有一个从生成的整数 整数的值为-16776961 如何将此值转换为格式为#RRGGBB的十六进制字符串 简而言之:我想从-16776961输出#0000FF 注意:我不希望输出包含Alpha,并且我也尝试了此示例,但未成功 问题答案: 该掩码可确保你仅获得RRGGBB,而%06X可为你填充零填充的十六进制(始终为6个字符):

  • 问题内容: 在我的Java应用程序,我能得到的中的红色,绿色和蓝色的条款; 我将这些值存储在3 秒内。 如何将这些RGB值转换为包含等效十六进制表示形式的?如 问题答案: 您可以使用 资金使用X如果你希望你得到的十六进制数字予以资本化(的对比)。

  • 主要内容:创建ColorPicker,示例,自定义颜色颜色选择器控件允许用户从可用的颜色范围中选择颜色,或通过指定RGB或HSB组合设置其他颜色。JavaFX ColorPicker控件具有颜色选择器,调色板和自定义颜色对话框窗口。 创建ColorPicker 以下代码使用空构造函数创建一个颜色选择器控件,颜色选择器控件使用默认颜色,即。 还可以提供颜色常量作为当前选择的颜色。 还可以提供网络颜色值作为当前选择的颜色 示例 如下示例代码 - 自定义颜