2013-07-06 5 views
0

텍스트 파일을 열고 그 값을 String 변수에 더한 다음 JTextArea으로 설정하려고합니다. 무엇을 하든지 관계없이 항상 텍스트 영역에 아무 것도 반환하지 않습니다. 명확한 버튼을 눌렀을 때처럼 텍스트를 변경하고 싶지만, Test.txt 파일에있는 내용으로 변경하고 싶습니다.텍스트 파일을 JTextArea로 읽으려고 시도했습니다.

package texteditor; 

import java.awt.FlowLayout; 
import java.awt.datatransfer.Clipboard; 
import java.awt.datatransfer.StringSelection; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JTextArea; 

public class GUI extends JFrame { 
    //GUI Variables 

    private JButton save; 
    private JButton clear; 
    private JButton copy; 
    private JButton paste; 
    private JButton open; 
    private JTextArea textField; 
    private StringSelection stringSelection; 
    private Clipboard clipboard; 
    String textFieldWritable; 

    public GUI() { 
     super("Text Editor"); 
     //Sets Layout 
     setLayout(new FlowLayout()); 

     save = new JButton("Save"); 
     add(save); 
     clear = new JButton("Clear"); 
     add(clear); 
     open = new JButton("Open"); 
     add(open); 


     textField = new JTextArea(10, 35); 
     add(textField); 

     handler handle = new handler(); 

     save.addActionListener(handle); 
     clear.addActionListener(handle); 

    } 

    private class handler implements ActionListener { 

     @Override 
     public void actionPerformed(ActionEvent event) { 
      if (event.getSource() == save) { 
       textFieldWritable = String.format("%s", textField.getText()); 
       try { 
        FileWriter fileWrite = new FileWriter("Text.txt"); 
        PrintWriter printWrite = new PrintWriter(fileWrite); 

        printWrite.println(textFieldWritable); 
        printWrite.close(); 
       } catch (IOException e) { 
        JOptionPane.showMessageDialog(null, 
         "Error, File Already Exists!", "Error", 
         JOptionPane.ERROR_MESSAGE); 
       } 
      } else if (event.getSource() == clear) { 
       textField.setText(""); 
      } else if (event.getSource() == open) { 
       try { 
        FileReader fileReader = new FileReader("Text.txt"); 
        BufferedReader bufferedReader = new BufferedReader(fileReader); 

        String inputFile = ""; 
        String textFieldReadable = bufferedReader.readLine(); 

        while (textFieldReadable != null) { 
         inputFile += textFieldReadable; 
         textFieldReadable = bufferedReader.readLine(); 
        } 
        System.out.println("inputFile"); 
       } catch (FileNotFoundException ex) { 
        System.out.println("no such file exists"); 
       } catch (IOException ex) { 
        System.out.println("unkownerror"); 
       } 
      } 
     } 
    } 
} 
+1

내가 ['JTextArea에 번호 읽기 (리더, Object)를'] (가 제공하는 붙박이 기능을 사용하는 것이 좋습니다 것 http://docs.oracle.com /javase/7/docs/api/javax/swing/text/JTextComponent.html#read%28java.io.Reader,%20java.lang.Object%29) – MadProgrammer

+0

또한 readLine()을 사용할 때 endline 문자가 느슨해집니다. readLine()은 텍스트가없는 텍스트를 반환하기 때문입니다. –

답변

3

필자에게 읽은 텍스트를 텍스트 영역으로 설정하지 않은 것처럼 보입니다.

try { 
    FileReader fileReader = new FileReader("Text.txt"); 
    BufferedReader bufferedReader = new BufferedReader(fileReader); 

    String inputFile = ""; 
    String textFieldReadable = bufferedReader.readLine(); 

    while (textFieldReadable != null){ 
     inputFile += textFieldReadable; 
     textFieldReadable = bufferedReader.readLine();      
    } 
    System.out.println("inputFile"); 
    // Opps // 
    textField.setText(inputFile); 

} 
catch (FileNotFoundException ex) { 
    System.out.println("no such file exists"); 
} 
catch (IOException ex) { 
    System.out.println("unkownerror"); 
} 

개인적으로, 난 그냥 기능이 JTextComponent에 의해 제공 사용하고 그것을 Reader를 통과하고 그 자체를 읽을 수 있도록 것입니다.

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileReader; 
import java.io.Reader; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextArea; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TextAreaReadTest { 

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

    public TextAreaReadTest() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     private JTextArea textArea; 

     public TestPane() { 
      setLayout(new BorderLayout()); 
      textArea = new JTextArea(10, 80); 
      add(new JScrollPane(textArea)); 
      JButton read = new JButton("Read"); 
      read.addActionListener(new ActionListener() { 

       @Override 
       public void actionPerformed(ActionEvent e) { 
        Reader reader = null; 
        try { 
         reader = new FileReader(new File("D:/SWANH.txt")); 
         textArea.read(reader, "The force is strong with this one"); 
        } catch (Exception exp) { 
         exp.printStackTrace(); 
        } finally { 
         try { 
          reader.close(); 
         } catch (Exception exp) { 
         } 
        } 
       } 
      }); 
      add(read, BorderLayout.SOUTH); 
     } 

    } 

} 
+0

네, 고맙습니다. – user2555459

0

이 코드는 나를 위해 일한

public DisplayText() throws IOException { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 450, 300); 
    contentPane = new JPanel(); 
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
    setContentPane(contentPane); 
    contentPane.setLayout(null); 

    textArea.setBounds(15, 13, 424, 210); 
    textArea.setEditable(false); 
    contentPane.add(textArea); 

    JScrollPane scrollPane = new JScrollPane(textArea); 
    scrollPane.setBounds(12, 12, 424, 185); 
    contentPane.add(scrollPane); 

    JButton btnPatchDetails = new JButton("Details"); 
    btnPatchDetails.setBounds(135, 234, 137, 25); 
    contentPane.add(btnPatchDetails); 

    btnPatchDetails.addActionListener(this); 
    btnPatchDetails.setActionCommand("Patch Details"); 

    JButton btnNext = new JButton("Next"); 
    btnNext.setBounds(314, 234, 107, 25); 
    contentPane.add(btnNext); 

    JLabel lblDependancyPatchAvailable = new JLabel("Dependancy Patch Available : "); 
    lblDependancyPatchAvailable.setBounds(22, 209, 220, 15); 
    contentPane.add(lblDependancyPatchAvailable); 

    lblAvailability.setBounds(254, 209, 61, 15); 
    contentPane.add(lblAvailability); 
} 

public void actionPerformed(ActionEvent e) { 
    if ("Patch Details".equals(e.getActionCommand())) { 
     BufferedReader reader = null; 
     JarFile jarFile = null; 
     try { 

      String inputFile = "readMe/tempReadme.txt"; 
      String write; 

      jarFile = new JarFile(inputJar); 
       JarEntry entry = jarFile.getJarEntry(inputFile); 

       reader = new BufferedReader(new InputStreamReader(jarFile.getInputStream(entry))); 
       String line,searchStr = "Patch Details",endStr = "Problem:"; 
       boolean readFlag = false; 
       boolean writeFlag = false; 

       while ((line = reader.readLine()) != null) { 

        if (line.trim().contains(searchStr)) { 
         readFlag = true; 
        } 

        if (line.trim().equals(endStr)) { 
         break; 
        } 

        if (readFlag) { 
         StringTokenizer tempTokenizer = new StringTokenizer(line,""); 
         while (tempTokenizer.hasMoreElements()) { 
          write = tempTokenizer.nextToken(); 
         textArea.append(write + "\n"); 
         } 
        } 
        writeFlag = true; 
       } 
       if(writeFlag){ 
        lblAvailability.setText("YES"); 
       } else { 
        lblAvailability.setText(""); 
       } 

       lblAvailability.getText(); 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } finally { 

       try { 
        jarFile.close(); 
        reader.close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } 
    } 
관련 문제