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차원 배열에 저장합니다:
String[][] arr = new String[10][];//开辟一个10行的二维数组 String[] row1 = {"id","name","sex","age"}; arr[0] = row1;//存进二维数组
g. JTable은 헤더를 표시하지 않습니다. JTable 객체를 Pane
JTable table = new JTable(表内容,表头); JScrollPane jScrollPane = new JScrollPane(table); SwingNode swingNode = new SwingNode(); swingNode.setContent(jScrollPane);//使用swingNode封装swing组件,就可以在Javafx中用了
CsvReader의 기본 메소드에 넣어야 합니다. 새로운 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 내용의 한 줄을 읽으면 다음에 호출할 때 다음 줄로 전환됩니다. 일반적으로 우리는 while 루프를 사용하여 모든 내용을 한 줄씩 시간에 맞춰 작업합니다
String getRawRecord() 한 줄 읽기 Data
while (reader.readRecord()){ System.out.println(reader.getRawRecord());//输出一行内容 }
@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로 가져오는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!