好吧,伙计们,我和SWING一直在合作,但最近开始学习一些FX。到目前为止,我已经取得了很好的进展,我已经学到了很多东西。在Swing中,很容易声明一个全局变量,然后在所有框架中使用它而不会出现任何问题或任何问题。但是在JavaFX中它是一个很大的问题。
我到处搜寻这个问题,但我似乎无法找到正确的答案。
所以我有一些正在接收用户输入的文本字段,我想保存输入并将其显示在新文本的新文本字段中。
这是代码
FirstController.java
private void reggy(ActionEvent event) {
try {
String username_text = username.getText().trim();
String password_text = password.getText().trim();
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/store","root","password");
Statement st = (Statement) conn.createStatement();
String sql = "select username, password from users where username ='"+username_text+"' and password ='"+password_text+"'";
ResultSet rs;
rs = st.executeQuery(sql);
int count = 0;
while(rs.next()) {
count = count +1;
}
if(count == 1){
AnchorPane pane = FXMLLoader.load(getClass().getResource("second.fxml"));
rootpane.getChildren().setAll(pane);
System.out.println("User Found, Logged in");
}
现在主要问题是如何获取变量" String username_text"准备在不同的FXML文档中使用(second.fxml)
提前多多感谢。真的很感激帮助。一个初学者在这里尝试通过FX工作。
答案 0 :(得分:0)
答案 1 :(得分:0)
更新1
如果你的代码是
,你应该替换这部分if(count == 1){
AnchorPane pane = FXMLLoader.load(getClass().getResource("second.fxml"));
rootpane.getChildren().setAll(pane);
System.out.println("User Found, Logged in");
}
用这个:
if(count == 1){
FXMLLoader loader = new FXMLLoader(getClass().getResource("second.fxml"));
AnchorPane pane = loader.load();
SecondController controller = (SecondController) loader.getController();
controller.updateUsernameText(username_text);
rootpane.getChildren().setAll(pane);
System.out.println("User Found, Logged in");
}
(如果需要,将SecondController替换为第二个控制器的类名)
然后剩下要做的就是在第二个控制器类中创建这个方法:
void updateUsernameText(String username_text) {
// your code here
}
另外,我建议你使用java命名约定,在google上搜索:)
简而言之,变量名称不应包含下划线,每个单词的首字母大写(第一个单词除外),如下所示:usernameText
。方法也是如此,除了它们应该以动词开头。课程也应该首字母大写(你已经完成了我认为,对第二个控制器不确定)。
旧帖子
一种不同的方法(比全局类IMO更好,因为它允许多个实例并且无法从外部访问)是简单地使用方法将文本从一个类传递到另一个类。
首先,在第二个控制器中添加一个方法以允许传递文本:
void setText(String text) {
textField.setText(text);
}
然后在第一个(主)控制器中添加它:
FXMLLoader loader = new FXMLLoader(...);
Scene scene = new Scene(loader.load());
SecondController second = (SecondController) loader.getController();
second.setText(someText);