从fileChooser中选择文件并将其添加到tableview(javafx)

时间:2017-06-26 21:13:44

标签: javafx

我尝试将fileChooser中选定的Excel文件添加到目录中,然后将其显示在表格中(TableView)。我有一些事先将文件添加到目录中,但excel文件最终会被破坏。即使我确实手动移动了文件(以便文件不会损坏),表格也无法正确显示文件名。

它看起来像这样:

忽略第二个表格我还没有做任何事情。按Add Excel File打开文件浏览器并只显示excel文件。第一个表从目录中获取文件并启动但是然后文件的名称不显示。只有一个突出显示可能存在某些内容。

TableView<File> files = new TableView();
TableColumn sheets = new TableColumn();
files.getColumns().add(sheets);
files.getItems().addAll(sSheets.listFiles());
optionsWind.add(files, 0, 1);

Label tLabel = new Label("Your Templates");
optionsWind.add(tLabel, 1, 0);

TableView<File> template = new TableView();
TableColumn t = new TableColumn();
t.getColumns().add(t);
template.getItems().addAll(templates.listFiles());
optionsWind.add(template, 1, 1);

//Buttons grid
GridPane buttons = new GridPane();
buttons.setAlignment(Pos.CENTER);
buttons.setVgap(20);

//excel file
Button addFile = new Button();
addFile.setText("Add Excel File");
buttons.add(addFile, 0, 1);
addFile.setOnAction(new EventHandler<ActionEvent>(){
     public void handle(ActionEvent e){                             
         FileChooser excChs = new FileChooser();
         excChs.setTitle("Open Excel File");
         excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
         File selectFile = excChs.showOpenDialog(secondaryStage);

         //add stuff here
}});

1 个答案:

答案 0 :(得分:0)

您可以使用此应用程序来更好地了解如何在新位置保存文件。你应该在另一个主题上问你的另一个问题。一个帖子应该只有一个问题。

一个按钮加载Excel文件。另一个按钮将加载的文件保存到您选择的位置,并使用您选择的名称。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication132 extends Application
{
    byte[] fileContent;

    @Override
    public void start(Stage primaryStage)
    {


        Button btn = new Button();
        btn.setText("Load file");
        btn.setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event)
            {
                try 
                {
                    FileChooser excChs = new FileChooser();
                    excChs.setTitle("Open Excel File");
                    excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
                    File selectFile = excChs.showOpenDialog(primaryStage);
                    fileContent = Files.readAllBytes(selectFile.toPath());
                    System.out.println("File loaded!");
                }
                catch (IOException ex) {
                    System.out.println(ex.toString());
                }
            }
        });

        Button btnSaveFile = new Button();
        btnSaveFile.setText("Save loaded file");
        btnSaveFile.setOnAction((event)->{
            try 
            {
                FileChooser excChs = new FileChooser();
                excChs.setTitle("Save Excel File");
                excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
                File saveFile = excChs.showSaveDialog(primaryStage);
                if(saveFile != null && fileContent.length > 0)
                {
                    Files.write(saveFile.toPath(), fileContent);
                    System.out.println("File saved!");
                }
            }
            catch (IOException ex) {
                System.out.println(ex.toString());
            }
        });

        VBox root = new VBox();
        root.getChildren().addAll(btn, btnSaveFile);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }


}

如果您知道要将文件保存到哪个目录,则应对其进行硬编码。此示例显示了如何完成此操作。

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
import javafx.stage.Stage;

/**
 *
 * @author blj0011
 */
public class JavaFXApplication132 extends Application
{
    byte[] fileContent;

    @Override
    public void start(Stage primaryStage)
    {


        Button btn = new Button();
        btn.setText("Load file");
        btn.setOnAction(new EventHandler<ActionEvent>()
        {

            @Override
            public void handle(ActionEvent event)
            {
                try 
                {
                    FileChooser excChs = new FileChooser();
                    excChs.setTitle("Open Excel File");
                    excChs.getExtensionFilters().addAll(new ExtensionFilter("Excel Files", "*.xlsx"));
                    File selectFile = excChs.showOpenDialog(primaryStage);
                    fileContent = Files.readAllBytes(selectFile.toPath());
                    System.out.println("File loaded!");

                    String directoryToSaveFile = "TheAbsolutePathToSavingDirectory";<--Change this
                    File saveFile = new File(directoryToSaveFile + selectFile.getName());
                    if(saveFile.createNewFile())
                    {
                        if(fileContent.length > 0)
                        {
                            Files.write(saveFile.toPath(), fileContent);
                            System.out.println("File saved to " + saveFile.getAbsolutePath());
                        }
                    }
                    else
                    {
                        System.out.println("No file was created!");
                    }
                }
                catch (IOException ex) {
                    System.out.println(ex.toString());
                }
            }
        });



        VBox root = new VBox();
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
        launch(args);
    }  
}