ホームページ  >  記事  >  Java  >  Java を使用して CSV ファイルを JTable にインポートして表示する方法

Java を使用して CSV ファイルを JTable にインポートして表示する方法

WBOY
WBOY転載
2023-04-21 23:34:061037ブラウズ

概要

主な知識ポイント

a.SwingNode クラス: Java Swing コンポーネントを JavaFX ノードにカプセル化し、Java Swing を JavaFX でネストできるようにします。JavaSwing は醜いですが、操作は簡単です JavaFXのテーブルコンポーネント(TableViewなど)は少し複雑なので、ネストされたJavaSwingを選択して使用します 見苦しいだけです

b.javacsv-2.0.jar: csvの読み込みに使用します2008年以降更新されなくなりましたが、csvファイルの操作であれば十分です。

c.FileChoose クラス: ローカルリソースマネージャーを開くことができる JavaFX 用のファイルセレクター UI が美しいかどうかはシステムのバージョンに依存します。

d.CsvReader クラス: javacsv-2.0.jar パッケージ内のツールクラス。主に csv ファイルの操作に使用されます。

e.JTable クラス: csv ファイルを作成するための JTable インスタンスを作成します 開いた後表示ではパラメータの順序に注意する必要があります。テーブルの内容は 2 次元配列であり、ヘッダーは 1 次元配列

JTable table = new JTable(表格内容,表头);

f です。1 桁の配列を1 次元配列:

String[][] arr = new String[10][];//开辟一个10行的二维数组
String[] row1 = {"id","name","sex","age"};
 
arr[0] = row1;//存进二维数组

g. JTable はヘッダーを表示しません: JTable オブジェクトをペインに配置する必要があります

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

CsvReader のメイン メソッド

  • #new CsvReader(String filePath) 初期化構造 ローカル CSV ファイル アドレスを渡す必要がある場合

    ##boolean readHeaders() ヘッダーを読み取り、
  • ## をスキップします
  • #String[] getHeaders() CSV ファイルのヘッダーを取得します (非常に奇妙ですが、取得する前に readHeaders() メソッドを呼び出す必要があります。そうしないと、null ポインター例外が報告されます)

  • 以上です:

    CsvReader reader = new CsvReader("xxx.csv");
    reader.readHeaders(); //没有这句话,执行下面会报错
    String[] head = reader.getHeaders();

boolean readRecord() は CSV コンテンツの行を読み取ります。呼び出している限り、次回呼び出したときにそれが読み込まれます。 csv の次の行に切り替わります。通常は while ループを使用して、すべてのコンテンツを 1 行ずつ時間内に操作します

  • String getRawRecord() データの行を読み取ります

  • while (reader.readRecord()){
        System.out.println(reader.getRawRecord());//输出一行内容
    }

    例 - ローカル デスクトップ上の CSV ファイルを読み取る

    @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;
        }
  • Effect Display

JScrollPane は JTable をカプセル化し、SwingNode は JScrollPane をカプセル化します

Java を使用して CSV ファイルを JTable にインポートして表示する方法

以上がJava を使用して CSV ファイルを JTable にインポートして表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。