在JAVA FX中发出警报

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JAVA FX中发出警报相关的知识,希望对你有一定的参考价值。

我想在尝试创建具有相同名称的文件时已存在文件时显示警报。我还没有完全完成代码。我想从UI中检索按钮值是/否。

码:

这就是控制器的编码方式。

package application;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.TreeMap;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

public class WarningController implements Initializable 
    @FXML
    public Button yes;

    @FXML
    public Button no;

    public static String type;

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) 
        // TODO Auto-generated method stub

    

     public String confirmSelection(ActionEvent event)throws IOException
         Button button = (Button) event.getSource();
             type = button.getText();
            if(type.equals("Yes"))
                Stage stage = (Stage) yes.getScene().getWindow();
                stage.close();
                //System.out.println("Yes");
                return type;
            
            else
                //System.out.println("No");
                Stage stage1 = (Stage) no.getScene().getWindow();
                stage1.close();
                return type;
            

     
/********************************************************************************/
     public void writesheet(String[][] result,String ComboValue,String[] heading) throws IOException 
            //Create blank workbook
            XSSFWorkbook workbook = new XSSFWorkbook(); 
            //Create a blank sheet
            XSSFSheet spreadsheet = workbook.createSheet( " Employee Info ");
            //Create row object
            XSSFRow row;

            String[][] towrite=result;
            int rows=towrite.length;
            //int cols=towrite[0].length;
           // System.out.println(rows +"    "+ cols);

            Map < String, Object[] > empinfo = new TreeMap < String, Object[] >();
            empinfo.put("0", heading);
            for(int i=1;i<=rows;i++)
                empinfo.put( Integer.toString(i),towrite[i-1]);
            


            //Iterate over data and write to sheet
            Set < String > keyid = empinfo.keySet();
            int rowid = 0;
            for (String key : keyid)
            
               row = spreadsheet.createRow(rowid++);
               Object [] objectArr = empinfo.get(key);
               int cellid = 0;
               for (Object obj : objectArr)
               
                  Cell cell = row.createCell(cellid++);
                  //cell.setCellValue((String)obj);
                  cell.setCellValue(obj.toString());
               
            

            //Write the workbook in file system
            File f=new File(("C:\\"+ComboValue+".xlsx"));
            if(f.exists())
                Stage primaryStage=new Stage();
                Parent root=FXMLLoader.load(getClass().getResource("/application/Warning.fxml"));
                Scene scene = new Scene(root,350,150);
                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                primaryStage.setScene(scene);
                primaryStage.show();
                System.out.println(type);
            
            FileOutputStream out = new FileOutputStream(f);
            workbook.write(out);
            out.close();
            System.out.println(ComboValue+"  "+"Excel document written successfully" );
            workbook.close();
            



我想在写入功能中使用按钮值(存储在String类型中)。现在它返回NULL。

请建议是否有任何其他方式来显示警告。我正在使用两个fxml文件,这是第二个excel文件。

enter image description here

  [1]: http://i.stack.imgur.com/ZK6UC.jpg
答案

只需使用Alert类。它为您需要的大多数是/否对话框提供功能。

Alert alert = new Alert(AlertType.WARNING, 
                        "File already exists. Do you want to override?", 
                        ButtonType.YES, ButtonType.NO);

Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.YES)
    // ... user chose YES
 else 
    // ... user chose NO or closed the dialog

here也是一个很好的教程。

另一答案

我通常会创建一个方法,如果不满足某些条件,则调用它。例如:

if(condition)
      alert();



public void alert()  //alert box

Alert alert = new Alert(AlertType.WARNING,"", ButtonType.YES, ButtonType.NO);  //new alert object
    alert.setTitle("Warning!");  //warning box title
    alert.setHeaderText("WARNING!!!");// Header
    alert.setContentText("File already exists. Overwrite?"); //Discription of warning
    alert.getDialogPane().setPrefSize(200, 100); //sets size of alert box 

    Optional<ButtonType> result = alert.showAndWait();
    if (result.get() == ButtonType.YES)
        // ... user chose YES
     else 
        // ... user chose NO or closed the dialog
    


enter image description here

我从Jhonny007中获取了一些代码,归功于他。

以上是关于在JAVA FX中发出警报的主要内容,如果未能解决你的问题,请参考以下文章

在没有重定向的 Rails 控制器中发出警报

弹出警报过早显示?

像弹出警报视图时一样暗淡的背景

在异常情况下发出警报

在 python 3 中使用弹出警报身份验证抓取网页

收到推送通知且应用程序在前台时如何防止弹出警报