このレッスンでは、画面に次のコントロールを追加します。
次に、テキスト・フィールドに名前を挿入し、リストを更新するためのコードを追加します。
画面にコントロールを追加します。
getDataAccess メソッドを呼び出す前に次のコードを追加します。
// Add an edit field for entering new names _nameEditField = new EditField( "Name: ", "", 50, EditField.USE_ALL_WIDTH ); add (_nameEditField ); // Add an ObjectListField for displaying a list of names _nameListField = new ObjectListField(); add( _nameListField ); // Add a menu item addMenuItem(_addToListMenuItem); // Create database and connect try{ _da = DataAccess.getDataAccess(); |
_nameEditField と _nameListField に対するクラスレベルの宣言を追加します。さらに、run メソッド (現時点では空の状態) で _addToListMenuItem MenuItem を定義します。これらの宣言は、_statusLabel と _da の宣言の次にあります。
private EditField _nameEditField; private ObjectListField _nameListField; private MenuItem _addToListMenuItem = new MenuItem("Add", 1, 1){ public void run() { // TODO } }; |
アプリケーションを再コンパイルし、動作することを確認します。
次のメソッドとオブジェクトをアプリケーションに追加します。
テーブルにローを挿入するための DataAccess メソッドを追加します。
public void insertName( String name ){ try{ Value nameID = _conn.createUUIDValue(); String sql = "INSERT INTO Names( ID, Name ) VALUES ( ?, ? )"; PreparedStatement ps = _conn.prepareStatement(sql); ps.set(1, nameID ); ps.set(2, name ); ps.execute(); _conn.commit(); } catch( ULjException uex ){ System.out.println( "ULjException: " + uex.toString() ); } catch( Exception ex ){ System.out.println( "Exception: " + ex.toString() ); } } |
Names テーブルのローを保持するクラスを追加します。toString メソッドは、ObjectListField コントロールによって使用されます。
package myapp; class NameRow { public NameRow( String nameID, String name ) { _nameID = nameID; _name = name; } public String getNameID(){ return _nameID; } public String getName(){ return _name; } public String toString(){ return _name; } private String _nameID; private String _name; } |
テーブルのローをオブジェクトのベクトルに読み込むための DataAccess メソッドを追加します。
public Vector getNameVector(){ Vector nameVector = new Vector(); try{ String sql = "SELECT ID, Name FROM Names"; PreparedStatement ps = _conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while ( rs.next() ){ String nameID = rs.getString(1); String name = rs.getString(2); NameRow nr = new NameRow( nameID, name); nameVector.addElement(nr); } } catch( ULjException uex ){ System.out.println( "ULjException: " + uex.toString() ); } catch( Exception ex ){ System.out.println( "Exception: " + ex.toString() ); } finally{ return nameVector; } } |
ユーザ・インタフェースのメソッドを HomeScreen クラスに追加します。次に、名前のリストを更新するメソッドを示します。
public void refreshNameList(){ //Clear the list _nameListField.setSize(0); //Refill from the list of names Vector nameVector = _da.getNameVector(); for( Enumeration e = nameVector.elements(); e.hasMoreElements(); ){ NameRow nr = ( NameRow )e.nextElement(); _nameListField.insert(0, nr); } } |
HomeScreen コンストラクタの終了直前に refreshNameList メソッドを呼び出して、アプリケーションが起動するときにリストにデータが含まれているようにします。
// Fill the ObjectListField this.refreshNameList(); |
ローをリストに追加する HomeScreen メソッドを追加します。
private void onAddToList(){ _da.insertName(_nameEditField.getText()); this.refreshNameList(); _nameEditField.setText(""); } |
_addToListMenuItem MenuItem の run メソッド (現時点では //TODO という記述) 内からこのメソッドを呼び出します。
public void run() { onAddToList(); } |
アプリケーションをコンパイルして実行します。
シミュレータをクリーンな状態にリセットする必要がある場合は、BlackBerry JDE の [File] メニュー ([Simulator] メニューではない) から [Erase Simulator File] を選択し、サブメニューの項目を消去します。この方法でシミュレータをリセットする場合は、アプリケーションを再度実行する前に UltraLiteJ.cod ファイルを再インポートする必要があります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |