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

JavaFX:使按钮看起来像是被点击的

甘英光
2023-03-14

我的应用程序中有一个按钮。点击它会导致与按下某个键完全相同的操作。所以我希望如果用户按下该键,该按钮会看起来像是被点击了,即暂时变暗,然后再次恢复正常。所以,在我的密钥处理程序中,我写道:

myButton.fire();

这会导致触发一个动作事件,但不会导致按钮看起来像是被点击了。我怎样才能做到后者?

共有3个答案

申屠宗清
2023-03-14

试试这个按钮setAction,

logIn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            final Color startColor = Color.web("#000000");
            final Color endColor = Color.web("#FFFFFF");
            final ObjectProperty<Color> color = new SimpleObjectProperty<Color>(startColor);
              final Timeline timeline = new Timeline(
                      new KeyFrame(Duration.ZERO, new KeyValue(color, startColor)),
                      new KeyFrame(Duration.seconds(1), new KeyValue(color, endColor)));

              final StringBinding cssColorSpec = Bindings.createStringBinding(new Callable<String>() {
                  @Override
                  public String call() throws Exception {
                      return String.format("-fx-body-color: rgb(%d, %d, %d);", 
                              (int) (256*color.get().getRed()), 
                              (int) (256*color.get().getGreen()), 
                              (int) (256*color.get().getBlue()));
                  }
              }, color);
            logIn.styleProperty().bind(cssColorSpec);
             timeline.play();
        }
    });
林德华
2023-03-14

定义一个事件处理程序

EventHandler evtHandler = event -> {
  System.out.println("Execute event");
}

然后将事件处理程序的相同实例指定为按钮的处理程序,并从KeyEventListener委托给该事件,因为您可能希望区分按下了哪个键:

EventHandler<KeyEvent> keyEventHandler = event -> {
        if (event.getCode().equals(KeyCode.F) && event.isControlDown()) {
            evtHandler.handle(event);
        }
};
弘浩瀚
2023-03-14

你可以使用myButton。手臂(…) ,和<代码>我的按钮。disarm()将其“释放”。

由于您可能希望它显示为按下一段时间,然后显示为被释放,因此您需要以下内容:

myButton.arm();
PauseTransition pause = new PauseTransition(Duration.seconds(0.5));
pause.setOnFinished(e -> myButton.disarm());
pause.play();

如果你想在发布时触发事件,请调用myButton。开火()当你调用解除武装()

pause.setOnFinished(e -> {
    myButton.disarm();
    myButton.fire();
});

这是一个SSCCE。如果按下“向上”键(即向上光标键),则模拟按下按钮:

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.PauseTransition;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Duration;

public class PrgorammaticallyPressButton extends Application {

    @Override
    public void start(Stage primaryStage) {
        IntegerProperty count = new SimpleIntegerProperty();
        Label label = new Label();
        label.textProperty().bind(count.asString("Count: %d"));

        Button button = new Button("Increment");
        button.setOnAction(e -> count.set(count.get()+1));



        VBox root = new VBox(5, label, button);
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 350, 150);

        scene.addEventFilter(KeyEvent.KEY_PRESSED, e -> {
            if (e.getCode() == KeyCode.UP) {
                button.arm();
                PauseTransition pause = new PauseTransition(Duration.seconds(0.5));
                pause.setOnFinished(evt -> {
                    button.disarm();
                    button.fire();
                });
                pause.play();
            }
        });

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

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 问题内容: 我想为捐赠表格设置一组单选按钮,但是我希望它们看起来像按钮而不是圆形表盘。 做这样的最好的方法是什么?另外,请记住,它必须与IE8一起使用。 这是我到目前为止的内容 谢谢 问题答案: 可以使用CSS来完成,而无需大型框架。我已经使用复选框和单选按钮完成了此操作。 此方法无需添加新的HTML或引入任何JS库即可。 => HTML的新命令 这是一个十分钟的hacky版本,您可以进一步清理它

  • 问题内容: 我正在使用ASP.NET,我的某些按钮只是进行重定向。我希望它们是普通的链接,但是我不希望我的用户注意到外观上的很大差异。我考虑了用锚(即标签)包裹的图像,但我不想每次更改按钮上的文本时都必须启动图像编辑器。 问题答案: 将课程应用于

  • 问题内容: 我需要使按钮看起来像使用CSS的链接。所做的更改已经完成,但是当我单击它时,它显示的效果就像按按钮一样。任何想法如何删除它,以便即使单击该按钮也可以用作链接? 问题答案:

  • 我正在制作看板,我有一列在里面,它用一个网格窗格划分在标题和下面的卡片列表之间。我正在使用场景生成器构建此场景。 所以层次结构是 当我按下卡上的按钮时,我希望它移除我单击的卡。 我已经做了以下工作 然而,当我按下按钮时什么也没有发生,卡没有被删除,我也不知道为什么。如果有人能帮我,那就太好了。

  • 我正在使用JavaFX构建一个calander/planner应用程序。该应用程序包括一个单一的GridPane与35(7x5)VBox的。在这些VBox中有任务按钮(在下面实现)。当我右键单击任务框时,它将把文本变成灰色,当我左键单击TsskButton时,我希望它删除按钮。我已经知道的事情。 AnchorPaneNode(扩展VBox)没有静态getChildren()方法 我无法为窗格创建单

  • 快速提问,如何在fxml中让图像覆盖整个按钮。 因此,按钮的所有可见部分都是边框。由于某种原因,当我试图调整图像大小以适应按钮时,它会自动调整大小。我在使用场景生成器。我正在使用FXML。 按钮大小为prefHeight=“38.0”prefWidth=“50.9990000002526”。 记住我不想看到按钮的背景。我希望它被一张图片覆盖。 谢谢,你们帮了大忙。