@634

簡易テキストエディタ その6 メニュー作り(リスナ登録)

Advertisement

開く・保存・閉じる

今回はActionListener(リンク先:java.sun.com)を使ってファイルの入出力。それとアプリケーションの終了を作る。

実装

import javax.swing.*;
import java.awt.event.*;
import java.io.*;

public class SwingTest{
    public static void main(String args[]){

        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        try{
            javax.swing.plaf.metal.
            MetalLookAndFeel.setCurrentTheme(
            new javax.swing.plaf.metal.DefaultMetalTheme());

            UIManager.setLookAndFeel
                ("javax.swing.plaf.metal.MetalLookAndFeel");
        }catch(Exception e){
            System.out.println(e);
        }

        MyFrame mf = new MyFrame();
        mf.setTitle("簡易テキストエディタ");
        mf.setSize(400, 300);
        mf.show();
    }
}

class MyFrame extends JFrame{
    JTextPane text;
    JScrollPane spanel;
    JMenuBar menuBar;
    JMenu file;
    JMenuItem open, save, quit;
    JFileChooser chooser;

    public MyFrame(){
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        text = new JTextPane();
        spanel = new JScrollPane(text);
        spanel.setVerticalScrollBarPolicy(
                         JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        getContentPane().add(spanel);

        menuBar = new JMenuBar();
        file = new JMenu("ファイル");
        open = new JMenuItem("開く");
        save = new JMenuItem("保存");
        quit = new JMenuItem("終了");

        file.add(open);
        file.add(save);
        file.add(new JSeparator());
        file.add(quit);
        menuBar.add(file);
        setJMenuBar(menuBar);

        //各メニューにリスナ登録。
        open.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                openDocument();
        }});

        save.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                saveDocument();
        }});

        quit.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                quit();
        }});
    }

    //ファイルを開く
    public void openDocument(){
        if(chooser == null){
            chooser = new JFileChooser();
        }
		try{
            int returnVal;
            if((returnVal = chooser.showOpenDialog(this)) ==
                                     JFileChooser.APPROVE_OPTION){
                File file = chooser.getSelectedFile();
                FileReader fr = new FileReader(file);
                BufferedReader br = new BufferedReader(fr);
                text.read(br, null);
                br.close();
            }
        }catch(IOException e){
            System.err.println(e);
        }
    }

    //ファイルを保存する
    public void saveDocument(){
        if(chooser == null){
            chooser = new JFileChooser();
        }
        try{
            int returnVal;
            if((returnVal = chooser.showSaveDialog(this)) ==
                                    JFileChooser.APPROVE_OPTION){
                File file = chooser.getSelectedFile();
                FileWriter fw = new FileWriter(file);
                BufferedWriter bw = new BufferedWriter(fw);
                bw.write(text.getText());
                bw.flush();
                bw.close();
            }
        }catch(IOException e){
            System.err.println(e);
        }
    }

    //プログラムの終了
    public void quit(){
        System.exit(0);
    }
}
実行イメージ
実行イメージ

最初の予定、全部できた。

Advertisement

ショートカット

634
このカテゴリのトップページに戻る
634labs
   UIコレクションギャラリー

サイト検索

Google

Web サイト内

Y!ログール