jQuery の In Place Editor プラグインを作ってみた
2010年02月21日
独立心旺盛で、新しい技術で新しいWebサービスを作りたいと思っているけれど、ひとりでやることに限界を感じているフリーのエンジニアの方。あなたの期待にこたえられる仲間と環境を、八角研究所なら提供できると思います。社員としてではない関わり方も、あるかもしれません。
この会社の特徴を知る
このカテゴリの記事はまだ投稿されていません
など 3 記事
など 24 記事
Java = サーバーサイド というのが定着してしまい、Swingを使用したクライアントアプリというのは、開発者向けを除くとごくわずかです。ですが、最近ではJavaFXのリリースなどJavaリッチクライアントもにわかに盛り上がりつつあります(かねぇ・・・?)。
というわけで、Swingを使用したクライアントアプリケーションについて記事を書いてみたいと思います。
Javaは当初アプレットでの利用も比較的多く、今でも社内システムの一部がアプレットで出来ていてその遅さにイライラしている方も少なくないかと思います(SwingでなくAWTが多いと思います)。そのせいかJava=遅い(重い)。高性能なサーバー用の言語というイメージが定着してしまったような気がします。
Javaの生みの親Sun Microsystemsの動きとしては、昨年の12月にJavaFX 1.0をリリースするなどクライアントサイドにも力を入れてきています。JavaFXに合わせてかJRE6update10(現在の最新はupdate11)以降Java2Dの性能向上なども行われており、通常のSwingアプリもその恩恵を受けることができます。
最近のPCで最新のJREを使用すれば、Javaの速度に不満が出ることはほとんど無いと思います。今後、Swingを使用したクライアントアプリケーションを積極的に使ってみてもよいのではないでしょうか。
それでは、Swingの基本的な使い方についておさらいします。サンプルとして簡単なボタンを持つ、ウィンドウを作成してみます。
サンプルコード1
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class ImasaraSwing1 {
private static void createAndShowGUI() {
final JFrame frame = new JFrame("いまさらSwing1");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JButton button = new JButton("Hello");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Hello Swing!!");
}
});
frame.add(button);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
}
JFrame(ウィンドウ部品)にJButton(ボタン部品)をaddすることで、ボタン一個だけのウィンドウを作成しています。また、ボタンにはアクションリスナーと呼ばれるボタンを押された時に発生するアクションイベントを処理するリスナーを追加しています。
Swingを勉強したことのある方からすると、”昔”のやり方と少し違うことに気がつくかもしれません。
まず、createAndShowGUI()メソッド中でframe.add()メソッドでbuttonコンポーネントを追加しています。Java1.4までは、frame.getContentPane()でコンテントペインを取得し、コンテントペインに対してadd()する必要がありました。Java5以降は、直接addすることができるようになりました。
次に、main()メソッドからcreateAndShowGUI()メソッドを呼び出す際、SwingUtilities.invokeLaterを使用してEDT(EDTは次回説明します)上で実行されるようにしています。古い書籍やインターネット上のサンプルでは、メインスレッド上でコンポーネントの初期化を行っていますが、コンポーネントの初期化はスレッドセーフではないのでEDT上で初期化するように変更になっています(Sunのサンプルもそうなっています)。とりあえず今は、コンポーネント初期化でのinvokeLaterは”おまじない”だと思っておいてもよいです。
次回、EDTについておさらいしてみたいと思います。
コメントはありません
トラックバックはありません
メンバー紹介
2010年02月21日
2010年02月21日
2009年09月07日
2009年09月01日
2009年08月22日
2009年08月15日
2009年08月07日
2009年08月07日
2009年07月28日
この日記にコメントする