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

JavaFX如何从其他阶段(类)访问字段(TextArea)

柴岳
2023-03-14

我有一个主要的场景,在那里我保留了所有的木鬼。它有一个菜单,打开新的场景,在那里我有一些设置:

public class StartController implements Initializable {

// Some other fields

    @FXML
    private TextArea eventLog;

// This method opens "new project" window

@FXML
    private void openProjectWindow(Event event) throws IOException {

        eventLog.appendText(EventLogUtils.getDate() + STATUS.INFO
                + " New project window opened\n");

        GridPane newProjectWindow = (GridPane) FXMLLoader.load(getClass()
                .getResource("../view/project.fxml"));
        Scene scene = new Scene(newProjectWindow, 800, 600);
        scene.getStylesheets().add(
                getClass().getResource("../view/main.css").toExternalForm());
        Stage projectStage = new Stage();
        projectStage.setScene(scene);
        projectStage.setTitle("New Project");
        projectStage.show();
    } 

}

这个eventLog文本区是我放置所有日志的地方,比如应用程序启动、设置更改、项目保存等。我正在用openProjectWindow void打开新场景,并且我正在将这些信息添加到我的日志记录程序中。我的新窗口是一个单独的类:

public class ProjectWindowController implements Initializable {

// fields and methodes to fill and save forms

}

完成后,我需要访问StartController.EventLog,但我尝试的都不起作用:

  • 将eventLog更改为Public
  • 通过ProjectWindowController扩展StartController并尝试Super.EventLog.AppendText()
  • 将eventLog更改为公共静态(在运行时引发异常

有没有办法从不同的阶段(类)访问这个字段?我通常会使用单例设计模式,但我认为在这种情况下是不可能的。我在寻找类似的问题,但我没有找到任何符合我问题的案例。谢谢你的帮助!

共有1个答案

陆昕
2023-03-14

与其将UI控件公开给另一个类并直接修改它,更好的方法(可能更容易使用)是使用一个中间类或一组类来保存您试图记录的所有信息,并使用属性绑定将数据绑定到事件日志文本区域。

这样,您就可以维护类的边界,并将相关数据组织在适当的位置,并且您可以允许任何想要这些数据的人以标准的方式访问这些数据。

类似于:

public final class LogInfo {
    private static StringProperty logData = new SimpleStringProperty();
    // methods that set/format logData based on changes from your UI

    // provide public access to the property
    public static StringProperty logDataProperty() { return logData; }
    public static void setLogData(String data) { logData.set(data); }
    public static String getLogData() { return logData.get(); }
}
public class StartController implements Initializable {

// Some other fields

    @FXML
    private TextArea eventLog;

    @FXML
    public void initialize(URL url, ResourceBundle resourceBundle ) {
        // other initialize stuff

        // bind the log property to this event log
        // Bindings.bindBidirectional() if you want to be able to control the property from both sides.
        eventLog.textProperty().bind(LogInfo.logDataProperty());

        // ...
    }
}

您可以选择UI如何更新loginfo类中的log info属性,但这将帮助您在保持信息分离的同时更进一步。

 类似资料:
  • null 我在TopMenuButtons中有一个按钮,它具有openAssisstantStage()方法,打开新的小阶段: 对于这个阶段,我还有FXML文件和控制器(AssisstantController)。只有2个按钮-第一个按钮应该打开前一个阶段和关闭电流,但第二个按钮也应该打开普雷沃阶段,关闭电流,也打开一个特定的标签在我的标签视图和做一些其他逻辑例如。获取实际localDate: 我

  • 我怎么绕过这个?我需要以某种方式再次实现那个方法,但突然间我不能通过作为一个论点的阶段。

  • 我正在使用Netbeans 7.2和Scene Builder1.0开发一个JavaFX应用程序。我有我的主屏幕设置,我想有它,所以我点击一个按钮,它将关闭主窗口和打开另一个。主Stage对象位于main类中,但controller类是独立的,不能访问它,因为它不是静态的,并且位于不同的类中。我如何改变场景或舞台?

  • 问题内容: 我的班级有一个名为DataStorage的哈希图: 如何在另一个类中访问此HashMap中的数据? 问题答案: 将HashMap创建为实例变量,并提供一种将其访问类API的方法:

  • 在我的帖子页面(常规帖子类型)中,我设置了一个ACF关系字段。在这个里面,我可以选择公司名称,这些名称都在directory_listings的职位类型下。 现在,我在directory listings页面上有以下代码,因此使用simply get_字段不起作用,因为这些值不在该页面上,而是在POST类型的其他位置。 因此不确定如何获取信息。 目录_LISTINGS post type下某个页面