うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

「SwingDesigner」でSwingアプリケーションをつくろう! その3~アクションとファイルの読み込み

スポンサーリンク

ボタンにアクションをつける

PaletteのSwing Actionというディレクトリをクリック.「新規」という項目を選択して ボタンに+してみましょう. f:id:konbu13:20131227162951j:plain

アクションをつけると,ソース中に下のようなクラスが定義されています.

   private class SwingAction extends AbstractAction {
        public SwingAction() {
            putValue(NAME, "SwingAction");
            putValue(SHORT_DESCRIPTION, "Some short description");
        }
        public void actionPerformed(ActionEvent e) {
        }
    }

また,ソースのプライベート変数が書かれているところに,次のようなAction型の オブジェクトが定義されていますね.Actionクラスはその名の通り,ボタンが押された時や マウスクリックの時のイベントを担当しています.

   private final Action action = new SwingAction_1();

この中のactionPerformed()メソッド

       public void actionPerformed(ActionEvent e) {
        }

にボタンが押された時のアクションを書きます.

アクションを付けると,アクションを付ける文字列はンについている文字列は「Swing Action」となってしまいます.この場合は,下のソースのように,コンストラクタ内のputValueメソッドで名前を「開く」に変えておきましょう.

public SwingAction() {
    putValue(NAME, "開く"); //名前を変更
    putValue(SHORT_DESCRIPTION, "Some short description");
}

今回はボタンが押されたらファイルを読み込む処理を書くことにしましょう.


ファイルを読み込む

ファイルを読み込むには, 1. まず以下の2つのインポート宣言をソースに記述.(Eclipseだと,エラー訂正時に勝手に追加してくれますが…)

import java.io.File;
import javax.swing.JFileChooser;
  1. actionPerformed()内に以下の行を追加
JFileChooser filechooser = new JFileChooser(); // ファイル選択用クラス

int selected = filechooser.showOpenDialog(frame); //「開く」ダイアログ表示
if (selected == JFileChooser.APPROVE_OPTION){ //ファイルが選択されたら
File file = filechooser.getSelectedFile(); 
lblNewLabel.setText(file.getName()); //ラベルの文字をファイル名に

JFileChooser)はファイル選択のダイアログを表示したり,保存のダイアログを表示するメソッドがついています.

実行

実行すると,ダイアログが表示されて,ファイルを選択すると,ラベルの文字がファイル名になっていることを確認します.

ここまでのソース

package swingTest;

import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TextEditorApp {

    private JFrame frame; 
    private JLabel lblNewLabel; // ラベルの追加
    private JButton btnNewButton; //ボタンの追加
    private final Action action = new SwingAction(); //アクション追加
    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    TextEditorApp window = new TextEditorApp();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
    * Create the application.
    */
    public TextEditorApp() {
        initialize();
    }

    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
        
        lblNewLabel = new JLabel("New label"); // ラベルを初期化
        frame.getContentPane().add(lblNewLabel);
        
        btnNewButton = new JButton("New button"); // ボタンを初期化
        btnNewButton.setAction(action);  // ボタンにアクションを設定
        frame.getContentPane().add(btnNewButton);
    }

    private class SwingAction extends AbstractAction {
        public SwingAction() {
            putValue(NAME, "開く"); //名前を変更
            putValue(SHORT_DESCRIPTION, "Some short description");
        }
        public void actionPerformed(ActionEvent e) {
            JFileChooser filechooser = new JFileChooser(); // ファイル選択用クラス

            int selected = filechooser.showOpenDialog(frame); //「開く」ダイアログ表示
            if (selected == JFileChooser.APPROVE_OPTION){ //ファイルが選択されたら
                File file = filechooser.getSelectedFile(); 
                lblNewLabel.setText(file.getName()); //ラベルの文字をファイル名に
             }
        }
    }
}