2017-01-20 1 views
-1

Je travaille sur un jeu. Dans cette partie, une nouvelle fenêtre s'ouvre pour montrer les instructions du jeu. Le seul problème est que JTextArea montre seulement une ligne du fichier .txt, quand il y a plus de 20 lignes. Je suis un débutant à ce sujet, donc je ne suis pas sûr de ce que je manque. Merci!Java Swing JTextArea ne fonctionne pas

class Instruction extends JFrame 
{ 
private JTextArea read; 
private JScrollPane scroll; 
Instruction(String x) 
{ 
super(x); 

try 
{ 
    BufferedReader readers = new BufferedReader (new FileReader("instructions.txt")); //read from file 

    read = new JTextArea(readers.readLine()); 
    scroll = new JScrollPane(read); 
    read.setFont(new Font("Comic Sans MS", Font.BOLD, 16)); // change font 
    read.setEditable(false); 
    add(read); 
} 

catch(IOException exception) 
{ 
    exception.printStackTrace(); 
} 
} 
}  
+1

'readers.readLine()' lit seulement une ligne – MadProgrammer

+0

.............. yikes! –

Répondre

3

BufferedReader#readLine ne lit que la ligne suivante (ou retourne null s'il n'y a plus de lignes à lire)

Si vous regardez de plus près la JavaDoc, vous constaterez que JTextArea hérité read(Reader, Object) de JTextComponent , qui résoudra (plus) de vos problèmes

Quelque chose de plus le long des lignes de

read = new JTextArea(); 
try (Reader reader = new BufferedReader(new FileReader("instructions.txt"))) { 
    read.read(reader, null); 
} catch (IOException exception) { 
    exception.printStackTrace(); 
} 
scroll = new JScrollPane(read); 
read.setFont(new Font("Comic Sans MS", Font.BOLD, 16)); // change font 
read.setEditable(false); 
add(read); 

peut réaliser ce que vous essayez de faire

En outre, vous devrez peut-être appeler

read.setLineWrap(true); 
read.setWrapStyleWord(true); 

pour permettre l'emballage automatique des mots si elles vont au-delà des frontières visibles de la région.

-1

Vous lisez une seule ligne d'un fichier. Essayez d'utiliser ceci au lieu de charger le fichier entier.

List<String> lines; 
try { 
    lines = Files.readAllLines(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 

StringBuilder text = new StringBuilder(); 
for (String line : lines) { 
    text.append(line); 
} 

read = new JTextArea(text.toString()); 
+0

'JTextArea # read' fera en une ligne qui vous a pris ~ 5 ... mais je suis paresseux: P – MadProgrammer

+0

@MadProgrammer Ouais, bien ne savais pas de celui-là. – ElectroWeak