1

我想设计一个看起来像有 3 个位置的开关的组件。一个中性位置和上开关位置,当用户单击组件的上半部分时,以及下开关位置,当用户单击组件的下半部分时。当鼠标被释放时,开关回到中立位置。我有这些位置的 3 个开关图像。我正在考虑使用Button然后检查鼠标点击坐标是在上半部分还是下半部分,然后相应地设置图像。我正在寻找任何更好的建议,如果可能的话,对图像使用 css(我不知道是否可能),或者如果更合适的话,使用其他组件的任何其他建议。谢谢你。

4

2 回答 2

1

这是我所做的,它有效......

final Button rstButton = new Button();
    final Image rstNeutral = new Image(MyClass.class.getResourceAsStream("images/switch_neutral.png"));
    final Image rstUp = new Image(MyClass.class.getResourceAsStream("images/switch_on.png"));
    final Image rstDown = new Image(MyClass.class.getResourceAsStream("images/switch_off.png"));
    final ImageView rstImage = new ImageView();
    rstImage.setImage(rstNeutral);
    rstButton.setGraphic(rstImage);

    rstButton.setOnMousePressed(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent me) {
            double mouseY = me.getY();
            double buttonY = rstButton.getLayoutY();
            double buttonHeight = rstButton.getHeight();

            if(buttonY + mouseY > buttonY + (buttonHeight / 2)) {
                rstImage.setImage(rstDown);
            } else {
                rstImage.setImage(rstUp);
            }
        }
    });

    rstButton.setOnMouseReleased(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent arg0) {
            rstImage.setImage(rstNeutral);
        }
    });
于 2012-07-27T07:52:12.367 回答
0

我认为您应该使用三个组件而不是一个组件。

例如,您可以使用三个 ToogleButton 实例。该组件在外观上类似于一个按钮,但具有一个工具状态(单击/未单击)。我从不在 javaFX 中使用它,但我认为您会在 oracle 网站上找到足够的帮助(例如:http ://docs.oracle.com/javafx/2/ui_controls/toggle-button.htm )


编辑 :

经过评论,我认为机械开关的图像(http://docs.oracle.com/javafx/2/api/javafx/scene/image/Image.html)可能是解决方案。如果您从侧面显示开关,您可以根据开关的状态更改图像的旋转。

为了知道用户点击的位置,定位按钮的位置可以工作。

另一种解决方案可能是在图像顶部设置三个透明区域并拦截这些区域上的点击事件,而不是图像。从来没有使用过这样的解决方案,我真的可以帮助你更多。

我看到的最后一个解决方案可能是在开关图像的一侧使用两个另一个图像组件,显示两个箭头,用于向上或向下拉开关。

于 2012-07-27T06:30:44.000 回答