事件机制

JavaFX中事件机制和Swing、Android、前端JavaScript等等都差不多,这里简单介绍一下。

要注意的是,实际上,JavaFX中除了绑定事件监听器,很多包含数据的控件还能通过数据绑定实现交互(这也是JavaFX相比传统GUI框架的改进之处),数据绑定将在后续章节介绍。

绑定事件监听器

下面代码给按钮绑定一个点击监听,按钮点击时handle方法会回调,并打印一些信息。

Button button1 = new Button("btn1");
button1.setOnAction(new EventHandler<ActionEvent>() {

  @Override
  public void handle(ActionEvent event) {
    System.out.println("Button clicked!");
  }
});
fpRootPane.getChildren().add(button1);

绑定数据修改监听器

除了按钮这样的组件,还有像文本框这样的组件,我们可以监听它们的数据改变。包含数据的组件中,有一些类似textProperty的属性,我们可以在其上进行监听。

这里我们创建一个简单的布局,包含一个TextField和一个Label

textfield.textProperty().addListener(new ChangeListener<String>() {
  @Override
  public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
    label.setText(newValue);
  }
});

textProperty()返回一个StringProperty对象,我们可以在其上绑定数据监听器。上面代码中,我们实现的就是在TextField中修改其值时,Label中也能同步修改。

监听鼠标事件

监听鼠标事件是通过在一个组件(通常是一个容器Pane或者全局根组件上)设置鼠标监听器实现的。

fpRootPane.setOnMouseClicked(new EventHandler<Event>() {
  @Override
  public void handle(Event event) {
    MouseEvent me = (MouseEvent) event;
    switch (me.getButton()) {
    case PRIMARY:
      System.out.println("左键点击了");
      break;
    case MIDDLE:
      System.out.println("中键点击了");
      break;
    case SECONDARY:
      System.out.println("右键点击了");
      break;
    case NONE:
      System.out.println("其它未知状况");
      break;
    }
  }
});

上面代码我们监听的是鼠标点击事件,我们通过switch...case...判断用户点击的是哪一个键。

监听键盘事件

监听键盘事件和鼠标事件也是类似的,设置对应的键盘监听器就可以了。

fpRootPane.setOnKeyPressed(new EventHandler<Event>() {
  @Override
  public void handle(Event event) {
    KeyEvent ke = (KeyEvent) event;
    System.out.println(ke.getCode());
  }
});

这里我们设置了一个键盘按下监听器,回调时打印出键盘对应的keyCode

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap