파일에 텍스트를 쓰는 간단한 응용 프로그램을 Swing에서 작성했습니다. 여기자바 스윙 버튼이 프로그램을 고정시킵니다.
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class WritingTextToFileApp {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new MainFrame("Application");
frame.setSize(500, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
다른 클래스입니다 : 여기 내 주요 클래스입니다
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class MainFrame extends JFrame {
public MainFrame(String title) {
super(title);
//Set Layout Manager
setLayout(new BorderLayout());
//Create Swing Components
JTextArea textArea = new JTextArea();
JButton button = new JButton("Add");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
File file = new File("C:\\Users\\Vincent Wen\\Desktop\\Test.txt");
try (BufferedWriter br = new BufferedWriter(new FileWriter(file))) {
br.write(input);
br.newLine();
} catch (IOException ex) {
System.out.println("Unable to write to file:" + file.toString());
}
}
});
//Add Swing components to conent pane
Container c = getContentPane();
c.add(textArea, BorderLayout.CENTER);
c.add(button, BorderLayout.SOUTH);
}
} I 버튼을 누를 때마다
, 프로그램 정지와 아무 반응이 없습니다. 코드에 문제가 있습니까? 나는 스윙을 처음 사용하므로 어떤 도움을 주시면 감사하겠습니다.
GUI를 관리하는 스레드를 차단하고 사용자가 입력을 읽는 (콘솔) 것을 기다리고 있습니다. 대신 [입력 대화 상자] (https://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#input)를 사용해야합니다. 그러면 정보를 입력 할 창이 열리 며 GUI가 고정되지 않습니다. – resueman
'String input = scanner.nextLine();'은 작업을 차단하고 EDT (Swing GUI를 처리하는 이벤트 디스패처 스레드)에서 실행됩니다. 그래서'scanner'가'System.in'에서 읽을 것이기 때문에 GUI 스레드는 System.in (보통 콘솔입니다)을 통해 데이터를 제공 할 때까지 기다릴 것입니다. – Pshemo
TextArea에서 텍스트를 가져 오거나 사람이 콘솔에 입력하여 'Test.txt'에 쓰려고합니까? TextArea에서 텍스트를 가져 오려면'textArea.getText()'를 실행 한 다음 해당 텍스트에서 파일에 쓰십시오. 이것을'String lines [] = textArea.getText(). split ("\\ n");와 같이 분할하고 선을 가로 질러 건너 뜁니다. – Dominic