如何使用FXMLLoader类的getController方法来获取FXML中定义的控件对象
时间: 2024-06-04 22:12:26 浏览: 102
您可以使用FXMLLoader类的getController方法来获取FXML中定义的控件对象。这个方法会返回一个Object类型,您需要将其强制转换为您需要的类型。例如,如果您需要获取一个名为"btnSubmit"的按钮控件对象,在FXML中定义为:
<Button fx:id="btnSubmit" text="Submit"/>
您可以在控制器类中使用以下代码来获取它:
@FXML
private Button btnSubmit;
public void someMethod() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("your_fxml_file.fxml"));
Parent root = fxmlLoader.load();
YourControllerClass controller = fxmlLoader.getController();
Button btnSubmit = controller.btnSubmit;
// Now you can use btnSubmit to do whatever you want
}
相关问题
package com.example.qqeasy; import com.example.qqeasy.chatInterface.Sc.Server; import com.example.qqeasy.chatInterface.chatCon.ChatConCli; import com.example.qqeasy.chatInterface.chatCon.ChatConSer; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import java.util.Objects; public class t extends Application { public void start(Stage primaryStage) throws Exception { // 加载FXML文件 FXMLLoader clientLoader = new FXMLLoader(Objects.requireNonNull(getClass().getClassLoader().getResource("chat1.fxml"))); Parent clientRoot = FXMLLoader.load(Objects.requireNonNull(getClass().getClassLoader().getResource("chat1.fxml"))); ChatConCli clientController = clientLoader.getController(); FXMLLoader serverLoader = new FXMLLoader(Objects.requireNonNull(getClass().getClassLoader().getResource("chat2.fxml"))); Parent serverRoot = FXMLLoader.load(Objects.requireNonNull(getClass().getClassLoader().getResource("chat2.fxml"))); ChatConSer serverController = serverLoader.getController(); // 创建场景 Scene clientScene = new Scene(clientRoot,593,660); Scene serverScene = new Scene(serverRoot,600,400); // 设置舞台 primaryStage.setScene(clientScene); primaryStage.show(); // 启动服务器 Server server = new Server(serverController); server.start(); // // 设置按钮点击事件 // Button sendButton = (Button) clientRoot.lookup("#sendButton"); // sendButton.setOnAction(e -> clientController.sendMessage()); } public static void main(String[] args) { launch(args); } } 运行后白屏
根据你提供的代码,白屏的原因可能是以下几点:
1. FXML文件路径错误:检查一下`chat1.fxml`和`chat2.fxml`文件是否位于正确的路径下。确保这两个文件都在与`t.java`相同的目录或子目录下。
2. 控制器类没有正确加载:在`FXMLLoader.load()`方法中,你应该传递`clientLoader`和`serverLoader`,而不是重新创建一个新的`FXMLLoader`对象。修改以下代码:
```java
Parent clientRoot = clientLoader.load();
Parent serverRoot = serverLoader.load();
```
3. FXML文件中的根元素问题:确保`chat1.fxml`和`chat2.fxml`文件中的根元素与对应的Controller类相匹配。例如,如果`chat1.fxml`中的根元素为`AnchorPane`,则对应的Controller类应该是`ChatConCli`,确保这两者一致。
请检查以上三点,并确保代码中没有其他问题,然后再次运行程序,看看是否能够正常显示界面。如有需要,请提供更多的代码和错误信息以便我更好地帮助你解决问题。
mMapController =mBaiduMap.getController() 中.getController() 报错
如果你在使用百度地图 SDK 的时候,出现了类似 ".getController() 报错" 的问题,可能是因为你的 BaiduMap 对象没有正确初始化。请确保你已经完成了以下步骤:
1. 在布局文件中添加 MapView 控件。
2. 在代码中获取 MapView 对象,并调用其 getMap() 方法获取 BaiduMap 对象。
3. 在获取 BaiduMap 对象后,再调用其 getController() 方法获取 MapController 对象,如下所示:
```
MapView mMapView = (MapView) findViewById(R.id.bmapView);
BaiduMap mBaiduMap = mMapView.getMap();
MapController mMapController = mBaiduMap.getController();
```
如果你已经按照以上步骤进行了初始化,但仍然遇到问题,请检查你的导入包是否正确,以及是否有其他的错误导致了 BaiduMap 对象无法正确初始化。
阅读全文