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

Javafx基于其他TableView事件加载TableView

洪光霁
2023-03-14
public class TeamsViewController implements Initializable{

    // Service layer for accessing datastore
    private ServiceLayer serviceLayer = new ServiceLayer();

    @FXML private TableView<Team> tableView;
    private TableColumn<Team, Integer> idCol;

    @Override
    public void initialize(URL location, ResourceBundle resources) {

    tableView.getColumns().addAll(
            this.createIdCol(),
            this.createTeamNameCol(),
            this.createButtonColumn()); // Click to show Team members

    tableView.getItems().setAll(serviceLayer.getAllTeams());

}
// ......... bunch of methods to create the columns, etc.
<AnchorPane prefHeight="342.0000999999975" prefWidth="568.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="main.ui.TeamsViewController">
  <children>
    <TableView fx:id="tableView" maxHeight="-1.0" maxWidth="-1.0" prefHeight="282.0" prefWidth="568.0" />
  </children>
</AnchorPane>
public static void main(String[] args) {
    launch(args);
}
@Override
public void start(Stage primaryStage) {
    try {

        // This shows the Team table
        AnchorPane root = (AnchorPane) FXMLLoader.load(getClass().getResource("teamViewController.fxml"));
        Scene scene = new Scene(root,800,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();


        //This will show the People table
        AnchorPane people = (AnchorPane) FXMLLoader.load(getClass().getResource("peopleViewController.fxml"));
        scene.setRoot(people);
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        log.severe(e.getMessage());
        e.printStackTrace();
    }
}

Teams表的最后一列有一个按钮。所以,我卡住的地方是:当我点击我的团队表中的“详细信息”按钮时,我如何显示团队成员表(人员)?提前谢谢你的提示!

共有1个答案

蔡楚
2023-03-14

由于您对两个表视图都使用了fxml,您需要在“详细信息”按钮的click事件时切换这些fxml。

您还需要更改应用程序文件以更改FXMLS。

您可以使用此代码

 public void start(Stage primaryStage) {

    try {
        stage = primaryStage;

        gotohome();

        primaryStage.show();
    } catch (Exception ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void gotohome() {
    try {
        FXMLController home = (FXMLController) replaceSceneContent("Homepage.fxml");
        home.setApp(this);
    } catch (Exception ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public void gotoproductwise() {
    try {
        SampleController product_wise = (SampleController) replaceSceneContent("/product_wise/product_wise.fxml");
        product_wise.setApp(this);
    } catch (Exception ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
}


private Initializable replaceSceneContent(String fxml) throws Exception {
    FXMLLoader loader = new FXMLLoader();
    InputStream in = Main.class.getResourceAsStream(fxml);
    loader.setBuilderFactory(new JavaFXBuilderFactory());
    loader.setLocation(Main.class.getResource(fxml));
    AnchorPane page;
    try {
        page = (AnchorPane) loader.load(in);
    } finally {
        in.close();
    }

    // Store the stage width and height in case the user has resized the window
    double stageWidth = stage.getWidth();
    if (!Double.isNaN(stageWidth)) {
        stageWidth -= (stage.getWidth() - stage.getScene().getWidth());
    }

    double stageHeight = stage.getHeight();
    if (!Double.isNaN(stageHeight)) {
        stageHeight -= (stage.getHeight() - stage.getScene().getHeight());
    }

    Scene scene = new Scene(page);
    if (!Double.isNaN(stageWidth)) {
        page.setPrefWidth(stageWidth);
    }
    if (!Double.isNaN(stageHeight)) {
        page.setPrefHeight(stageHeight);
    }

   // stage.setOpacity(1);
    stage.setScene(scene);
    stage.sizeToScene();
    return (Initializable) loader.getController();
}
 private Main application; 
public void setApp(Main application) {
this.application=application;
}
 类似资料:
  • 我正在使用javafx创建一个扫雷克隆,如果有人玩过原始游戏,他们可能会记得当你按下一个磁贴并四处移动时,其他磁贴的行为就好像它们也在被按下一样...如果你放手-即使你最初按下的是一个完全不同的节点,你鼠标当前所在的节点也会被点击。我很难重新创建这个,我需要一些帮助。 我正在使用全局事件处理程序类,我不太确定这是好是坏......但是,让我的克隆的事件单独处理感觉很好。我尝试过在事件发生的节点上使

  • 我想自定义tableview的按钮,但是当我在initialize方法中获得show-hide-columns-button时,它是空的。有一种方法可以获得show-hide-columns-按钮。

  • 我知道已经有一些关于相对路径的问题,但是我总是无法让JavaFX FXML加载器从包本身以外的包加载资源。 加载类位于包gui.controllers中,fxml文件位于包中。我现在应该写什么: 提前谢谢

  • 该部分 API 将帮助您监听光环板上的各类事件,学习如何使用广播进行线程间的通信,控制脚本的停止,以写出多线程程序。 省略代码中的halocode 注意:该部分 API 省略了“halocode.”,本篇提及的所有 API 均省略了“halocode.” ,如 led_driver.off( )实际为halocode.led_driver.off()。mbuild 电子模块平台的所有功能均维护在h

  • 我有一个问题,我不能从一个对象加载3个属性显示在表视图上。我有一个付款对象,它由一个受益人对象(包括3个字符串-name、accountnumber和code)、一个金额字符串和一个引用字符串组成。如果这些项目都是同一个对象的一部分,我可以查看它们,但是当我将它们拆分时,它不会引起问题,并且单元格是空的。 每次我尝试将付款加载到tableView时,只有金额和引用是可见的。我尝试使用Propert

  • 资源事件 beforeunload 事件 beforeunload事件在窗口、文档、各种资源将要卸载前触发。它可以用来防止用户不小心卸载资源。 如果该事件对象的returnValue属性是一个非空字符串,那么浏览器就会弹出一个对话框,询问用户是否要卸载该资源。但是,用户指定的字符串可能无法显示,浏览器会展示预定义的字符串。如果用户点击“取消”按钮,资源就不会卸载。 window.addEventL