2017-09-27 2 views
0

JTextArea에 텍스트를 입력하고 "저장"버튼을 클릭하면 JTextArea 텍스트는 .txt 파일에 쓰거나 저장해야합니다. 내 시도 & 올바른 장소에서 잡기 이벤트 처리기 메서드에 있거나 그 중 일부가 생성자에 있어야합니까? JTextArea를 버튼이있는 .txt 파일에 저장

내 코드입니다 : 사전에

package exercises; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.PrintWriter; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JTextArea; 

public class SimpleNotePadApp extends JFrame implements ActionListener { 

JButton button1 = new JButton("Open"); 
JButton button2 = new JButton("Save"); 

public SimpleNotePadApp(String title) { 
    super(title);        
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(300, 350);       
    setLayout(null); 


    JTextArea newItemArea = new JTextArea(); 
    newItemArea.setLocation(3, 3); 
    newItemArea.setSize(297, 282); 
    getContentPane().add(newItemArea); 

    button1.setLocation(30,290); 
    button1.setSize(120, 25); 
    getContentPane().add(button1); 

    button2.setLocation(150,290); 
    button2.setSize(120, 25); 
    getContentPane().add(button2); 

} 

public static void main(String[] args) { 
    SimpleNotePadApp frame; 

    frame = new SimpleNotePadApp("Text File GUI");  
    frame.setVisible(true);        
} 

public void actionPerformed(ActionEvent e) { 

    if(e.getSource() == button1) 
    { 
     try { 
      PrintWriter out = new PrintWriter(new FileWriter("TestFile.txt")); 
      newItemArea.getText(); 
      newItemArea.write(out); 
      out.println(newItemArea); 
      out.flush(); 
      out.close(); 

     } catch (IOException e1) { 
      System.err.println("Error occurred"); 
      e1.printStackTrace(); 
     } 
    } 
} 
} 

감사

+3

'내 시도 & 올바른 장소에서 잡아 ... - 왜 그것은 생성자에있을까요? 생성자에서 코드를 실행합니까? 또한 JTextArea.write (...) 메소드를 사용하여 데이터를 파일에 저장하십시오. – camickr

+0

Java GUI는 다른 로케일의 다른 PLAF를 사용하여 다른 OS ', 화면 크기, 화면 해상도 등에서 작동해야합니다. 따라서, 픽셀 완벽한 레이아웃에 도움이되지 않습니다. 대신 레이아웃 관리자 또는 [조합] (http://stackoverflow.com/a/5630271/418556)과 [공백] 레이아웃 채우기 및 테두리 (http://stackoverflow.com/a/17874718/)를 사용하십시오. 418556). –

답변

0

귀하의 try ... catch 올바른 자리에 있지만 내용은해야한다 :

 PrintWriter out = new PrintWriter(new FileWriter("TestFile.txt")); 
     newItemArea.write(out); 
     out.close(); 

시도-으로 사용하는 것을 고려 -resources이고 .close()은 불필요하게됩니다.

try (PrintWriter out = new PrintWriter(new FileWriter("TestFile.txt")) { 
     newItemArea.write(out); 
    } catch (IOException e1) { 
     System.err.println("Error occurred"); 
     e1.printStackTrace(); 
    } 

또한, 당신이 건설 중에 JButtonActionListener를 첨부해야합니다 :

button2.addActionListener(this); 

(thisSimpleNotePadApp 예, ActionListener 구현)

마지막으로, 당신은 할 수 있습니다 :

if(e.getSource() == button2) 

... button2이 "저장"버튼이기 때문에 (아니 button1)

+0

도움 주셔서 감사합니다! 그러나 어떤 이유로 텍스트 파일에 저장되지 않습니다. 콘솔에 뭔가를 인쇄하여 테스트 한 이래로 "시도"부분을 확실히 통과했습니다 ... – Caiz

+0

텍스트 파일에 쓰지 않았습니까? 디버깅 목적으로 코드의 일부 변경을 수행하는 것이 좋습니다. E.G. printWriter out = 새로운 PrintWriter (새로운 FileWriter ("TestFile.txt"));''File f = new File ("TestFile.txt"); PrintWriter out = 새로운 PrintWriter (새로운 FileWriter (f));'나중에 (저장 후)'Desktop.getDesktop(). open (f);'을 실행하십시오. –