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 | このブログの読者になる | 更新情報をチェックする

2014年06月12日


SQL*Plusだけで CSV を作成する

1) 列名リストを作成

郵便番号,都道府県名,市区町村名,町域名


2) エディタで "," を "||','||" に置換する

郵便番号||','||都道府県名||','||市区町村名||','||町域名
( または '"'||郵便番号||'","'||都道府県名||'","'||市区町村名||'","'||町域名||'"' )

3) 以下のようなファイルを作成(csv.sql)
-- ********************************************
-- 1行に表示する文字の最大数
-- 32767 は、SET LINESIZE と入力すると、
-- linesizeオプション 0が範囲(1から32767)外です。
-- と表示される
-- ********************************************
SET LINESIZE 32767

-- ********************************************
-- PAGESIZEを 0に設定すると、ヘッダー、
-- ページブレーク、タイトル、初期空白行
-- その他の書式設定情報をすべて非表示にできます
-- ********************************************
SET PAGESIZE 0

-- ********************************************
-- ONを指定すると、スプール行の終わりの空白
-- が削除--されます
-- ( コンソール表示とは無関係です )
-- ********************************************
SET TRIMSPOOL ON

-- ********************************************
-- レコード数表示や確認メッセージを
-- 非表示にします
-- ********************************************
SET FEEDBACK OFF

-- ********************************************
-- 出力を、画面に表示しません
-- ********************************************
SET TERMOUT OFF

-- ********************************************
-- 結果をファイルに格納します
-- ********************************************
SPOOL 郵便番号マスタ.csv

select 郵便番号||','||都道府県名||','||市区町村名||','||町域名
from 郵便番号マスタ
/

-- ********************************************
-- スプールを停止します
-- ********************************************
SPOOL OFF

-- ********************************************
-- SQL*Plus を終了します
-- ********************************************
EXIT


4) sqlplus の実行

sqlplus ユーザー/パスワード@//PC名/サービス名 @csv

※ @csv は、csv.sql を意味します
※ //PC名/サービス名 は、ローカルネットサービス名でもかまいません
※ //PC名/サービス名 は Express ですと、XE や //PC名/XE が使えると思います
C:\user\work\>sqlplus lightbox/password@//layla/XE @csv

SQL*Plus: Release 11.2.0.2.0 Production on 木 6月 12 02:11:38 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
に接続されました。
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Productionとの接続が切断されました。
関連する Oracle ドキュメント SQL*Plusユーザーズ・ガイドおよびリファレンス リリース11.2
タグ:sqlplus Oracle
posted by lightbox at 2014-06-12 02:20 | Oracle | このブログの読者になる | 更新情報をチェックする

2014年06月07日


TCPDF の定数と tcpdf_config.php

インターネット上の英文マニュアルはこちらです。

この内容は、実際には 『tcpdf\config\tcpdf_config.php』に定義されています。ですが、examples で利用されているのは、『tcpdf\examples\config\tcpdf_config_alt.php』で、内容はヘッダ部分のロゴ用の定数や画像フォルダの位置が値として定義されています( tcpdf_config.php では定数記述はありますが、コメントになっています )

tcpdf_config_alt.php
/**
 * Default images directory.
 * By default it is automatically set but you can also set it as a fixed string to improve performances.
 */
define ('K_PATH_IMAGES', dirname(__FILE__).'/../images/');

/**
 * Deafult image logo used be the default Header() method.
 * Please set here your own logo or an empty string to disable it.
 */
define ('PDF_HEADER_LOGO', 'tcpdf_logo.jpg');

/**
 * Header logo image width in user units.
 */
define ('PDF_HEADER_LOGO_WIDTH', 30);

/**
 * Cache directory for temporary files (full path).
 */
define ('K_PATH_CACHE', sys_get_temp_dir().'/');

定数はシステムの環境によって、差し替えてカスタマイズして利用するという事が想定されています。
K_BLANK_IMAGE _blank.png
PDF_PAGE_FORMAT A4
PDF_PAGE_ORIENTATION P
PDF_UNIT mm
PDF_MARGIN_HEADER 5
PDF_MARGIN_FOOTER 10
PDF_MARGIN_TOP 27
PDF_MARGIN_BOTTOM 25
PDF_MARGIN_LEFT 15
PDF_MARGIN_RIGHT 15
PDF_FONT_NAME_MAIN helvetica
PDF_FONT_SIZE_MAIN 10
PDF_FONT_NAME_DATA helvetica
PDF_FONT_SIZE_DATA 8
PDF_FONT_MONOSPACED courier
PDF_IMAGE_SCALE_RATIO 1.25
HEAD_MAGNIFICATION 1.1
K_CELL_HEIGHT_RATIO 1.25
K_TITLE_MAGNIFICATION 1.3
K_SMALL_RATIO 2/3
K_THAI_TOPCHARS true
K_TCPDF_CALLS_IN_HTML true
K_TCPDF_THROW_EXCEPTION_ERROR false



タグ:PHP TCPDF
posted by lightbox at 2014-06-07 22:10 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

