如何在同一控制器JavaFX中创建弹出菜单?
我对在我的代码中使用弹出菜单有一个问题,我设置它的方式是,如果单击一个按钮,它将打开一个新的场景(如果他们想删除某些内容,会提示) 然而,新场景是另一个带有自己控制器的FXML文件,当我试图让新的FXML控制器删除某些内容时,它不会工作,因为代码不在同一个控制器中,所以我无法从第一个控制器执行代码 现在我只想在同一个类中打开一个对话,但我不知道如何将代码转换为在同一个控制器中。这是我想保存在同一控制器中的FXML代码如何在同一控制器JavaFX中创建弹出菜单?,java,eclipse,javafx,netbeans,fxml,Java,Eclipse,Javafx,Netbeans,Fxml,我对在我的代码中使用弹出菜单有一个问题,我设置它的方式是,如果单击一个按钮,它将打开一个新的场景(如果他们想删除某些内容,会提示) 然而,新场景是另一个带有自己控制器的FXML文件,当我试图让新的FXML控制器删除某些内容时,它不会工作,因为代码不在同一个控制器中,所以我无法从第一个控制器执行代码 现在我只想在同一个类中打开一个对话,但我不知道如何将代码转换为在同一个控制器中。这是我想保存在同一控制器中的FXML代码 <AnchorPane id="AnchorPane" prefHeig
<AnchorPane id="AnchorPane" prefHeight="89.0" prefWidth="388.0"
xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8"
fx:controller="finalprojectjava.DeletePopupController">
<children>
<Label layoutX="48.0" layoutY="14.0" prefHeight="32.0" prefWidth="293.0" text="Are you sure you want to delete contact?">
<font>
<Font size="16.0" />
</font>
</Label>
<Button layoutX="92.0" layoutY="50.0" mnemonicParsing="false" onAction="#acceptButton" prefHeight="25.0" prefWidth="91.0" text="Yes" />
<Button layoutX="195.0" layoutY="50.0" mnemonicParsing="false" onAction="#declineButton" prefHeight="25.0" prefWidth="91.0" text="No" />
</children>
</AnchorPane>
下面是一个使用JavaFX对话框通过弹出窗口获取用户响应的示例。您可以进一步了解此API的功能
public类主扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共无效开始(阶段primaryStage){
VBox窗格=新的VBox(10);
窗格。设置填充(新插图(10));
按钮btnShowDialog=新建按钮(“显示弹出窗口”);
//设置单击时调用showPopup()方法的操作
设置操作(e->showPopup());
pane.getChildren().add(btnShowDialog);
场景=新场景(窗格);
初级阶段。场景(场景);
primaryStage.show();
}
私有void showPopup(){
警报警报=新警报(警报.警报类型.确认);
alert.setTitle(“删除联系人?”);
alert.setHeaderText(“您确定要删除此联系人吗?”);
//设置警报的可用按钮
按钮类型btnYes=新按钮类型(“是”);
按钮类型btnNo=新按钮类型(“否”);
alert.getButtonTypes().setAll(btnYes,btnNo);
//这允许您从用户那里获得响应
可选结果=alert.showAndWait();
if(result.isPresent()){
if(result.get()==btnYes){
System.out.println(“用户单击是!”);
}else if(result.get()==btnNo){
System.out.println(“用户单击否!”);
}
}
}
}
您应该使用不同的控制器:您只需在它们之间设置适当的通信即可。请看,您还不清楚要实现什么,但是使用JavaFXAlert
类是否可以实现这一点?
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
VBox pane = new VBox(10);
pane.setPadding(new Insets(10));
Button btnShowDialog = new Button("Show Popup");
// Set the action to call the showPopup() method when clicked
btnShowDialog.setOnAction(e -> showPopup());
pane.getChildren().add(btnShowDialog);
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
}
private void showPopup() {
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Delete Contact?");
alert.setHeaderText("Are you sure you want to delete this contact?");
// Set the available buttons for the alert
ButtonType btnYes = new ButtonType("Yes");
ButtonType btnNo = new ButtonType("No");
alert.getButtonTypes().setAll(btnYes, btnNo);
// This allows you to get the response back from the user
Optional<ButtonType> result = alert.showAndWait();
if (result.isPresent()) {
if (result.get() == btnYes) {
System.out.println("User clicked Yes!");
} else if (result.get() == btnNo) {
System.out.println("User clicked No!");
}
}
}
}