JRuby+swingでJFileChooserを試す
swingで外部ファイルを選択して何か操作するとき、"JFileChooser"を使うと便利です。
JFileChooserはファイル選択のための専用ダイアログで、使用するのがとても簡単です。
何かしらアプリを作ろうと思った時使いそうなのでメモします。
以下に全ソースコードを示します。
# coding: cp932 require 'java' (<<AWT).split.each {|c| eval "#{c} = java.awt.#{c}" } BorderLayout AWT (<<SWING).split.each {|c| eval "#{c} = javax.swing.#{c}" } JFrame JButton JTextField JPanel JFileChooser SWING class MyFrame < JFrame def initialize super "File Chooser Test" self.default_close_operation = JFrame::EXIT_ON_CLOSE button = JButton.new "ファイル選択" field = JTextField.new 32 buttonPanel = JPanel.new buttonPanel.add button self.content_pane.add buttonPanel, BorderLayout::PAGE_END fieldPanel = JPanel.new fieldPanel.add field self.content_pane.add fieldPanel, BorderLayout::CENTER button.add_action_listener do |event| filechooser = JFileChooser.new case filechooser.show_save_dialog(self) when JFileChooser::APPROVE_OPTION file = filechooser.get_selected_file field.text = file.name # field.text = file.path when JFileChooser::CANCEL_OPTION field.text = "キャンセルされました." when JFileChooser::ERROR_OPTION field.text = "エラー." end end end # of initialize def main self.pack self.set_size(400,100) self.visible = true end end # of MyFrame #ルックアンドフィール設定 begin UIManager::look_and_feel = UIManager::system_look_and_feel_class_name # SwingUtilities::update_component_tree_ui frame rescue => e puts e.message end f = MyFrame.new f.main
label.text = file.name
の行で、fileは"java.io.File"クラスのインスタンスです。
ラベルにファイル名だけでなくファイルまでの絶対パスも表示させたいときは、file.path とすればよさそうです。
あと、細かいことですがルックアンドフィール設定を入れています。これはおまけです。
デフォルトの"metal"はWindowsだと(好みの問題ですが)いまいちなのでシステムに依存させて変えるようにしています。(貼りつけた画像はmetalなんですけどねw)
まとめ
これぐらい行数ならclassとか使わないでベタ書きでもと思ったのですが、さすがにまとまりが悪いかなぁと思ったので、MyFrameというクラスで括って(気持ち)記述の見栄えをよくしてみました。