2017-06-28 27 views
5

मैंने एक साधारण जीयूआई बनाया जहां मेरे पास TextArea है। TextArea स्वयं Array द्वारा पॉप्युलेट किया जाएगा, जिसमें .txt फ़ाइल से स्कैन किए गए स्ट्रिंग्स शामिल हैं।जावाएफएक्स (टेक्स्टएरिया विकल्प) में बड़ी txt फ़ाइलों का उपयोग

यह छोटे आकार की फ़ाइलों के लिए बहुत अच्छा काम करता है। बड़ी फ़ाइलों का उपयोग करते समय (~ 5MB प्रति txt.-file) हालांकि, TextArea (और केवल TextArea) लग रहा है और धीमा (जैसा कि मुझे पसंद है उतना उत्तरदायी नहीं)। क्या TextArea का कोई विकल्प है (JavaFX में होना आवश्यक नहीं है)?

मैं कुछ बहुत सरल खोज रहा हूं, जो मूल रूप से मुझे & सेट टेक्स्ट प्राप्त करने की अनुमति देता है। Slidercontrol, JavaFXTextArea में, बहुत आसान होगा।

धन्यवाद और आपका दिन बहुत अच्छा है!

संपादित करें: मेरी कोड का एक बहुत ही बुनियादी उदाहरण:

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

सबसे अधिक मात्रा में डेटा नियंत्रण डेटा (अपेक्षित पंक्तियाँ) का ही हिस्सा प्रदान करने के लिए, 'आभासी मोड' की है। लेकिन यह –

+0

प्राप्त करने और सेट करने जैसा आसान नहीं है आपको एक [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (https://stackoverflow.com/help/mcve) बनाने और कोड पोस्ट करने की आवश्यकता है। – Sedrick

+0

@SedrickJefferson यहां एक उदाहरण है, जैसा कि दिशानिर्देश में वर्णित है (प्रारंभ पोस्ट संपादित करें) – Matt

उत्तर

5

@ मैट के answer और @ सेड्रिक जेफरसन के suggestion पर आधारित, यहां एक पूरा उदाहरण है। जावा में

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

@SedrickJefferson के लिए धन्यवाद मैं एक ListView साथ TextArea बदल दिया। यह अब बहुत चिकनी है। इसके अलावा मैं प्रदर्शन के कारण BufferedReader के साथ Scanner को प्रतिस्थापित कर दूंगा।

संबंधित मुद्दे