You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX中getTarget方法使用疑问:IntelliJ无法调用该方法实现按钮显示AnchorPane

解决JFXButton点击显示AnchorPane的问题

嘿,我来帮你搞定这个问题!首先你遇到的getTarget()方法报错,十有八九是因为导入了错误的事件类——你用了AWT的java.awt.event.MouseEvent,但JavaFX应用得用自己的事件体系,这俩完全不兼容,所以才找不到正确的方法。咱们先把这个坑填上,再聚焦到你核心的需求:点击按钮显示AnchorPane。

第一步:确保JFoenix依赖正确引入

既然用了JFXButton,得保证JFoenix库已经正确加到项目里:

  • 如果你用Maven,在pom.xml里加这段依赖(选和你JavaFX版本匹配的JFoenix版本,比如JavaFX 9就用9.0.10):
<dependency>
    <groupId>com.jfoenix</groupId>
    <artifactId>jfoenix</artifactId>
    <version>9.0.10</version>
</dependency>
  • Gradle的话就加这个:
implementation 'com.jfoenix:jfoenix:9.0.10'

IntelliJ会自动同步依赖,要是同步失败,手动点一下右侧Maven/Gradle面板的刷新按钮就行。

第二步:修正控制器代码

先把错误的java.awt.event.MouseEvent导入删掉,然后写个简单的点击事件处理方法,直接控制AnchorPane的可见性就行,根本不需要getTarget():

package sample;

import com.jfoenix.controls.JFXButton;
import javafx.fxml.FXML;
import javafx.scene.layout.AnchorPane;
import javafx.event.ActionEvent;
import javafx.animation.FadeTransition;
import javafx.util.Duration;

public class MainController { // 记得把类名改成你实际的控制器类名

    @FXML
    private JFXButton showPaneBtn; // 和FXML里的按钮id对应
    @FXML
    private AnchorPane targetPane; // 和FXML里的AnchorPane id对应

    // 按钮点击事件处理方法
    @FXML
    public void onShowPaneClick(ActionEvent event) {
        // 直接设置面板可见
        targetPane.setVisible(true);
        // 可选:加个淡入动画让效果更丝滑
        targetPane.setOpacity(0);
        FadeTransition fadeIn = new FadeTransition(Duration.seconds(0.3), targetPane);
        fadeIn.setToValue(1);
        fadeIn.play();
    }
}

第三步:配置FXML文件

确保你的FXML里按钮和AnchorPane的id和控制器里的@FXML注解对应上,并且把点击事件绑定到刚才写的方法:

<?xml version="1.0" encoding="UTF-8"?>
<?import com.jfoenix.controls.JFXButton?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            fx:controller="sample.MainController">

    <!-- 触发按钮 -->
    <JFXButton fx:id="showPaneBtn"
               text="显示面板"
               onAction="#onShowPaneClick" <!-- 绑定到控制器的方法 -->
               layoutX="60" layoutY="40"/>

    <!-- 要显示的AnchorPane,初始设为隐藏 -->
    <AnchorPane fx:id="targetPane"
                layoutX="60" layoutY="100"
                prefWidth="350" prefHeight="250"
                visible="false"
                style="-fx-background-color: #e0f7fa;"/>

</AnchorPane>

额外小提示

如果你确实需要获取触发事件的组件,在JavaFX的ActionEvent里用event.getSource()就行,比如:

JFXButton clickedBtn = (JFXButton) event.getSource();

完全没必要用AWT的事件类,这俩生态是分开的。

内容的提问来源于stack exchange,提问作者Nick Fedutenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:36