タツノオトシゴのブログ

主にJavaに関するものです。

JavaFX内におけるAWT/Swingの使いどころ

JavaFXを使えば、AWT/Swingはもうお役御免じゃね?と思われるが、ちょっとしたことにおいてはまだまだ使う。
特に、JDK1.6で追加されたデスクトップ機能はよく使ったりするので、メモとして残しておく。

OS標準のアプリケーションでファイルを開く

  • 拡張子が関連付けられたOS標準のアプリケーションでファイルを開くときには、「Desktop#open(<ファイル>)」「Desktop#edit(<ファイル>)」を使用する
  • メソッド「open()」と「edit()」の違いは環境によって異なると思うが、試した見た限りだと次の通り。
    • open()は、現状、関連付けられているアプリケーションで開く。OSで関連付けられていればなんでも開ける。Excel、Word、textなど。TXTファイルを開くと、自分はSakuraエディタを関連付けに変更しているのでそれが開く。
    • edit()は、OS標準のエディタで開く。開けない拡張子があるため、open()で開くのが無難。TXTファイルを開くと、OS標準のワードパットで開いた。
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

final File file = new File("c:/sample.xls");

final Desktop = new Desktop.getDesktop();

try {
    // 関連付けられたアプリケーションを起動してファイルを開きます。
    desktop.open(file);

    // 関連付けられたエディタアプリケーションを起動して、ファイルを編集用に開きます。
    desktop.edit(file);

} catch(IOExeption e) {
    //TODO
}

【参考】
http://www.techscore.com/tech/Java/JavaSE/JavaSE6/3/

ビープ音を鳴らす

ダイアログを開くときにビープ音を鳴らして、ユーザに知らせたいときに使用する。

// ビープ音を鳴らす。
import java.awt.Toolkit;

Toolkit.getDefaultToolkit().beep();

ちなみに、JavaFXで音楽を流すのには、「javafx.scene.media.MediaPlayer」を利用する。
ただし、ビープ音とは異なり、JavaFXのアプリケーション(正しくは、JavaFXのスレッド)の中だけでしか利用できない
ビープ音ならば、別にJava内のどこであってもならせる。

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

// JavaFXでの音楽を鳴らす
private void playSound() {
    
    Media sound = new Media(getClass().getResource("sample.mp3").toExternalForm());
    MediaPlayer mp = new MediaPlayer(sound);
    mp.play();
    
}

メッセージボックスを開く(JOptionPane)

JavaFXでは標準のダイアロ表示機能はないが、OSSとして「jfxmessagebox」が公開されており、Swingの「JOptionPane」とほぼ同じ使い勝手で使える。
ただし、Application#init()中の場合など、JavaFXの初期化が終わっていない段階では使えない

「JOptionPane」の使いどころとしては、Application#init()中でエラーが発生した際にメッセージボックスを表示したいときなど。
当然、JavaFXのどこでもJOptionPaneは使えるが、デザインが異なり違和感があるので、最低限の部分にとどめておくのが無難だと思われる。

http://sourceforge.jp/projects/jfxmessagebox/

import java.awt.Toolkit;
import javax.swing.JOptionPane;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SampleApplication extends Application {
    
    /** Sprignのコンテキスト */
    private ApplicationContext applicationContext;
    
    /**
     * Springの初期化
     */
    @Override
    public void init() {
        
        try {
            //Springのコンテナの初期化
            applicationContext = new ClassPathXmlApplicationContext("/ApplicationContext.xml");
        
        } catch(Throwable e) {
            // ビープ音を鳴らす
            Toolkit.getDefaultToolkit().beep();
            
            // ★Swingによるダイアログの表示
            JOptionPane.showMessageDialog(null,
                    "起動中にエラーが発生しました。アプリケーションを終了します。\n" + e.getMessage(),
                    "起動エラー",
                    JOptionPane.ERROR_MESSAGE);
            System.exit(1);
        }
    }
    
    @Override
    public void start(final Stage primaryStage) throws IOException {
        
        //TODO: 画面の組み立て
        
        // ステージの表示をフォーカスを充てる
        primaryStage.show();
        primaryStage.requestFocus();
    }
    
    @Override
    public void stop() throws Exception {
        // Springのコンテナの終了
        if(applicationContext instanceof AbstractApplicationContext) {
            ((AbstractApplicationContext) applicationContext).close();
            System.out.println("close");
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

スプラッシュス画像を開く

以前にも紹介したが、JavaFXのプレローダを使わずに、スプラッシュ画像を表示する「java.awt.SplashScreen」を使う。

【参考】

システムトレイ機能

【参考】
http://www.techscore.com/tech/Java/JavaSE/JavaSE6/3/