Blackberry のペイン マネージャーで 3 つのタブを作成した以下のコードに取り組んでいます。最初のタブでは、ユーザーは顧客名に対して日付範囲を選択し、その顧客の結果を取得して、グリッドの 3 番目のタブに表示することができます。フォーマット。
したがって、最初のタブには 2 つの日付フィールドと顧客テキスト フィールドがあり、検索ボタンも付いています。
検索ボタンをクリックすると、検索のレコードが選択され、グリッド形式で表示するために 3 番目のタブにジャンプします。
3 番目のタブには、テーブル レコード要素を文字列ごとにグリッドに挿入するための try catch ステートメントがあります。
問題は、アプリケーションを開いて 3 番目のタブをクリックするとすぐに、ジャンク値で満たされたグリッドが表示されることです。最初のタブの検索ボタンがクリックされて結果が表示されるのを待ちません。たまたまアプリケーションを閉じて再度開くと、以前の検索結果を示す 3 番目のタブが見つかりました。
コードは次のとおりです。
// setup the tab model with 3 tabs
final PaneManagerModel model = new PaneManagerModel();
model.enableLooping( true );
// setup the first tab XXXXXXXXXXXXXXXXXXXX~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VerticalFieldManager vfm = new VerticalFieldManager(
Field.USE_ALL_HEIGHT | Field.USE_ALL_WIDTH |
Manager.NO_VERTICAL_SCROLL | Manager.NO_HORIZONTAL_SCROLL );
LabelField lbl = new LabelField( "Content for tab 1", Field.FOCUSABLE );
vfm.add( lbl );
TextField1 = new TextField(" Name: ",null)
{
protected boolean keyChar(char ch, int status, int time)
{
if (CharacterUtilities.isLetter(ch) || (ch == Characters.BACKSPACE || (ch == Characters.SPACE)))
{
return super.keyChar(ch, status, time);
}
return true;
}
};
vfm.add(TextField1);
SimpleDateFormat sdfDate = new SimpleDateFormat("dd/MM/yyyy");//dd/MM/yyyy
Date now = new Date();
String strDate = sdfDate.format(now);
TextField2 = new TextField("\n From: ",strDate);
vfm.add(TextField2);
// TextField3 = new TextField("TO: ",null);
//vfm.add(TextField3);
SimpleDateFormat sdfDate1 = new SimpleDateFormat("dd/MM/yyyy");//dd/MM/yyyy
Date later = new Date();
String strDate1 = sdfDate1.format(later);
TextField3 = new TextField("\n To: ",strDate1);
vfm.add(TextField3);
ButtonField showInputButton = new ButtonField(" Search ",ButtonField.FIELD_HCENTER | ButtonField.CONSUME_CLICK);
showInputButton.setChangeListener(new FieldChangeListener()
{
public void fieldChanged(Field field,int context)
{
Dialog.alert(TextField1.getText());
try
{
//Open or create the database
Database db = DatabaseFactory.openOrCreate("database1.db");
//Insert onto table
Statement statement13 = db.createStatement("INSERT into
Temp4(date,bill,narration) VALUES (('"+TextField3.getText()+"'),(SELECT balance FROM Temp3),('Opening Balance'))");
statement13.prepare();
statement13.execute();
Statement statement131 = db.createStatement("INSERT INTO Temp4(date,bill,narration,id) select date,amount,narration,id from Bills where name=\'"+TextField1.getText()+"\' AND substr(date,7)||substr(date,4,2)||substr(date,1,2) < substr (\'"+TextField3.getText()+"\',7)||substr (\'"+TextField3.getText()+"\',4,2)||substr (\'"+TextField3.getText()+"\',1,2) ");
statement131.prepare();
statement131.execute(); // date INTEGER,bill INTEGER,rec INTEGER,narration TEXT,id INTEGER
statement131.close();
Statement statement132 = db.createStatement("INSERT INTO Temp4(date,rec,narration,id) select date,amount,narration,id from Receipts where name=\'"+TextField1.getText()+"\' AND substr(date,7)||substr(date,4,2)||substr(date,1,2) < substr (\'"+TextField3.getText()+"\',7)||substr (\'"+TextField3.getText()+"\',4,2)||substr (\'"+TextField3.getText()+"\',1,2) ");
statement132.prepare();
statement132.execute();
statement132.close();
db.close();
}
catch( Exception e )
{
System.out.println( e.getMessage() );
e.printStackTrace();
}
model.getView().jumpTo(2,PaneManagerView.DIRECTION_NONE);
}
}
);
vfm.add(showInputButton);
LabelField myLbl = new MyLabelField( "Ledger" );
NullField nullFld = new NullField( Field.FOCUSABLE );
HorizontalFieldManager hfm = new HorizontalFieldManager();
hfm.add( nullFld );
hfm.add( myLbl );
Pane pane = new Pane( hfm, vfm );
model.addPane( pane );
//Here ends tab 1 code
// 3 番目のタブをセットアップします- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
vfm = new VerticalFieldManager(
Field.USE_ALL_HEIGHT | Field.USE_ALL_WIDTH |
Manager.NO_VERTICAL_SCROLL | Manager.NO_HORIZONTAL_SCROLL );
myLbl = new MyLabelField( "Daily Report" );
//Adding grid format for fetching from temp4 table----------------
final GridFieldManager grid = new GridFieldManager(10,5,0);
grid.add(new LabelField("Date")
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.CYAN);
super.paint(graphics);
}
});
grid.add(new LabelField("Bill")
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.CYAN);
super.paint(graphics);
}
});
grid.add(new LabelField("Receipt")
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.CYAN);
super.paint(graphics);
}
});
grid.add(new LabelField("Narration")
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.CYAN);
super.paint(graphics);
}
});
grid.add(new LabelField("ID")
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.CYAN);
super.paint(graphics);
}
});
grid.setColumnPadding(20);
grid.setRowPadding(20);
//try catch was here
try
{
//Open or create the database
Database db = DatabaseFactory.openOrCreate("database1.db");
Statement statement55 = db.createStatement("CREATE TABLE IF NOT EXISTS Temp4(date INTEGER,bill INTEGER,rec INTEGER,narration TEXT,id INTEGER)");
statement55.prepare();
statement55.execute();
statement55.close();
Statement statement56 = db.createStatement("SELECT date,bill,rec,narration,id FROM Temp4 ORDER BY ROWID DESC");
statement56.prepare();
statement56.execute();
Cursor c = statement56.getCursor();
//Get to the row of grid
for (int i = 1; i < grid.getRowCount(); i++)
{
System.out.println("Inside for first loops");
//Get to the column of grid
for (int j = 0; j < grid.getColumnCount() ; j++)
{
System.out.println("Inside for second loops");
//Get to the row of temp4 table
while(c.next())
{
System.out.println("Inside while");
Row r;
r = c.getRow();
//Get to the column of temp4 table
for (int k = 4; k >=0; k--)
{
System.out.println("Inside for loops");
//Check for whether column retrieved is date or naraation
if(k==0 || k==3)
{
System.out.println("Retrieving date or narration");
grid.insert(new LabelField(r.getString(k))
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.GOLD);
super.paint(graphics);
}
},i,j);
}
else
{
//Check for whether column retrieved is bills,rec or id
System.out.println("Retrieving other values");
String p = "" + r.getObject(k);
//if(r.getString(k) != null)
//{
grid.insert(new LabelField(p)
{
public void paint(Graphics graphics)
{
graphics.setColor(Color.GOLD);
super.paint(graphics);
}
},i,j);
// }
}
grid.setBackground(BackgroundFactory.createLinearGradientBackground(Color.MIDNIGHTBLUE,Color.STEELBLUE,Color.MIDNIGHTBLUE,Color.STEELBLUE));
//grid.setBackground(BackgroundFactory.createLinearGradientBackground(Color.GOLD,Color.CHOCOLATE,Color.GOLDENROD,Color.CORAL));
}
System.out.println("Exiting while");
}
System.out.println("Exiting sec for");
break;
}
System.out.println("Exiting first for");
break;
}
statement56.close();
db.close();
}
catch( Exception e )
{
System.out.println( e.getMessage() );
e.printStackTrace();
}
vfm.add(grid);
//----------------grid ends----------------------------------------
nullFld = new NullField( Field.FOCUSABLE );
hfm = new HorizontalFieldManager();
hfm.add( nullFld );
hfm.add( myLbl );
pane = new Pane( hfm, vfm );
model.addPane( pane );
そして今、残りのセットアップ
// select the tab to be displayed
model.setCurrentlySelectedIndex( 0 );
// setup the rest of the components
HorizontalTabTitleView titleView = new HorizontalTabTitleView( Field.FOCUSABLE );
titleView.setNumberOfDisplayedTabs( 3 );
titleView.setModel( model );
PaneView paneView = new PaneView( Field.FOCUSABLE );
paneView.setModel( model );
PaneManagerView view = new PaneManagerView(
Field.FOCUSABLE | Manager.NO_VERTICAL_SCROLL |
Manager.NO_HORIZONTAL_SCROLL | Manager.USE_ALL_HEIGHT |
Manager.USE_ALL_WIDTH,
titleView, paneView );
view.setModel( model );
model.setView( view );
// configure the Controller
HorizontalTabController controller = new HorizontalTabController();
controller.setModel( model );
controller.setView( view );
model.setController( controller );
view.setController( controller );
// add the tab manager to the MainScreen
this.add( view );
}
また、3 番目のペインを無効にして、最初のタブ検索の実装内に追加しようとしましたが、3 番目のタブが最初の後に定義されているため、エラーが発生します。また、最初のタブのボタンクリックで呼び出すことができるように、関数に3番目のタブのtry catchを含めようとしましたが、「式の不正な開始」というエラーも発生します
解決策を提案してください。このコードを考えて解決策を支援できる人は誰でも大歓迎です。ありがとう。