SQLの窓

2014年06月13日


Java : JDialog で モーダルダイアログ

概要

1) 閉じたら Dispose するように設定する
2) モーダルダイアログとして設定する
( 列挙型 Dialog.ModalityType )
※ この機能が導入されたのは、1.6(2006年12月11日)からです。
3) 表示させる( この時点で、モーダルダイアログとして動作し、終了待ちになります )

参考ページ

InputMap を使ってESCキーで閉じる( こちらの記事は 1.4 時点の記事です )

呼び出し側



JDialog 側



呼び出し部分
	private class RefAction extends AbstractAction {
		public RefAction() {
			putValue(NAME, "参照");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			
			try {
				final Syain dialog = new Syain();
				dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
				dialog.setModalityType(JDialog.ModalityType.APPLICATION_MODAL);
				dialog.addWindowListener(new WindowAdapter() {
					@Override
					public void windowClosing(WindowEvent e) {
						if ( dialog.isResult() ) {
							System.out.println("OKが選択されました");
							syainCode.setText(dialog.getCode());
							checkAction.actionPerformed(null);			
						}
						System.out.println("ダイアログを閉じています");
					}
				});
				dialog.setVisible(true);
				System.out.println("この行は、ダイアログが閉じられた後に実行されます");
				
			} catch (Exception ex) {
				ex.printStackTrace();
			}
			
		}
	}


JDialog を継承したクラスの内部

中のボタンの処理です。ウインドウを閉じる処理は イベントを Post して、x ボタンをクリックした事にしています。
	private class CancelAction extends AbstractAction {
		public CancelAction() {
			putValue(NAME, "キャンセル");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new WindowEvent(Syain.this, WindowEvent.WINDOW_CLOSING));			
		}
	}
	private class OkAction extends AbstractAction {
		public OkAction() {
			putValue(NAME, "OK");
			putValue(SHORT_DESCRIPTION, "Some short description");
		}
		public void actionPerformed(ActionEvent e) {
			int row = lboxTable.getSelectedRow();
			if ( row == -1 ) {
				JOptionPane.showMessageDialog(
						contentPanel,
						"行が選択されていません",
						"エラー",
						JOptionPane.ERROR_MESSAGE);
				return;
			}
			
			code = (String) lboxTable.getColumnText(row, "COLUMN_1");
			
			result = true;
			Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new WindowEvent(Syain.this, WindowEvent.WINDOW_CLOSING));			
		}
	}




タグ:java JDialog
posted by lightbox at 2014-06-13 00:51 | java : Swing | このブログの読者になる | 更新情報をチェックする

2012年01月12日


Eclipse( Pleiades ) Helios に、VisualEditor をインストールして、JFrame で実行するまでの全手順画像

Eclipse( Pleiades ) Helios + VisualEditor - NAVER まとめ

画像は30枚以上になりました。こういうものを作るにはうってつけの NAVER
を利用しました。いずれ自分のサイトに移すつもりではありますが、まだ確
認作業も残っているので、当分はこれで運用するつもりです。

※ 確証はありませんが、JDK は 1.6 を推奨しておきます。

bit.ly にも 『HELIOs』で登録しました

http://bit.ly/HELIOs








Java : Eclipse Galileo 3.5( +VisualEditor )のインストール
よりも簡単でいいですね。若干 Eclipse 上でのコントロールの貼り付け手順
の仕様が変わったようですが、特別問題はありません



posted by lightbox at 2012-01-12 20:01 | java : Swing | このブログの読者になる | 更新情報をチェックする

2009年11月06日


Java : InputMap を使って JFrame 上のキーを全て処理する

C++ で作った Windows アプリケーションで言うところの、アクセラレータキー
の処理なのですが、WEB 上の Java のサンプルはどうも違うようですし、
JDK のドキュメントの日本語も意味不明ですし、結局以下のようにすると
フォーカスがウインドウ上のどこに居ても処理できます。

問題は、ユーザがコントロールからキーイベントを親に dispatchEvent していると、
処理が2回走るようなので・・・・両方使う場合は、どちらから来たか区別できるよう
にする必要があります
( こちらに統一したほうが無難です )
AbstractAction esc_action = new AbstractAction() {
	public void actionPerformed(ActionEvent e) {
		System.out.println("ESCキーが押されました");
	}
};

InputMap imap = this.getRootPane().getInputMap(
	JComponent.WHEN_IN_FOCUSED_WINDOW
);
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "ESC");
this.getRootPane().getActionMap().put("ESC", esc_action);


posted by lightbox at 2009-11-06 14:58 | java : Swing | このブログの読者になる | 更新情報をチェックする

2009年09月27日


Java : WEB 上の XML を JTable に表示

スクロールさせる為に、データを重複させています
Jtable1

Eclipse での配置例です
Jtable2

LboxTable は、こちらにあります
public class Main extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JPanel jPanel = null;
	private LboxTable lboxTable = null;
	/**
	 * This method initializes jPanel	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJPanel() {
		if (jPanel == null) {
			jPanel = new JPanel();
			jPanel.setLayout(new BoxLayout(getJPanel(), BoxLayout.X_AXIS));
			jPanel.setBounds(new Rectangle(11, 67, 497, 220));
			jPanel.add(getLboxTable(), null);
		}
		return jPanel;
	}

	/**
	 * This method initializes lboxTable	
	 * 	
	 * @return lightbox.LboxTable	
	 */
	private JScrollPane getLboxTable() {
		if (lboxTable == null) {
			lboxTable = new LboxTable();

			lboxTable.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					// ダブルクリックの処理
					if ( e.getClickCount() == 2 ) {
						int row = lboxTable.convertRowIndexToModel(lboxTable.rowAtPoint(e.getPoint()));
						int col = lboxTable.convertColumnIndexToModel(lboxTable.columnAtPoint(e.getPoint()));
						System.out.println(row+"/"+col);
					}
				}
			});
			lboxTable.AddColumn("COLUMN_1");
			lboxTable.AddColumn("COLUMN_2");

			lboxTable.SetColumnTitle("COLUMN_1", "タイトル");
			lboxTable.SetColumnTitle("COLUMN_2", "URL");

			lboxTable.SetColumnWidth("COLUMN_1", 150);
			lboxTable.SetColumnWidth("COLUMN_2", 320);
			
			try {
				// ターゲット
				URL url = new URL("http://winofsql.jp/exlink.xml");
				// 接続オブジェクト
				HttpURLConnection http = (HttpURLConnection)url.openConnection();
				// GET メソッド
				http.setRequestMethod("GET");
				// 接続
				http.connect();

				// XML 取得の準備
				DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
				DocumentBuilder builder = dbfactory.newDocumentBuilder();
				// InputStream から Documentオブジェクトを取得
				Document doc = builder.parse(http.getInputStream());

				// ここから先は一般的な DOM の処理
				// ルート要素
				Element root = doc.getDocumentElement();
				// System.out.println(root.getNodeName());
				
				// <row> 〜 </row>
				// getElementsByTagName が一番直感的で確実
				NodeList nl1 = root.getElementsByTagName("row");
				// 一つ目のノード
				Node nd1 = nl1.item(0);
				// System.out.println(nd1.getNodeName());
				
				// <fld3>名称</fld3>
				// Node を Element にキャストして getElementsByTagName を使う
				NodeList nl2 = ((Element)nd1).getElementsByTagName("fld3");
				NodeList nl3 = ((Element)nd1).getElementsByTagName("fld2");
				// 最初の row ブロックの fld3 の 列挙
				for( int i = 0; i < nl2.getLength(); i++ ) {

					// <fld3>
					// System.out.println((nl2.item(i)).getNodeName());
					// 要素に挟まれた値は、実際はテキストノードの中にあります
					int nRow = lboxTable.AddRow();
					lboxTable.SetColumnText(nRow, "COLUMN_1", (nl2.item(i)).getFirstChild().getNodeValue());
					lboxTable.SetColumnText(nRow, "COLUMN_2", (nl3.item(i)).getFirstChild().getNodeValue());

					nRow = lboxTable.AddRow();
					lboxTable.SetColumnText(nRow, "COLUMN_1", (nl2.item(i)).getFirstChild().getNodeValue());
					lboxTable.SetColumnText(nRow, "COLUMN_2", (nl3.item(i)).getFirstChild().getNodeValue());

				}

				// 接続解除
				http.disconnect();
			}
			catch (Exception e) {
			}
			
		}
		return lboxTable.root;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Main thisClass = new Main();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	/**
	 * This is the default constructor
	 */
	public Main() {
		super();
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(531, 339);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJPanel(), null);
		}
		return jContentPane;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"



posted by lightbox at 2009-09-27 02:05 | java : Swing | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり