2012-05-10 14 views
1

私のプログラムは、データベース内のデータ(株価&)がYahoo Financeのデータ(株価と価格)と一致すると、ユーザーに警告します。 HarryJoyの助けを借りて、私はポップアップ通知を実装することができます。必要に応じてフレームを表示する方法と、常にフレームを常に上に表示する方法はありますか?

問題は、画面上のポップアップ位置がデータベースループ(int db)に基づいているかどうかです。データが一致しなくてもフレームがポップします。

データベースデータ= Yahoo Financeデータの場合にのみ、カウンタやいくつかの方法でフレームをポップアップすることはできますか?また、私の通知パネルはメインフレームの後ろにあるように見えます。メインフレームの上にパネルを表示するにはどうしたらいいですか?

私は十分な情報を与えられたと思いますが、まだ不明な点がある場合は質問してください。どんな指導も頂けます!ありがとう!

データベース内(私の説明を順番に表示するコードサンプルのみを使用してください、以下のソースコード)。

Object 1 = match 
Object 2 = doesn't match (hence there's a gap) 
Object 3 = match 
Object 4 = match 

スクリーンショット:

PopUp

コード:

for (int db=0; db<= rowCount; db++) 
    {     
     Object popSymbol = table.getModel().getValueAt(db, 0); 
     String popupSymbol = popSymbol.toString(); 

     Object popValue = table.getModel().getValueAt(db, 1);       
     String str = popValue.toString(); 
     double popStockValue = Double.valueOf(str).doubleValue(); 

     String stockNameDB = popupSymbol;  
     StockPara stock = YahooStock.getInstance().getStockPrice(stockNameDB); 
     double stockPriceDB = Math.round(stock.getPrice()); 

     final JFrame popUpFrame; 
     final JPanel popupPanel;      

     if (stockPriceDB == popStockValue)      
     { 
      String header = "Stock: " + stock.getTicker() + " is now @ " + stock.getPrice();   
      String message = ""; 

      popUpFrame = new JFrame(); 
      popUpFrame.setSize(320,90);       
      popUpFrame.setUndecorated(true);          
      popUpFrame.getContentPane().setLayout(null);  

      popupPanel = new JPanel(); 
      popupPanel.setBorder(new LineBorder(new Color(0, 0, 0))); 
      popupPanel.setBounds(0, 0, 320, 90); 
      getContentPane().add(popupPanel); 
      popupPanel.setBackground(new Color(255, 255, 224)); 
      popupPanel.setLayout(null); 
      popUpFrame.add(popupPanel);     

      // Other labels, images, etc. 

      Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      Insets toolHeight = Toolkit.getDefaultToolkit().getScreenInsets(popUpFrame.getGraphicsConfiguration()); 
      popUpFrame.setLocation(screenSize.width - popUpFrame.getWidth(), screenSize.height - toolHeight.bottom - (popUpFrame.getHeight() * (db+1))); 

     } 
    } 

答えて

1

単に追加のカウンタ(int counter = 0;)を作成し、すぐにあなたの問題を解決します。その後、dbの代わりにそのカウンタを使用してpopUpFrameの位置を決定し、その増分カウンタの直後に配置します。

popUpFrame.toFront() 

と私は本当にそれが何よりもユーザーにとってより迷惑ですのでことをお勧めしませんが、(上に常にあることを、それを強制的に:

int counter = 0; // Initiate outside de loop 
... 
for(int db=0; db<= rowCount; db++) { 
    ... 
    if (stockPriceDB == popStockValue) { 
     ... 
     popUpFrame.setLocation(screenSize.width - popUpFrame.getWidth(), 
      screenSize.height - toolHeight.bottom - (popUpFrame.getHeight() * (counter+1))); 
     counter++; 
    } 
} 

フロント使用するように枠を持参しますelse):

popUpFrame.setAlwaysOnTop(true);

これは必ずしもすべてのプラットフォームでサポートされているわけではありません。トップ問題のため

+0

ギヨームのPoletを使用し、それは私の問題を解決!どうもありがとう! –

0

notificationPanel.requestFocus(); 
関連する問題