From window, to wind

趣味のゲームとJavaプログラムなどについて 適当に書き綴るブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

外部ソフト起動ボタン

外部ソフト(paintやメーラーソフトなど.exeファイル)を起動するためのボタンです。
ランチャーや外部ソフトを呼び出すときに役に立ちます。
実行画像
パスを渡す前
Outrun1.jpg

パスを渡した後(エクセルを起動するボタン)
Outrun2.jpg

ソースコード


package program;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.filechooser.FileNameExtensionFilter;

public class OutRunButton extends JButton
implements MouseListener{

    private JPopupMenu popup=new JPopupMenu();
    private JFileChooser jfc;
    private String path;
    private Icon seticon;
    private JMenuItem pathitem = new JMenuItem("パスの取得");
    private File file;
    private int result;
    private FileNameExtensionFilter filter1 =
         new FileNameExtensionFilter("exeファイル(*.exe)", "exe");
    private ProcessBuilder builder;
    private Process process;
   
    OutRunButton(Dimension width){
        setPreferredSize(width);
       
        setToolTipText("外部アプリの起動ボタン");
       
        addMouseListener(this);
       
        this.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                run(path);
            }
        });
       
        //パスの取得まで実行できないようにする
        this.setEnabled(false);
       
        popup.add(pathitem);
       
        pathitem.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                //C上のプログラムファイルのディレクトリで開く
                jfc = new JFileChooser("/C:/Program Files");
               
                //exeファイルのフィルターを加える
                jfc.addChoosableFileFilter(filter1);
               
                result = jfc.showOpenDialog(popup);
                file = jfc.getSelectedFile();
                if(result == JFileChooser.APPROVE_OPTION){
                       try{
                          //絶対パスの取得
                          path=file.getAbsolutePath();
                          //jfilechooser状のアイコンの取得
                          seticon=jfc.getIcon(file);
                          setIcon(seticon);
                          //ツールチップにプログラム名を代入
                          setToolTipText(file.getName());
                          setEnabled(true);
                       }catch(Exception e){
                           System.out.println(e);
                       }
                }
               
            }
        });


    }

    public void mouseClicked(MouseEvent arg0) {
        // TODO 自動生成されたメソッド・スタブ
       
    }

    public void mouseEntered(MouseEvent arg0) {
        // TODO 自動生成されたメソッド・スタブ
       
    }

    public void mouseExited(MouseEvent arg0) {
        // TODO 自動生成されたメソッド・スタブ
       
    }

    public void mousePressed(MouseEvent e) {
        // TODO 自動生成されたメソッド・スタブ
        showPopup(e);
    }

    public void mouseReleased(MouseEvent e) {
        // TODO 自動生成されたメソッド・スタブ
        showPopup(e);
    }
   
    private void showPopup(MouseEvent e){
        if (e.isPopupTrigger()) {
          popup.show(e.getComponent(), e.getX(), e.getY());
        }
    }
   
    public void run(String path){
        builder = new ProcessBuilder(path);
        try {
            process = builder.start();
        } catch (IOException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this, "プロセスの起動に失敗しました。");
        }
    }

}



解説
おもに重要なのはProcessBuilderクラスです。
ここに実行したいプログラムのパスを渡し、start()メソッドで実行します。

またパスを渡す前にボタンを押せないようにsetEnabled(false)を使い、
パスを渡した後にsetEnabled(true)をします。

またボタンだけを表示させたいので、JPopupMenuを使いJFileChooserを呼び出します。
JFileChooserにはexeファイルのフィルターを追加します。

またパスだけ受け取っても分かりずらいので、JFileChooserで使われるアイコンをセットします。

スポンサーサイト

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://kagenyan.blog69.fc2.com/tb.php/15-5e159177
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。