約 6,089,491 件
https://w.atwiki.jp/chapati4it/pages/18.html
swing swingとは、Javaでウィンドウアプリケーションを作成するためのライブラリです。 Javaはサーバサイドで使われる事が多いですが、swingを使えばクライアントアプリケーションも作成できます。 swingサンプル 基本 ウィンドウを表示するだけのサンプル JButton ボタンをクリックしたらメッセージを表示するサンプル Swingアプリを実行する 画像表示 画像表示(拡大縮小) ポップアップメニュー メニューを作る ファイル選択ダイアログから画像を選択して表示する コンボボックスを使ってみよう エクスプローラからファイルをドロップ ドロップを受け取るサンプル(文字列、ファイル) JListを表示するだけのサンプル JListにアイコンとテキストを表示する JList複数選択、単一選択サンプル JTableにCsvファイルを読み込んで表示 JTableエクスプローラ風サンプル JSliderサンプル JSliderサンプル ボリューム調整みたいなスライダ JSliderサンプル プログラムから操作する時にイベントを発生させない JSliderサンプル ボリューム調整みたいなスライダのUIクラス Zipファイル解凍サンプル JTableに一覧表示、ダブルクリックで画像を表示 MyJCalendar Swingでカレンダー型日付選択ダイアログのサンプル メニュー、タイトルバー、ステータスバー、ツールバーの表示on/off切り替えサンプル tips ウィンドウサイズをiniファイルに保存、復元 JTreeにディレクトリ構造を表示 JTreeとJListで作るエクスプローラ風のサンプル JTreeノード編集、前後の値をチェックする JTableにボタン表示、ボタン押したら行削除 フローレイアウトで強制改行 MP3プレイヤーサンプル(JLayer) MP3プレイヤーサンプル(JLayer,BasicPlayer) MP3のID3を読むサンプル(Java ID3 Tag Library + 文字化け対応) MP3プレイヤーサンプル(JLayer,BasicPlayer,Java ID3 Tag Library)一通りの機能実装 BasicPlayerサンプル(mp3, 音量調整) BasicPlayerサンプル(mp3, シーク, 時間表示) オリジナルのイベントを作ろう
https://w.atwiki.jp/api_programming/pages/110.html
参考サイト Swingを使ってみよう - JavaDrive Swing - とほほのJava入門 下位ページ イベント処理 Content 流れ フレーム(JFrame) フレームの作成 パネル(JPanel) ボタン(JButton)ボタンをおした時の処理 ボタンのラベルの改行 ラベル(JLabel) テキストの表示JLabel JTextArea JTextPane イベント処理イベント処理の方法 レイアウト ダイアログを簡単に表示する 流れ フレーム(=ウィンドウ)をつくる フレームにボタンなどを貼り付ける(加える)フレーム←パネル←ボタン フレームを表示させる フレーム(JFrame) JFrame JFrame - とほほのJava入門 フレームの作成 JFrame frame = new JFrame("タイトル"); frame.setBounds(100, 100, 200, 160); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); 引数のないコンストラクタで作成された場合は、不可視である。 それを表示させるためにはsetVisibeleを使う frame.setVisible(true); java.awt.Window から継承されたメソッド setVisivle() フレームの中のパネル(、パネルに貼り付けるボタンなど)をどのようにレイアウトするか? frame.setLayout(LayoutManager manager) setLayout() パネル(JPanel) http //www.javadrive.jp/tutorial/jpanel/ http //www.geocities.jp/jetblackorange/Documentation/01_simpleFrame.htm ↑ここの言葉を借りて言えば「フレームが写真立て、パネルが写真」 ボタン(JButton) javax.swing.JButton http //www.javadrive.jp/tutorial/jbutton/ ボタンオブジェクトの生成 パネルオブジェクトに貼り付ける(Panel.add()) ボタンをおした時の処理 流れ ボタンが押される イベントが発行される イベントを受け取るボタン側にaddActionListenerメソッドを実行(処理する「クラス」を登録する) 登録するクラスは、ActionListerクラスをインプリメント登録するクラスの中で、actionPerformedメソッドを実装 処理を実行する ボタンのラベルの改行 html ... br/ ... /html でできる。他の方法もあるんだろうが。 ラベル(JLabel) http //www.javadrive.jp/tutorial/jlabel/ テキストの表示 JLabel 少し別格なのか?通常の状態では改行が効かない。htmlとして、brで改行を書くと効くとか書いてあった。 JTextArea プレーンなテキストを複数行表示できる。 http //www.javadrive.jp/tutorial/jtextarea/ JTextPane https //docs.oracle.com/javase/jp/6/api/javax/swing/JTextPane.html DocumentとJTextComponent - JavaDrive イベント処理 http //www.javadrive.jp/tutorial/event/index1.html https //docs.oracle.com/javase/jp/6/api/java/awt/event/ActionEvent.html イベント処理の方法 ActionListenerをimplementsしたクラスで、actionPerformedをオーバーライドする。 actionPerformed(ActionEvent e) 複数のボタンなどの部品に対して、一つのクラスでイベント処理をする場合には、どの部品から呼びだされたイベントかを識別する方法について処理する方法を記述する必要がある。 String str = actionevent.getActionCommand(); レイアウト レイアウトマネージャーの設定 - JavaDrive http //www.ne.jp/asahi/hishidama/home/tech/java/swing/layout.html ダイアログを簡単に表示する JOptionPane JOptionPane static で shorMessageDialogというものが準備されている
https://w.atwiki.jp/chapati4it/pages/17.html
Java/swing/menu swing swingサンプル 基本 ウィンドウを表示するだけのサンプル JButton ボタンをクリックしたらメッセージを表示するサンプル Swingアプリを実行する 画像表示 画像表示(拡大縮小) ポップアップメニュー メニューを作る ファイル選択ダイアログから画像を選択して表示する コンボボックスを使ってみよう エクスプローラからファイルをドロップ ドロップを受け取るサンプル(文字列、ファイル) JListを表示するだけのサンプル JListにアイコンとテキストを表示する JList複数選択、単一選択サンプル JTableにCsvファイルを読み込んで表示 JTableエクスプローラ風サンプル JSliderサンプル JSliderサンプル ボリューム調整みたいなスライダ JSliderサンプル プログラムから操作する時にイベントを発生させない JSliderサンプル ボリューム調整みたいなスライダのUIクラス Zipファイル解凍サンプル JTableに一覧表示、ダブルクリックで画像を表示 MyJCalendar Swingでカレンダー型日付選択ダイアログのサンプル メニュー、タイトルバー、ステータスバー、ツールバーの表示on/off切り替えサンプル tips ウィンドウサイズをiniファイルに保存、復元 JTreeにディレクトリ構造を表示 JTreeとJListで作るエクスプローラ風のサンプル JTreeノード編集、前後の値をチェックする JTableにボタン表示、ボタン押したら行削除 フローレイアウトで強制改行 MP3プレイヤーサンプル(JLayer) MP3プレイヤーサンプル(JLayer,BasicPlayer) MP3のID3を読むサンプル(Java ID3 Tag Library + 文字化け対応) MP3プレイヤーサンプル(JLayer,BasicPlayer,Java ID3 Tag Library)一通りの機能実装 BasicPlayerサンプル(mp3, 音量調整) BasicPlayerサンプル(mp3, シーク, 時間表示) オリジナルのイベントを作ろう
https://w.atwiki.jp/chapati4it/pages/19.html
swingサンプル 基本 ウィンドウを表示するだけのサンプル JButton ボタンをクリックしたらメッセージを表示するサンプル Swingアプリを実行する 画像表示 画像表示(拡大縮小) ポップアップメニュー メニューを作る ファイル選択ダイアログから画像を選択して表示する コンボボックスを使ってみよう エクスプローラからファイルをドロップ ドロップを受け取るサンプル(文字列、ファイル) JListを表示するだけのサンプル JListにアイコンとテキストを表示する JList複数選択、単一選択サンプル JTableにCsvファイルを読み込んで表示 JTableエクスプローラ風サンプル JSliderサンプル JSliderサンプル ボリューム調整みたいなスライダ JSliderサンプル プログラムから操作する時にイベントを発生させない JSliderサンプル ボリューム調整みたいなスライダのUIクラス Zipファイル解凍サンプル JTableに一覧表示、ダブルクリックで画像を表示 MyJCalendar Swingでカレンダー型日付選択ダイアログのサンプル メニュー、タイトルバー、ステータスバー、ツールバーの表示on/off切り替えサンプル tips ウィンドウサイズをiniファイルに保存、復元 JTreeにディレクトリ構造を表示 JTreeとJListで作るエクスプローラ風のサンプル JTreeノード編集、前後の値をチェックする JTableにボタン表示、ボタン押したら行削除 フローレイアウトで強制改行 MP3プレイヤーサンプル(JLayer) MP3プレイヤーサンプル(JLayer,BasicPlayer) MP3のID3を読むサンプル(Java ID3 Tag Library + 文字化け対応) MP3プレイヤーサンプル(JLayer,BasicPlayer,Java ID3 Tag Library)一通りの機能実装 BasicPlayerサンプル(mp3, 音量調整) BasicPlayerサンプル(mp3, シーク, 時間表示) オリジナルのイベントを作ろう
https://w.atwiki.jp/sakura0415/pages/37.html
JavaのGUIを構築するためのもの。 AWTの拡張版らしく、AWT以外のものも使える。 import javax.swing
https://w.atwiki.jp/chapati4it/pages/84.html
お知らせ JLayerを直接使うより、JLayerと同じJavaZoomで公開されているBasicPlayerを使ったほうが簡単です。 BasicPlayerを使ったサンプルはこちら MP3プレイヤーサンプル(JLayer,BasicPlayer) サンプルダウンロード 実行形式 JLayerSample.zip ソース&JLayer JLayerSampleSrc.zip ソース import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.datatransfer.DataFlavor; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetAdapter; import java.awt.dnd.DropTargetDropEvent; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JSeparator; import javax.swing.SwingWorker; import javazoom.jl.decoder.Bitstream; import javazoom.jl.decoder.BitstreamException; import javazoom.jl.decoder.Decoder; import javazoom.jl.decoder.Header; import javazoom.jl.decoder.JavaLayerException; import javazoom.jl.decoder.SampleBuffer; import javazoom.jl.player.AudioDevice; import javazoom.jl.player.FactoryRegistry; // JMF MP3 Plugin // http //www.oracle.com/technetwork/java/javase/download-137625.html public class JLayerSample extends JFrame { // 再生モード 停止 static final int PLAY_MODE_STOP = 0; // 再生モード 一時停止 static final int PLAY_MODE_PAUSE = 1; // 再生モード 再生 static final int PLAY_MODE_PLAY = 2; // 再生用の変数 // ファイル名 String filename; // バッファのバッファ Vector BufferModel buffer; // デコードスイングワーカー DecodeWorker decodeWorker; // 再生スイングワーカー PlayWorker playWorker; // デバイス AudioDevice dev; // デコーダ Decoder decoder; // 再生モード int playMode = 0; // Swing用変数、定数 // ボタン用テキスト 停止 final static String STOP = "Stop"; // ボタン用テキスト 再生 final static String PLAY = "Play"; // ボタン用テキスト 一時停止 final static String PAUSE = "Pause"; // タイトル final static String TITLE = "JLayerでmp3再生"; final static String FILE_NAME = "ファイル名:"; // 再生ボタン JButton bPlay; // 曲名ラベル JLabel label; // バッファモデル class BufferModel { // コンストラクタ SampleBufferからバッファとバッファの長さを取得しメンバに保存します。 public BufferModel(SampleBuffer output) { // 上書きされるのでクローンします。 buffer = output.getBuffer().clone(); length = output.getBufferLength(); } // バッファ public short[] buffer; // バッファの長さ public int length; } public static void main(String[] args) { new JLayerSample(); } // コンストラクタ public JLayerSample() { setTitle(TITLE); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(200, 100, 300, 100); setLayout(new FlowLayout()); // ドロップターゲット設定 new DropTarget(this, DnDConstants.ACTION_COPY, new MyDropTargetListener()); // バッファのバッファ buffer = new Vector BufferModel (); // デコードスレッド開始 decodeWorker = new DecodeWorker(); decodeWorker.execute(); // 再生スレッド開始 playWorker = new PlayWorker(); playWorker.execute(); // ラベル設置 label = new JLabel(" mp3ファイルをドロップしてください。"); label.setPreferredSize(new Dimension(getWidth() - 10, 20)); add(label); add(getHr(2000, 0)); // 再生、停止ボタン設置 bPlay = new JButton(PLAY); bPlay.addActionListener(new bPlayAction()); JButton bStop = new JButton(STOP); bStop.addActionListener(new bStopAction()); add(bPlay); add(bStop); setVisible(true); addComponentListener(new ComponentAdapter() { // ウィンドウサイズが変化したらラベルのサイズ変更 @Override public void componentResized(ComponentEvent e) { label.setPreferredSize(new Dimension(getWidth() - 10, 20)); } }); } // 水平線 public JSeparator getHr(int width, int hight) { JSeparator sp = new JSeparator(JSeparator.HORIZONTAL); sp.setPreferredSize(new Dimension(width, hight)); return sp; } // 再生ボタンのアクションクラス class bPlayAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // System.out.println("mode = " + playMode); if (playMode == PLAY_MODE_PAUSE) { // 一時停止の場合、一時停止を解除します noPause(); } else if (playMode == PLAY_MODE_STOP) { // 停止中の場合、再生開始します play(); } else if (playMode == PLAY_MODE_PLAY) { // 再生中の場合、一時停止します pause(); } } } // 停止ボタンのアクションクラス class bStopAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { stop(); } } // 一時停止 private void pause() { playMode = PLAY_MODE_PAUSE; bPlay.setText(PLAY); } // 一時停止解除 private void noPause() { playMode = PLAY_MODE_PLAY; bPlay.setText(PLAY); } // 再生 private void play() { decodeWorker.decodePause(); decodeWorker.decodeInit(); playMode = PLAY_MODE_PLAY; bPlay.setText(PAUSE); } // 停止 private void stop() { playMode = PLAY_MODE_STOP; bPlay.setText(PLAY); } // デコードワーカースレッド // デコーダクラスを腹持ちして、デコードループを呼び出し // デコーダクラスのポーズと初期化を中継します class DecodeWorker extends SwingWorker Object, Object { public MyDecoder myDecoder = new MyDecoder(); // デコードループを呼び出します @Override protected Object doInBackground() throws Exception { myDecoder.decodeRoop(); return null; } // デコーダクラスのポーズを呼び出します public void decodePause() { myDecoder.pause(); } // デコーダクラスの初期化を呼び出します public void decodeInit() { myDecoder.init(); } } // デコーダークラス class MyDecoder { private Bitstream bitstream; public InputStream stream; // デコードフラグ boolean decodeFlg = false; // デコードを停止 public void pause() { decodeFlg = false; } // デコーダーを初期化します void init() { // System.out.println("decodeInit start"); try { // デコード停止 decodeFlg = false; // バッファクリア buffer.clear(); // ストリームクローズ closeStream(); // デコーダの初期化 openDevice(); // インプットストリーム取得 stream = getInputStream(); if (stream == null) { return; } bitstream = new Bitstream(stream); // デコード再開 decodeFlg = true; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } // System.out.println("decodeInit end"); } // デバイスを取得 private void openDevice() throws JavaLayerException { try { if (dev != null) { // デバイスがnullでなければ、クローズする dev.flush(); dev.close(); } // デバイスを取得 dev = getAudioDevice(); } catch (JavaLayerException e) { // デバイスを取得できない場合エラー e.printStackTrace(); JOptionPane.showMessageDialog(null, "デバイスを取得できませんでした。" + e.getMessage(), TITLE + " エラー", JOptionPane.WARNING_MESSAGE); System.exit(1); } // デコーダーを生成して開くする decoder = new Decoder(); dev.open(decoder); } // デコードループ // エラーが起きてもぐるぐる回り続けデコードします // デコードフラグがtrue、再生モードが停止、バッファのサイズが100以上のいずれかの場合 // デコードしないでループを空回しします void decodeRoop() { decodeFlg = true; // int i = 0; while (true) { try { if (decodeFlg playMode != PLAY_MODE_STOP buffer.size() 100) { if (!decordOneFrame()) { // System.out.println("なにかエラー?"); } } // デバッグ用のログ出力 // i++; // if (i % 1000 == 0) { // System.out.println("i = " + i + ", buffer.size = " + // buffer.size()); // } Thread.sleep(1); } catch (Exception e) { e.printStackTrace(); // エラーを握りつぶす } } } // ストリームクローズ void closeStream() { try { if (bitstream != null) { // クローズする bitstream.close(); bitstream = null; } } catch (BitstreamException e) { // 例外は握りつぶす } } // インプットストリームを取得 protected InputStream getInputStream() throws IOException { if (filename == null) { return null; } // System.out.println(filename); FileInputStream fin = new FileInputStream(filename); BufferedInputStream bin = new BufferedInputStream(fin); return bin; } // 1フレームデコード private boolean decordOneFrame() { if (bitstream == null) { return false; } try { Header h = bitstream.readFrame(); if (h == null) { return false; } SampleBuffer output = (SampleBuffer) decoder.decodeFrame(h, bitstream); if (output.getBufferLength() == 0) { // System.out.println("bufferSize = " // + output.getBufferLength()); return false; } buffer.add(new BufferModel(output)); bitstream.closeFrame(); } catch (JavaLayerException ex) { return false; } return true; } } // 再生用スイングワーカー // 再生クラスを腹持ちして、再生ループを呼び出します class PlayWorker extends SwingWorker Object, Object { MyPlayer player = new MyPlayer(); // 再生ループを呼び出します @Override protected Object doInBackground() throws Exception { // System.out.println("PlayWorker#doInBackground start"); player.playRoop(); // System.out.println("PlayWorker#doInBackground end"); return null; } } // デバイスの取得 protected AudioDevice getAudioDevice() throws JavaLayerException { return FactoryRegistry.systemRegistry().createAudioDevice(); } // 再生クラス // 再生ループしかないですけど class MyPlayer { // 再生ループ // エラーが起きようが何しようがずっと回り続け、バッファの中身をデバイスに出力します // 再生モードが再生以外、バッファサイズが0の場合は再生しないで次のループに回します public void playRoop() { // System.out.println("playRoop start"); // int j = 0; while (true) { try { // j++; // if (j % 1000 == 0) { // System.out.println("j = " + j); // } if (playMode != PLAY_MODE_PLAY || buffer.size() == 0) { Thread.sleep(1); continue; } // バッファの中身を取得し、デバイスに書き込みます BufferModel model = buffer.remove(0); dev.write(model.buffer, 0, model.length); Thread.sleep(1); } catch (Exception e) { e.printStackTrace(); } } } } // ドロップターゲットリスナー // ドロップされたファイルを受け取り、最初のファイルだけを再生します class MyDropTargetListener extends DropTargetAdapter { @Override public void drop(DropTargetDropEvent dtde) { dtde.acceptDrop(DnDConstants.ACTION_COPY); boolean b = false; try { if (dtde.getTransferable().isDataFlavorSupported( DataFlavor.javaFileListFlavor)) { b = true; List File list = (List File ) dtde.getTransferable() .getTransferData(DataFlavor.javaFileListFlavor); for (File file list) { // 最初のファイルだけ取得 filename = file.getPath(); label.setText(FILE_NAME + file.getName()); // 取得したファイルを再生する stop(); play(); break; } } } catch (Exception e) { e.printStackTrace(); } finally { dtde.dropComplete(b); } } } } 解説 Javaでmp3を再生するには、Java Media Framework APIという追加のAPIが提供されています。 ですが、Java Media Framework APIは配布に難がありそうなので、JLayerというmp3を再生出来るライブラリを使ってみました。 JLayerに標準で付属の再生メソッドは、再生はできるものの、停止や一時停止はできず、 単純にメソッドを呼ぶだけだと再生終了までウィンドウが操作できなくなります。 停止や一時停止など、細かいことをする場合は、自分でデコードと再生を行うとよいようです。 サンプルの解説 ウィンドウにmp3ファイルをドロップすると再生開始します。 停止、一時停止、再生ボタンもなんとか操作できます。 デコードと再生はそれぞれ、デコードスレッド、再生スレッドを作成し独立して行います。 デコードスレッドはデコード結果をバッファに詰め込み、 再生スレッドはバッファからデコード結果を取得して再生します。 バッファに余裕を持ってデコード結果を貯めて置けるので、標準の再生メソッドよりは音の途切れが少ないかもしれません。 コメント 名前
https://w.atwiki.jp/api_programming/pages/111.html
参考サイト Swingを使ってみよう - JavaDrive Swing - とほほのJava入門 下位ページ Content イベント処理の流れと実装 イベント処理部品と処理先のひも付け イベント処理の方法 レイアウト ダイアログを簡単に表示する イベント処理の流れと実装 流れ ボタンが押される イベントが発行される イベントを受け取るボタン側にaddActionListenerメソッドを実行(処理する「クラス」を登録する) 登録するクラスは、ActionListerクラスをインプリメント登録するクラスの中で、actionPerformedメソッドを実装 処理を実行する イベント処理 http //www.javadrive.jp/tutorial/event/index1.html https //docs.oracle.com/javase/jp/6/api/java/awt/event/ActionEvent.html 部品と処理先のひも付け addActionListerで処理するクラスを登録する登録するクラスはActionListenerクラスをimplementsしていること 登録するクラスはactionPerformedメソッドを実装していること イベント処理の方法 ActionListenerをimplementsしたクラスで、actionPerformedをオーバーライドする。 actionPerformed(ActionEvent e) 複数のボタンなどの部品に対して、一つのクラスでイベント処理をする場合には、どの部品から呼びだされたイベントかを識別する方法について処理する方法を記述する必要がある。 String str = actionevent.getActionCommand(); レイアウト レイアウトマネージャーの設定 - JavaDrive http //www.ne.jp/asahi/hishidama/home/tech/java/swing/layout.html ダイアログを簡単に表示する JOptionPane JOptionPane static で shorMessageDialogというものが準備されている
https://w.atwiki.jp/takejava/pages/21.html
Swingそれは「バットを振ること」。ではありません。 SwingはJava、JavaといえばSwing的なイメージがある方は多いかと思います。Swingを使うとそれっぽいアプリケーションが簡単に作れます。 しかし、SwingはJava上で動くひとつのソフトウェアライブラリに過ぎません。しかもUIが充実する一昔前に作られたものです。なのでちょっと、時代遅れ感が否めませんし、実際、あって当然のような機能がなかったりして残念な場合が結構あります。次世代Swingである「SwingX」なるものがあるようですが、正式版としてのリリースはまだ先の話になりそうです。 さて本題ですが、Swingはメインの普段私たちがコーディングして、動作させているスレッドとは別のスレッドで動いていることをご存知でしょうか。スレッド起動のタイミングこそ知りませんが、別スレッド動いているということを意識するのと、しないのとでは大分、コーディングの仕方に差がでるのではないかと思います。また、Swingはスレッドセーフではないとのことなので、無茶な割り込みをされると、動作が保障できないようです。なので、Swingを扱う処理と、それ以外の処理は別のスレッドが行うのが適切ということになります。Swingを扱うスレッドはEDT(EventDispatchThread)と呼ばれています。 適切なSwingの扱い方 SwingUtilities.invokeLater()を使ってください。ただそれだけなんです。 使い方はRunnableをimplementsするかThreadを継承して、runメソッドを実装し、そのインスタンスをSwingUtilities.invokeLater()に渡してあげます。 こうすることで、Swing処理を渡した順番どおりにやってくれます。要は先入れ先だしでスタックが詰まれているわけです。 注意すべきことは、Swingの処理にまぜて、Swingに関係ない処理をさせないことです。Swingはシングルスレッドで動いていますので、関係ない処理がものすごい時間を喰う処理だった場合、その処理をしている間、Swingは応答しないことになります。例えば、でっかい画像を読み込む処理をEDTで開始後、やっぱキャンセルしよう!と判断して、キャンセルボタンを押そうにもSwingは画像を読み込む処理に必死なので、反応できません。ちょっとしたハングアップが起こることになります。こういうことはユーザにとっては悪です。
https://w.atwiki.jp/yasrun/pages/170.html
すうぃんぐ 簡単な例 import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class SwingSample extends JFrame implements ActionListener { public static void main(String[] args) { SwingSample sample = new SwingSample(); sample.setBounds(0, 0, 200, 120); sample.setVisible(true); } public SwingSample() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button = new JButton("押せ"); button.setPreferredSize(new Dimension(120, 32)); button.addActionListener(this); this.setLayout(new FlowLayout()); this.add(button); } @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, "押すな。"); } }
https://w.atwiki.jp/chapati4it/pages/16.html
Java Javaは、サーバサイドによく利用されているプログラム言語です。 最近では、アンドロイドでも利用されています。 Javaサンプル 無名クラスにパラメータを渡す CSVファイルを読み込む Javaの乱数生成 乱数生成の性能 JavaでGMailによるメール送信(JavaMail使用 JavaでZipファイル解凍サンプル(commons-compress使用) JavaでZipファイル圧縮(commons-compress)テキスト一個だけ JavaでZipファイル圧縮(commons-compress)ファイルやディレクトリ指定 スネークケースとキャメルケースの変換 日付、時間を扱うサンプル 処理時間を計測するサンプル 文字列を切り取る substring の使い方 substring使用時のエラーと回避方法??? swingサンプル 基本 ウィンドウを表示するだけのサンプル JButton ボタンをクリックしたらメッセージを表示するサンプル Swingアプリを実行する 画像表示 画像表示(拡大縮小) ポップアップメニュー メニューを作る ファイル選択ダイアログから画像を選択して表示する コンボボックスを使ってみよう エクスプローラからファイルをドロップ ドロップを受け取るサンプル(文字列、ファイル) JListを表示するだけのサンプル JListにアイコンとテキストを表示する JList複数選択、単一選択サンプル JTableにCsvファイルを読み込んで表示 JTableエクスプローラ風サンプル JSliderサンプル JSliderサンプル ボリューム調整みたいなスライダ JSliderサンプル プログラムから操作する時にイベントを発生させない JSliderサンプル ボリューム調整みたいなスライダのUIクラス Zipファイル解凍サンプル JTableに一覧表示、ダブルクリックで画像を表示 MyJCalendar Swingでカレンダー型日付選択ダイアログのサンプル メニュー、タイトルバー、ステータスバー、ツールバーの表示on/off切り替えサンプル tips ウィンドウサイズをiniファイルに保存、復元 JTreeにディレクトリ構造を表示 JTreeとJListで作るエクスプローラ風のサンプル JTreeノード編集、前後の値をチェックする JTableにボタン表示、ボタン押したら行削除 フローレイアウトで強制改行 MP3プレイヤーサンプル(JLayer) MP3プレイヤーサンプル(JLayer,BasicPlayer) MP3のID3を読むサンプル(Java ID3 Tag Library + 文字化け対応) MP3プレイヤーサンプル(JLayer,BasicPlayer,Java ID3 Tag Library)一通りの機能実装 BasicPlayerサンプル(mp3, 音量調整) BasicPlayerサンプル(mp3, シーク, 時間表示) オリジナルのイベントを作ろう 帳票サンプル JasperReports5.0サンプル サンプルの実行 一番簡単なPDF出力 テンプレートにデータソースとパラメータ設定してPDF出力 CSVデータソースからPDF出力 PDFに動的に画像を埋め込み グループ分けと集計 Tomcatサンプル Tomcatメモ Tomcat7.0.37のインストールとeclipseの設定(Windows) サーブレットを作ってみる Tomcat7のインストールとwarファイルのデプロイ(ubunts12.04) warファイルをdotcloudにデプロイ サーブレットからJSPに遷移するサンプル サーブレットからCSVファイルをダウンロードするサンプル サーブレットからCSVファイルをダウンロードするサンプル(日本語ファイル名) サーブレットからファイルをダウンロードするサンプル(日本語ファイル名) Basic認証(UserDatabaseRealm)+DIGEST認証 JFreeChartで動的にグラフを出力するサンプル ファイルをアップロードするサンプル(Commons FileUplaod) クロスサイトスクリプティング脆弱性を体験してみるサンプル