Rumah >Java >javaTutorial >Cara mengimport fail CSV ke JTable untuk paparan menggunakan Java

Cara mengimport fail CSV ke JTable untuk paparan menggunakan Java

WBOY
WBOYke hadapan
2023-04-21 23:34:061083semak imbas

Ikhtisar

Mata pengetahuan utama

a.Kelas SwingNode: Merangkum komponen Java swing ke dalam JavaFX Node, supaya Java Swing boleh disarangkan dengan JavaFX adalah jelek , tetapi operasinya mudah. ​​Komponen jadual JavaFX (TableView, dsb.) agak rumit, jadi pilih JavaSwing bersarang untuk menggunakannya. fail dan boleh melakukan satu siri operasi Walaupun ia tidak lagi dikemas kini selepas 2008, ia sudah cukup untuk mengendalikan fail csv.

c.FileChoose class: Pemilih fail untuk JavaFX yang boleh membuka pengurus sumber tempatan Sama ada UI itu cantik atau tidak bergantung pada versi sistem anda.

Kelas d.CsvReader: kelas alat di bawah pakej javacsv-2.0.jar, terutamanya digunakan untuk mengendalikan fail csv

Kelas e.JTable: buat contoh JTable untuk membuat fail csv Selepas dibuka paparan, anda perlu memberi perhatian kepada susunan parameter Kandungan jadual ialah tatasusunan dua dimensi, dan pengepala ialah tatasusunan satu dimensi

f ke dalam tatasusunan satu dimensi:
JTable table = new JTable(表格内容,表头);

g JTable tidak memaparkan pengepala: anda perlu meletakkan objek JTable ke dalam Pane
String[][] arr = new String[10][];//开辟一个10行的二维数组
String[] row1 = {"id","name","sex","age"};
 
arr[0] = row1;//存进二维数组

Kaedah utama CsvReader
JTable table = new JTable(表内容,表头);
JScrollPane jScrollPane = new JScrollPane(table);
 
SwingNode swingNode = new SwingNode();
swingNode.setContent(jScrollPane);//使用swingNode封装swing组件,就可以在Javafx中用了

    CsvReader baharu (String filePath) Apabila memulakan pembinaan, anda perlu memasukkan alamat fail csv tempatan
  • boolean readHeaders() membaca pengepala dan langkau
  • String[] getHeaders() mendapat pengepala fail csv (sangat pelik, anda perlu memanggil kaedah readHeaders() sebelum anda boleh mendapatkannya, jika tidak, batal pengecualian penunjuk akan dilaporkan)
  • Itu sahaja:

CsvReader reader = new CsvReader("xxx.csv");
reader.readHeaders(); //没有这句话,执行下面会报错
String[] head = reader.getHeaders();
    boolean readRecord() membaca baris kandungan csv selagi anda memanggilnya, kali seterusnya anda memanggilnya, ia akan bertukar ke baris seterusnya csv Biasanya kami menggunakan gelung sementara untuk Mengendalikan semua baris demi baris tepat pada masanya
  • String getRawRecord(. ) Baca baris data
Instance - Baca salah satu fail csv desktop setempat
while (reader.readRecord()){
    System.out.println(reader.getRawRecord());//输出一行内容
}

Paparan kesan
@Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("文件选择器");
        primaryStage.setHeight(600);
        primaryStage.setWidth(800);
 
        final FileChooser fileChooser = new FileChooser();
 
        //设置打开资源管理器后的文件过滤
        fileChooser.getExtensionFilters().addAll(
                new FileChooser.ExtensionFilter("All Images","*.*"),
                new FileChooser.ExtensionFilter("PNG","*.png"),
                new FileChooser.ExtensionFilter("MP4","*.mp4"),
                new FileChooser.ExtensionFilter("CSV","*.csv")
        );
 
        final Button open = new Button("打开文件");
 
        final GridPane inputGridPane = new GridPane();//创建格子布局面板
        GridPane.setConstraints(open,0,0);//第0行0列
 
        inputGridPane.setHgap(6.0);//设置水平间距
        inputGridPane.setVgap(6.0);//设置垂直间距
        inputGridPane.getChildren().addAll(open);//添加按钮
 
        final Pane rootGroup = new VBox(12);//创建一个垂直盒子布局器
        rootGroup.getChildren().addAll(inputGridPane);//把格子面板放进来
        rootGroup.setPadding(new Insets(12,12,12,12));
 
        primaryStage.setScene(new Scene(rootGroup));
        primaryStage.show();
 
//设置点击-打开文件-的动作事件
open.setOnAction(event -> {
            File file = fileChooser.showOpenDialog(primaryStage);//在当前窗口打开文件选择器
            if (file != null){
                try {
                    FileInputStream inputStream = new FileInputStream(file);
                    BufferedInputStream stream = new BufferedInputStream(inputStream);
                    String fileName = file.getName();
                    String filePath = file.getAbsolutePath();
                    System.out.println("文件路径 = "+filePath);
                    try {
                        CSVDemo.read(filePath);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }    
                    //封装JTable,使得JTable和Javafx嵌套在一起    
                    SwingNode swingNode = new SwingNode();
                    try {
                        JTable table = read(filePath);
                        JScrollPane jScrollPane = new JScrollPane(table);
                        swingNode.setContent(jScrollPane);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                //设置JTable打开后表格的相对位置
                GridPane.setConstraints(swingNode,0,1);
                    inputGridPane.getChildren().add(swingNode);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        });
}
//读取csv文件并把它读取到JTable中返回
public static JTable read(String filePath) throws IOException {
 
            CsvReader reader = new CsvReader(filePath);
            reader.readHeaders();//跳过表头
            String[] head = reader.getHeaders();
 
            List<String []> list = new ArrayList<>();
            String s = reader.getRawRecord();
            System.out.println("表头 "+s);
            String[] r1 = dataToArray(s);
//            list.add(r1);
 
            while (reader.readRecord()) {
                System.out.println(reader.getRawRecord());
                list.add(dataToArray(reader.getRawRecord()));
            }
        String[][] data = new String[list.size()][];
        System.out.println("一共"+list.size()+"行数据");
        for (int i = 0; i < data.length; i++) {
            data[i] = list.get(i);
        }
            JTable table = new JTable(data,head);
            return table;
 
    }
//将每一行的数据从String转为String数组
    public static String[] dataToArray(String row){
        String[] res = row.split(",");
        return res;
    }

Cara mengimport fail CSV ke JTable untuk paparan menggunakan JavaJScrollPane merangkum JTable, SwingNode merangkum JScrollPane

Atas ialah kandungan terperinci Cara mengimport fail CSV ke JTable untuk paparan menggunakan Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam