2017-06-28 11 views
5

Tôi đã tạo một GUI đơn giản nơi tôi có TextArea. Bản thân số TextArea sẽ được điền bởi một số Array, chứa các chuỗi được quét ra khỏi tệp .txt.Sử dụng các tệp txt lớn trong JavaFX (các lựa chọn thay thế TextArea?)

Điều này phù hợp với các tệp có kích thước nhỏ hơn. Tuy nhiên, khi sử dụng các tệp lớn (~ 5MB cho mỗi tệp txt.-file), số TextArea (và chỉ TextArea) có độ trễ và chậm (không đáp ứng như tôi muốn). Có cách nào khác thay thế cho số TextArea (không phải trong số JavaFX) không?

Tôi đang tìm nội dung rất đơn giản, về cơ bản cho phép tôi nhận được văn bản đặt &. Slidercontrol, như trong JavaFXTextArea, sẽ rất tiện dụng.

Cảm ơn bạn và chúc bạn một ngày tuyệt vời!

Edit: một ví dụ rất cơ bản của mã của tôi:

public class Main extends Application { 

public void start(Stage stage) { 
    Pane pane = new Pane(); 
    TextField filePath = new TextField("Filepath goes in here..."); 
    TextArea file = new TextArea("Imported file strings go here..."); 
    file.relocate(0, 60); 
    Button btnImport = new Button("Import file"); 
    btnImport.relocate(0, 30); 
    ArrayList<String> data = new ArrayList<>(); 

    btnImport.setOnAction(e -> { 
     File fileToImport = new File(filePath.getText()); 
     try { 
      Scanner scanner = new Scanner(fileToImport); 
      while(scanner.hasNextLine()) { 
       data.add(scanner.nextLine()); 
      } 
      file.setText(data.toString()); 
     } catch (FileNotFoundException e1) { 
      e1.printStackTrace(); 
     } 
    }); 

    pane.getChildren().addAll(filePath, file, btnImport); 
    Scene scene = new Scene(pane); 
    stage.setScene(scene); 
    stage.show(); 
} 

public static void main(String[] args){ 
    launch(); 
} 
} 
+0

cao nhất khối lượng kiểm soát dữ liệu trong Java có 'chế độ ảo', để cung cấp chỉ là một phần của dữ liệu (hàng yêu cầu). Nhưng nó không đơn giản như get & set –

+0

Bạn cần tạo một [Minimal, Complete, và Verifiable example] (https://stackoverflow.com/help/mcve) và đăng mã. – Sedrick

+0

@SedrickJefferson Dưới đây là một ví dụ, như được mô tả trong hướng dẫn (chỉnh sửa bài viết bắt đầu) – Matt

Trả lời

5

Dựa trên @ Matt's answer và @ SedrickJefferson's suggestion, đây là ví dụ hoàn chỉnh.

image

import java.io.*; 
import javafx.application.*; 
import javafx.collections.*; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.Stage; 

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     VBox pane = new VBox(); 
     Button importButton = new Button("Import"); 
     TextField filePath = new TextField("/usr/share/dict/words"); 
     ObservableList<String> lines = FXCollections.observableArrayList(); 
     ListView<String> listView = new ListView<>(lines); 
     importButton.setOnAction(a -> { 
      listView.getItems().clear(); 
      try { 
       BufferedReader in = new BufferedReader 
        (new FileReader(filePath.getText())); 
       String s; 
       while ((s = in.readLine()) != null) { 
        listView.getItems().add(s); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     }); 
     pane.getChildren().addAll(importButton, filePath, listView); 
     Scene scene = new Scene(pane); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 
2

Nhờ @SedrickJefferson tôi thay thế TextArea với một ListView. Nó chạy rất trơn tru ngay bây giờ. Bên cạnh đó tôi sẽ thay thế Scanner bằng BufferedReader, do Hiệu suất.

Các vấn đề liên quan