Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一控制器JavaFX中创建弹出菜单?_Java_Eclipse_Javafx_Netbeans_Fxml - Fatal编程技术网

如何在同一控制器JavaFX中创建弹出菜单?

如何在同一控制器JavaFX中创建弹出菜单?,java,eclipse,javafx,netbeans,fxml,Java,Eclipse,Javafx,Netbeans,Fxml,我对在我的代码中使用弹出菜单有一个问题,我设置它的方式是,如果单击一个按钮,它将打开一个新的场景(如果他们想删除某些内容,会提示) 然而,新场景是另一个带有自己控制器的FXML文件,当我试图让新的FXML控制器删除某些内容时,它不会工作,因为代码不在同一个控制器中,所以我无法从第一个控制器执行代码 现在我只想在同一个类中打开一个对话,但我不知道如何将代码转换为在同一个控制器中。这是我想保存在同一控制器中的FXML代码 <AnchorPane id="AnchorPane" prefHeig

我对在我的代码中使用弹出菜单有一个问题,我设置它的方式是,如果单击一个按钮,它将打开一个新的场景(如果他们想删除某些内容,会提示)

然而,新场景是另一个带有自己控制器的FXML文件,当我试图让新的FXML控制器删除某些内容时,它不会工作,因为代码不在同一个控制器中,所以我无法从第一个控制器执行代码

现在我只想在同一个类中打开一个对话,但我不知道如何将代码转换为在同一个控制器中。这是我想保存在同一控制器中的FXML代码

<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(“用户单击否!”);
}
}
}
}

您应该使用不同的控制器:您只需在它们之间设置适当的通信即可。请看,您还不清楚要实现什么,但是使用JavaFX
Alert
类是否可以实现这一点?
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!");
            }
        }

    }
}