III. 간단한 프로그램 만들기
------------------------------
자바 웹스타트 환경을 만들려면 우선 그 환경에서 실행될 응용 프로그램이 필요하다.
비교적 간단한 프로그램으로 자바 웹스타트의 다양한 측면을 테스트 하기 위하여
자바 Swing으로 간단한 편집기를 만들어 보겠다.
간단한 편집기의 클래스 명은 SimpleEditor로서 다음과 같은 화면으로
구성되어 있다.
[소스보기 - 파일첨부 참조]
소스를 살펴보면 우선 buildGUI() 메소드에서 메뉴와 화면을 만들며 그리고
이벤트 처리를 위한 리슨너 등을 추가하고 있다.
주요 기능 및 메소드를 살펴보면 다음과 같다.
- buildGUI()
화면의 필드와 메뉴를 만들며, 이벤트 처리가 가능하도록 각각의 컴퍼넌트에
ActionListener 및 DocumentListener를 추가하고 있다.
- checkUpdate()
테스트 필드에 변경이 있으면 이를 화일에 저장할지를 묻고, 사용자가 "예"를
선택하면 이를 화일에 저장한다.
그리고 "취소" 버튼을 누르면 취소를 true 값으로 리턴한다.
- newFile()
화면을 clear하고 상태를 초기 상태로 바꾸어 새로운 화일을 편집할 수 있도록 한다.
- open()
FileChooser를 이용하여 기존의 테스트 화일을 열고 이를 테스트 필드에
보여주는 기능을 한다.
- close()
편집하던 화일을 닫는 기능을 수행한다.
- save()
편집하던 화일을 저장하는 기능을 수행한다.
만일 화일명이 없으면 FileChooser를 이용하여 화일명을 지정하도록 한다.
- exit()
편집하던 화일이 있으면 저장하고 편집기 프로그램을 종료한다.
위의 메소드들은 각각의 메뉴 선택시에 actionPerformed 메소드에서 실행되면
현재 화일 문서가 변경되었는가의 여부는 DocumentListener를 사용하여 이벤트 처리한다.
이 프로그램을 실행하려면 SimpleEditor.class 화일을 JRE가 설치된 PC에 복사하고
단지 "Java -classpath . SimpleEditor" 라는 명령어를 치면 실행되어 아무런 문제
없이 Local Computing 환경에서 사용할 수 있다.
하지만 다음 문제는 이 프로그램을 여러사람이 자바 웹스타트를 이용하여
네트웍 환경으로 여러사람이 사용할 수 있게하는 것이다. 이러한 환경은 응용 프로그램에
추가적인 고려 사항이 필요하며 또 자동 배포를 수행할 수 있는 웹 서버가 필요한데 자세한
내용은 본 SimpleEditor 프로그램을 예제로 다음 장에 계속하여 설명하겠다.
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
/**
* Simple Editor
*
*
*/
public class SimpleEditor extends JFrame implements ActionListener, DocumentListener {
// text area
JTextArea taText = new JTextArea();
// menu
JMenuItem miNew = new JMenuItem("New");
JMenuItem miOpen = new JMenuItem("Open");
JMenuItem miSave = new JMenuItem("Save");
JMenuItem miClose = new JMenuItem("Close");
JMenuItem miExit = new JMenuItem("Exit");
// status
private boolean isChanged = false;
// file name
private String fileName;
// title
private String title = "Simple Editor";
// file chooser
private JFileChooser chooser = new JFileChooser();
//------------------------------------------
// constructor
//------------------------------------------
public SimpleEditor() {
super();
buildGUI();
}
//------------------------------------------
// build gui
//------------------------------------------
void buildGUI() {
// build menu
JMenuBar bar = new JMenuBar();
JMenu muFile = new JMenu("File");
bar.add(muFile);
muFile.add(miNew);
muFile.add(miOpen);
muFile.add(miSave);
muFile.add(miClose);
muFile.addSeparator();
muFile.add(miExit);
setJMenuBar(bar);
// build text area
getContentPane().add(new JScrollPane(taText), BorderLayout.CENTER);
// listener
taText.getDocument().addDocumentListener(this);
miNew.addActionListener(this);
miOpen.addActionListener(this);
miSave.addActionListener(this);
miClose.addActionListener(this);
miExit.addActionListener(this);
// clear
try {
newFile();
}catch(Exception ex) {
ex.printStackTrace();
}
// close operation
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
}
//------------------------------------------
// check updated
//------------------------------------------
public boolean checkUpdated() throws Exception {
if(isChanged) {
int res = JOptionPane.showConfirmDialog(this, "Save File ?", "Save", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
if(res == JOptionPane.YES_OPTION) {
save();
}
else if(res == JOptionPane.CANCEL_OPTION) {
return true;
}
}
return false;
}
//------------------------------------------
// new file
//------------------------------------------
public void newFile() throws Exception {
// check updated
if(checkUpdated()) { return; }
// clear
taText.setText("");
isChanged = false;
setTitle(title + "[New File]");
fileName = null;
}
//------------------------------------------
// open
//------------------------------------------
public void open() throws Exception {
// check updated
if(checkUpdated()) { return; }
// file chooser
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
// load file
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(chooser.getSelectedFile())));
String line = "";
taText.setText(line);
while((line = reader.readLine()) != null) {
taText.append(line + "\n");
}
// title
fileName = chooser.getSelectedFile().getPath();
setTitle(title + "[" + chooser.getSelectedFile().getName() + "]" );
isChanged = false;
}
}
//------------------------------------------
// close
//------------------------------------------
public void close() throws Exception {
// check updated
if(checkUpdated()) { return; }
newFile();
}
//------------------------------------------
// save
//------------------------------------------
public void save() throws Exception {
if(fileName == null) {
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
fileName = chooser.getSelectedFile().getPath();
}
else {
throw new Exception("Save Canceled !");
}
}
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName)));
System.out.println(taText.getText());
writer.write(taText.getText());
writer.close();
isChanged = false;
}
//------------------------------------------
// exit
//------------------------------------------
public void exit() throws Exception {
// check updated
if(checkUpdated()) { return; }
// exit
setVisible(false);
dispose();
System.exit(0);
}
//------------------------------------------
// action listener method
//------------------------------------------
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
try {
if(obj == miNew) {
newFile();
}
else if(obj == miOpen) {
open();
}
else if(obj == miClose) {
close();
}
else if(obj == miSave) {
save();
}
else if(obj == miExit) {
exit();
}
}catch(Exception ex) {
JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
//------------------------------------------
// document listener methods
//------------------------------------------
public void changedUpdate(DocumentEvent e) {isChanged = true;}
public void insertUpdate(DocumentEvent e) {isChanged = true;}
public void removeUpdate(DocumentEvent e) {isChanged = true;}
//------------------------------------------
// main
//------------------------------------------
public static void main(String[] args) throws Exception {
SimpleEditor editor = new SimpleEditor();
editor.setSize(800, 600);
editor.setVisible(true);
}
}
출처 : http://tong.nate.com/javasarang/39798353