我正在使用JavaFXML开发一个小型的假邮件客户端。 它提供了一个Listview,其中包含在txt文件上写入的消息,TextArea可以打印选定的消息和一些按钮。 这是主视图的图像:https://ibb.co/iKN2rm 我已经照顾了"新消息"按钮,它正在启动一个新的FXML视图并且运行良好。
这是" New_Message"的图像。查看:https://ibb.co/hQf5Bm
现在我正试图实施"回复"按钮,它应该启动与之前相同的视图(新消息),但设置在从主视图获取的所有三个TextFields字符串上,例如消息的文本,收件人和消息参数。
新消息按钮处理程序下方:
private void handle_new(ActionEvent event) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Client/Resources/new_utente1.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
Stage stage = new Stage();
stage.setTitle("New Message");
stage.setScene(new Scene(root1));
stage.show();
} catch (Exception ecc) {
System.out.println("ERROR: " + ecc.getMessage());
}
}
我尝试实现handle_reply方法,但我无法添加参数,因为如果我这样做,FXML文件将无法找到该方法。
在FXML文件的一小部分下面:
<TextArea fx:id = "testo" editable="false" layoutX="283.0" layoutY="53.0" prefHeight="450.0" prefWidth="490.0" promptText="Select a message and it will be displayed here..." />
<Button id="nuovo" layoutX="46.0" layoutY="521.0" onAction = "#handle_new" mnemonicParsing="false" prefHeight="25.0" prefWidth="173.0" text="New Message" />
<Button id="reply" layoutX="283.0" layoutY="521.0" onAction = "#handle_reply" mnemonicParsing="false" prefHeight="25.0" prefWidth="132.0" text="Reply" />
我的问题是:如何实现&#34; handle_reply&#34;如前所述的方法? 谢谢
答案 0 :(得分:0)
不幸的是,使用带参数的处理程序是不可能的。在每种情况下都应使用不同的处理程序。
前一段时间也遇到过这个问题。作为一种解决方案,您可以执行小型重构,以最大限度地减少代码重复。
如果你知道javascript,你可以使用它而不是使用java处理程序:https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#scripting
编辑:你也可以查看这个答案:https://stackoverflow.com/a/37902780/5572007(非常相同)
答案 1 :(得分:0)
创建一个Controller类
然后将此课程连接到您的视图
private void handle_new(ActionEvent event) {
try {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Client/Resources/new_utente1.fxml"));
Parent root1 = (Parent) fxmlLoader.load();
CController ctr = fxmlLoader.getController();
ctr.setLabelText("asdsad");
Stage stage = new Stage();
stage.setTitle("New Message");
stage.setScene(new Scene(root1));
stage.show();
} catch (Exception ecc) {
System.out.println("ERROR: " + ecc.getMessage());
}
}
并在您的控制器中执行
public class CController implements Initializable {
@FXML TextArea testo;
@Override
public void initialize(URL location, ResourceBundle resources) {}
public void setLabelText(String text){testo.setText(text);}
}