| Java GUIプログラミング vol.2 |
|---|
![]() |
| 著者 | 大村 忠史 |
|---|---|
| 判型 | B5変型判,514頁,CD-ROM添付 |
| 本体価格 4,200円 | |
| ISBN | 978-4-87783-052-6 C3004 |
大好評『Java GUIプログラミング』シリーズ第2巻です。本書では、第1巻で取り上げることのできなかったJDesktopPane、JInternalFrame、JTree、JTable、TableCellRenderer、TableCellEditorなどについて、最新のJava環境であるJava2 SE v1.4での新機能も交えて詳しく解説します。
特に、非常に応用範囲の広いクラスであり、SwingのハイライトともいえるJTableについては、それを背後で支える数多くのクラス・イベント・リスナーを交えて本書の後半部分で詳細に記述しています。
第1巻に劣らず、さまざまな場面に応用できる豊富なサンプルソースコードを用意し、Javaプログラマ必携の書となっています。
| まえがき | |
| 付録CD-ROMの使い方 | |
| 第1章 | JTextFieldとJTextArea |
|---|---|
| 1-1 | JTextFieldの基本 |
| 1-2 | パスワードフィールド |
| 1-3 | JTextFieldとActionイベント |
| 1-4 | 入力フィールドに対する入力制限(1)〜Keyイベントによるもの |
| 1-5 | 入力フィールドに対する入力制限(2)〜ドキュメントクラスによるもの |
| 1-6 | JTextArea |
| 1-7 | メモ帳 |
| 第2章 | コンボボックス |
| 2-1 | コンボボックスの基本 |
| 2-2 | 選択された項目を調べるItemEvent |
| 2-3 | 選択された項目を調べるActionEvent |
| 2-4 | JComboBoxのポップアップに関するイベント〜Java2 SE v1.4の新機能 |
| 2-5 | プログラム内部から選択する |
| 2-6 | 追加・削除ができるようにする |
| 2-7 | 独自の項目表示処理を定義するListCellRenderer |
| 第3章 | JDesktopPaneとJInternalFrame |
| 3-1 | JDesktopPane・JInternalFrameの紹介 |
| 3-2 | JInternalFrameの初歩 |
| 3-3 | JInternalFrameのフレーム属性の設定 |
| 3-4 | レイヤー |
| 3-5 | FocusEventとMouseEventとKeyEvent |
| 3-6 | レイヤーを変更する |
| 3-7 | JInternalFrameのウィンドウイベント |
| 3-8 | インターナルフレームの状態変化を検知する |
| 3-9 | JInternalFrameでお絵描き |
| 3-10 | WindowListを作成する(1) |
| 3-11 | WindowListを作成する(2) |
| 3-12 | WindowListを作成する(3) |
| 第4章 | JTree |
| 4-1 | JTreeの紹介 |
| 4-2 | TreePathと行(ROW) |
| 4-3 | JTreeのノードを辿る |
| 4-4 | ノードを選択状態にする |
| 4-5 | ノードを名前で検索する〜Java2 SE v1.4での新機能 |
| 4-6 | TreeSelectionEventとTreeSelectionListener |
| 4-7 | JTreeとマウスイベント |
| 4-8 | TreeExpansionEvent、TreeExpansionListener |
| 4-9 | TreeWillExpandListener、ExpandVetoException(Java2 SE v1.4の新機能) |
| 4-10 | TreeCellRenderer |
| 第5章 | JTable |
| 5-1 | JTableとJTableHeader |
| 5-2 | 横スクロール |
| 5-3 | カラム名 |
| 5-4 | カラムサイズ |
| 5-5 | JTableにデータを入れる〜配列から |
| 5-6 | TableModelの最も基本的な使用法〜AbstractTableModel |
| 5-7 | 画像をセル内に貼り付ける |
| 5-8 | JTableにデータを追加するDefaultTableModel (1) |
| 5-9 | JTableにデータを追加するDefaultTableModel (2) |
| 5-10 | ファイルからデータを読み込む |
| 第6章 | JTableでの選択・カーソル移動 |
| 6-1 | JTable上での選択を検出するMouseEvent |
| 6-2 | ロー(行)の選択を検出するvalueChanged() |
| 6-3 | カラム(列)の選択を検出するcolumnSelectionChanged() |
| 6-4 | ロー(行)とカラム(列)の選択を検出する |
| 6-5 | ロー(行)とカラム(列)の複数選択 |
| 6-6 | プログラムの内部から選択する〜ローの選択 |
| 6-7 | プログラムの内部から選択する〜カラムの選択 |
| 6-8 | セルの選択〜マウスクリックの場合のさまざまなイベント処理 |
| 6-9 | セルの選択〜カーソルキー指定の場合のさまざまなイベント処理 |
| 6-10 | JTable上でのカーソル移動をカスタマイズする |
| 第7章 | JTableにおけるデータ操作 |
| 7-1 | ローの削除と挿入 |
| 7-2 | ローとカラムの変更に関連したイベント |
| 7-3 | ローの移動 |
| 7-4 | カラムの追加〜カラム単位でデータを入れる |
| 7-5 | カラムを最右列に追加 |
| 7-6 | カラムの移動 |
| 7-7 | カラムの削除 |
| 7-8 | カラムごとの属性TableColumn |
| 7-9 | 選択されているセルからデータを取り出す |
| 7-10 | セルのデータをクリップボードにコピーする |
| 7-11 | クリップボードからデータを取り出し、セルにセットする |
| 第8章 | TableCellRenderer |
| 8-1 | TableCellRendererの紹介 |
| 8-2 | 行番号を付ける |
| 8-3 | 列名を決め直すヘッダレンダラー |
| 8-4 | セルの文字列の表示のカスタマイズを行う |
| 8-5 | 商品マスターを使った商品コードから商品名への変換 |
| 8-6 | 商品コードから単価を求める |
| 8-7 | ツールチップ |
| 8-8 | カラムのクラスを指定する |
| 第9章 | TableCellEditor |
| 9-1 | JTextFieldタイプのセルエディター |
| 9-2 | 編集終了のタイミングを知る |
| 9-3 | セルの編集中に、他のコンポーネントにフォーカスが移ってしまうとき |
| 9-4 | JComboBoxタイプのセルエディター |
| 9-5 | セルエディターと他のセルとを連動させる |
| 9-6 | JCheckBoxタイプのテーブルセルエディター |
| 9-7 | JListをセルエディターにする |
| 9-8 | 任意のセルに任意のコンポーネントを置いて機能させる |
| さくいん |
本文中に誤りがありました。お詫びして訂正いたします。
場所…19ページ
《正》 |
//----------------------------------------------------------------------- import javax.swing.*; import javax.swing.border.*; import javax.swing.text.*; public class JTextFieldTest5 extends JFrame { public static void main( String[] args ){ JFrame w = new JTextFieldTest5( "JTextFieldTest5" ); w.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); w.setSize( 200, 150 ); w.setVisible( true ); } public JTextFieldTest5( String title ){ super( title ); JPanel pane = (JPanel)getContentPane(); pane.setLayout( new BoxLayout( pane, BoxLayout.Y_AXIS ) ); JTextField tf1 = new JTextField(); tf1.setDocument( new NumericDocument() ); tf1.setBorder( new TitledBorder( "テキストフィールド1" ) ); pane.add( tf1 ); JTextField tf2 = new JTextField(); tf2.setDocument( new LimitedDocument( 10 ) ); tf2.setBorder( new TitledBorder( "テキストフィールド2" ) ); pane.add( tf2 ); } class NumericDocument extends PlainDocument { String validValues = "0123456789.+-"; public void insertString( int offset, String str, AttributeSet a ) { //2007/05/22 修正: // クリップボードから貼り付けた場合には 一度に複数文字が渡されてくる場合がある // その場合を考慮して 1文字ずつチェックする。 for( int i=0 ; i< str.length() ; i++ ){ if( validValues.indexOf( str.charAt(i) ) == -1 ){ return; } } try{ super.insertString( offset, str, a ); } catch( BadLocationException e ) { System.out.println( e ); } } } class LimitedDocument extends PlainDocument { int limit; LimitedDocument( int limit ){ this.limit = limit; } public void insertString( int offset, String str, AttributeSet a ) { if( getLength() >= limit ){ return; } try{ super.insertString( offset, str, a ); } catch( BadLocationException e ) { System.out.println( e ); } } } } //------------------------------------------------------------------------ |
|---|