PHP で問い合わせ画面のページリンクを常に5つ作成しておいて、jQuery でいらないリンクを非表示にする

ページリンクは大量にあっても、実際には業務効率が悪いので良いとは言えない場合もあります。条件で絞り込めばおのずとページ数は少なくなり、そのほうが効率的です。以下の方法は、初心者にとって難解かもしれないページリンクの実装を出来る限り簡単にしたものです。

PHP 側で解っている現在のデータ件数を JavaScript の変数に埋め込んで、その結果から jQuery のセレクタを使って必要無いリンクを非表示にしています



上の画像は実際の画面で、その非表示にした状態をデベロッパーツールで表示しています
$(function() {

	// PHP から、検索結果の件数を埋め込んで、JavaScript で利用します
	var row_counter = <?= $result->num_rows.'' == '' ? "0" : $result->num_rows ?>;

	// jQuery のセレクタで、検索結果の件数を使って特定のページ以降を
	// 非表示にします
	if ( row_counter <= 10 ) {
		$( "a[id*='p1']" ).hide();
	}
	if ( row_counter <= 20 ) {
		$( "a[id*='p1p2p3']" ).hide();
	}
	if ( row_counter <= 30 ) {
		$( "a[id*='p1p2p3p4']" ).hide();
	}
	if ( row_counter <= 40 ) {
		$( "a[id*='p1p2p3p4p5']" ).hide();
	}

});



タグ:PHP jquery
posted by lightbox at 2014-06-07 18:54 | PHP | このブログの読者になる | 更新情報をチェックする

特に変更しても支障の無い error_append_string php.ini ディレクティブを使用して PHP 全体のデバッグに利用する

PHP 全体のお話になるので、個人の開発環境を想定してはいますが、本番時には $debug = false; とすれば良いので運用のルールさえ確実であれば、いろいろ利用価値があると思います。
$debug = ini_get( "error_append_string" );
if ( $debug == "" ) {
	$debug = true;
}
else {
	$debug = false;
}

関連する PHP のドキュメント

php.ini ディレクティブのリスト


posted by lightbox at 2014-06-07 14:27 | PHP + 特記事項 | このブログの読者になる | 更新情報をチェックする

2014年06月05日


PHP : HTMLのinput要素のname属性に二次元配列を指定して getElementsByName と jQueryのinput[name='value']:eq(n) でアクセステスト

結論から言えば、書き方だけの問題で、思った通りに動作します。ただ、JavaScript でアクセスする場合は id 属性を定義するほうが良いです。しかし、名前に関して二重の管理が必要になるのを避けたい場合はこのような方法も選択肢の一つではあると思います。

※ PHP 側のアクセスは、最初からグループ分けが可能ですし、便利な書き方です。



DOM を使ったコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function checkForm() {

	if ( !confirm("送信してよろしいですか?") ) {
		return;
	}

	// 本来は、ここで入力チェックを実行し、
	// エラーならば return false; を実行する

	var obj;

	obj = document.getElementsByName("list[in][]");
	alert(obj[0].value);
	alert(obj[3].value);
	obj = document.getElementsByName("list[out][]");
	alert(obj[0].value);
	alert(obj[3].value);

	return true;
}
</script>
</head>
<body>
<form onsubmit='return checkForm();'>
<input type="submit">
<br>
<input type="text" name="list[in][]" value="A">
<input type="text" name="list[in][]" value="B">
<input type="text" name="list[in][]" value="C">
<input type="text" name="list[in][]" value="D">
<br>
<input type="text" name="list[out][]" value="V">
<input type="text" name="list[out][]" value="W">
<input type="text" name="list[out][]" value="X">
<input type="text" name="list[out][]" value="Y">
</form>


<pre>
<?php
print_r($_GET);
?>
</pre>
</body>
</html>


jQuery を使ったコード
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script type="text/javascript">
$(function() {

	// ***********************************************
	// Form が送信前に実行されるイベント
	// event.preventDefault(); で送信をキャンセル
	// ***********************************************
	$( "form" ).submit(function( event ) {
		if ( !confirm("送信してよろしいですか?") ) {
			event.preventDefault();
			return;
		}

		// 本来は、ここで入力チェックを実行し、
		// エラーならば event.preventDefault() を実行する

		alert( $("input[name='list[in][]']:eq(0)").val() );
		alert( $("input[name='list[in][]']:eq(3)").val() );

		alert( $("input[name='list[out][]']:eq(0)").val() );
		alert( $("input[name='list[out][]']:eq(3)").val() );

	});

});
</script>
</head>
<body>
<form>
<input type="submit">
<br>
<input type="text" name="list[in][]" value="A">
<input type="text" name="list[in][]" value="B">
<input type="text" name="list[in][]" value="C">
<input type="text" name="list[in][]" value="D">
<br>
<input type="text" name="list[out][]" value="V">
<input type="text" name="list[out][]" value="W">
<input type="text" name="list[out][]" value="X">
<input type="text" name="list[out][]" value="Y">
</form>


<pre>
<?php
print_r($_GET);
?>
</pre>
</body>
</html>



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

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

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

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

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


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

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

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

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

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



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

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり