JavaFX 在自定义操作事件上打开拾色器对话框

JavaFX open Color Picker's Dialog on Custom Action Event

提问人:vperse 提问时间:8/4/2023 更新时间:8/4/2023 访问量:62

问:

我想启动“拾色器对话框”窗口并获取所选颜色作为输出。 就我而言,我希望通过单击 Rectangle 对象而不是 ColorPicker 组件来启动此窗口。

我很难找出启动此窗口的类/方法是什么,因为所有在线资源都只是指向我想要避免的 ColorPicker 示例。 我尝试检查文档,但没有任何运气,所以如果你们知道如何帮助我,我将非常感谢你们。

Java 用户界面 javafx 颜色选择器

评论


答:

3赞 James_D 8/4/2023 #1

我想你是在问如何在不实际显示颜色选择器控件的情况下出现颜色选择器的弹出窗口。您需要在场景图中安装颜色选择器才能使其工作;但是,您可以使其不可见。请注意,它仍将放置在场景图中,其位置将决定弹出窗口的位置。

下面是一个最小的示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class HelloApplication extends Application {
    @Override
    public void start(Stage stage) {
        Rectangle rect = new Rectangle(100, 20, 200, 40);
        ColorPicker picker = new ColorPicker();
        picker.setVisible(false);
        Pane root = new Pane(rect, picker);
        rect.setStroke(Color.BLACK);
        rect.fillProperty().bind(picker.valueProperty());
        rect.setOnMouseClicked(e -> {
            // move the (invisible) color picker so the popup appears at the mouse:
            picker.relocate(e.getX(), e.getY() - picker.getHeight());
            picker.show();
        });
        Scene scene = new Scene(root, 400, 80);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

以下是启动时的样子:

enter image description here

这是单击矩形的结果:

enter image description here

评论

0赞 vperse 8/4/2023
非常感谢。聪明的主意!我一直在考虑添加不可见的 ColorPicker,但不知道您可以在代码中触发它的对话框启动。这几乎解决了这个问题,但现在我面临着另一个问题。您知道我如何将代码的执行延迟到我从窗口中选择颜色之后,因为现在它会在选择颜色之前设置矩形的颜色,从而导致每次都设置先前选择的颜色。
0赞 James_D 8/4/2023
@vperse我不确定我是否真的理解你在那里问什么(特别是关于它将矩形的颜色设置为先前选择的颜色)。但是“在我选择颜色之前执行代码”:你不能把要执行的代码放在颜色选择器的处理程序中吗?onAction
1赞 vperse 8/4/2023
非常感谢你。它现在运行良好。你是山羊!