1

私のプログラムは、データベース内のデータ(株名と価格)がYahoo Financeのデータ(株名と価格)と一致したときにユーザーに警告します。HarryJoyの助けを借りて、ポップアップ通知を実装することができます。

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

データベースデータ=YahooFinanceデータの場合にのみフレームをポップアップするようにカウンターまたは何らかの方法を設定するにはどうすればよいですか?また、通知パネルがメインフレームの後ろにあるように見えます。パネルをメインフレームの上に表示するにはどうすればよいですか?

十分な情報を提供できたと思いますが、それでも不明な点がある場合はお問い合わせください。任意のガイダンスをいただければ幸いです。ありがとう!

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

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

スクリーンショット:

現れる

コード:

 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)));

        } 
    }
4

2 に答える 2

1

問題をすばやく解決するには、追加のカウンター()を作成するだけint counter = 0;です。次にdb、popUpFrameを配置する代わりにそのカウンターを使用し、その増分カウンターの直後に配置します。

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++;
    }
}

フレームを前面に出すには:

popUpFrame.toFront()

そして、それを常に一番上に置くように強制します(ただし、他の何よりもユーザーにとって煩わしいので、実際にはお勧めしません):

popUpFrame.setAlwaysOnTop(true);

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

于 2012-05-10T20:57:57.643 に答える
0

先頭の問題の場合は、使用します

    notificationPanel.requestFocus();
于 2012-05-10T21:12:38.390 に答える