首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Button Click在运行时更改子fxml gui部件

如何使用Button Click在运行时更改子fxml gui部件
EN

Stack Overflow用户
提问于 2012-07-19 22:43:10
回答 2查看 29.9K关注 0票数 20

我正在尝试为一个大型复杂的gui构建一个框架,所以我的想法是让所有的东西都具有mvc风格,就像javafx 2.1中的样式一样,这样每个组件都有一个fxml文件,如果需要的话,还有css、控制器和模型。我正在尝试弄清楚如何更改子场景(运行时的sub )。有人知道怎么做吗?我有点被困在这里了。可能是要添加MainViewController?场景:用户点击任务栏中的按钮,包含的content1.fxml将替换为content2.fxml

下面是基本代码

MainApp.java

代码语言:javascript
复制
Loads the MainView.fxml

MainView.fxml

代码语言:javascript
复制
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>


 <BorderPane xmlns:fx="http://javafx.com/fxml">
<center>
    <fx:include source="Content1.fxml"/>
</center>

<bottom>
    <fx:include source="TaskBar.fxml"/>
</bottom>

</BorderPane>

内容1.fxml

代码语言:javascript
复制
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content1">
    <Label text="Hallo Java FX 2.1.1 Content1.fxml"/>
</StackPane>

Content2.fxml

代码语言:javascript
复制
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<StackPane xmlns:fx="http://javafx.com/fxml" fx:id="content2">
    <Label text="Hallo Java FX 2.1.1 Content2.fxml"/>
</StackPane>

TaskBar.fxml

代码语言:javascript
复制
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<HBox xmlns:fx="http://javafx.com/fxml" spacing="10" alignment="center" 
     fx:id="taskBar" fx:controller="TaskBarController">
    <children>
        <Button fx:id="taskBarButton1" onAction="#handleTaskBarButton1Action"/>     
        <Button fx:id="taskBarButton2" onAction="#handleTaskBarButton2Action"/> 
    </children>
</HBox>

TaskBarController.java

代码语言:javascript
复制
import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;

public class TaskBarController implements Initializable {

// Binding with the FXML
@FXML
private Button taskBarButton1;

@FXML
private Button taskBarButton2;

@FXML
private void handleTaskBarButton1Action(ActionEvent event) {
    System.out.println("click! taskBarButton1");
}

@FXML
private void handleTaskBarButton2Action(ActionEvent event) {
    System.out.println("click! taskBarButton2");
}

@Override
public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub

}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-20 00:53:29

不要只包含fxml,还要为其创建一个业务逻辑层:

代码语言:javascript
复制
<BorderPane xmlns:fx="http://javafx.com/fxml">
<center>
    <Pane fx:id="content"/>
</center>

并在按钮点击处理程序中更新它:

代码语言:javascript
复制
@FXML
private void handleTaskBarButton2Action(ActionEvent event) {
   System.out.println("click! taskBarButton2");
   content.getChildren().clear();
   content.getChildren().add(FXMLLoader.load(getClass().getResource("Content2.fxml"));
}
票数 24
EN

Stack Overflow用户

发布于 2012-07-23 02:07:22

它可以工作,谢谢帮助,但我被迫删除了TaskBar.fxml和TaskBarController.java,编写了一个带有@FXML句柄的MainViewController和@FXML的按钮,以及带有fx:id=“内容”的窗格,并将我的自定义按钮放在MainView.fxml中

代码语言:javascript
复制
@FXML
private void handleTaskBarButton2Action(ActionEvent event) throws IOException {
    System.out.println("click! taskBarButton2");
    content.getChildren().clear();
    content.getChildren().add((Node) FXMLLoader.load(getClass().getResource("Content2.fxml")));
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11563298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档