2015-12-03 21 views
0

我有以下UIJavaFX中加載運​​行中添加水平

enter image description here

所以,你插入一個關鍵字,然後按「CERCA」(這就像在意大利搜索),然後是谷歌自定義搜索API顯示前10張圖片。在自定義搜索API正在處理結果(圖片)期間,我想展示其他這樣的圖片,如此enter image description here

(我知道它很大,但尺寸現在不是主要觀點)。我的想法很簡單,我想通過UI將圖片放在一個「級別」(不知道如何調用),然後在3種情況下圖片將不可見:1)當API將結束其作業2 )如果我沒有結果3)如果我得到一個異常。我的問題是,這是做到這一點的最佳方法?然後,我應該使用線程嗎?

我希望我是清楚的

UPDATE:

這是 「CERCA」 按鈕

cerca.setOnMouseClicked(new EventHandler<MouseEvent>() { 

       @Override 
       public void handle(MouseEvent event) { 

//      Task<Boolean> task = new Task <Boolean>(){ 
// 
//      @Override 
//      protected Boolean call() throws Exception { 
//       // TODO Auto-generated method stub 
//       return null; 
//      } 
//      
//      
//     }; 




        String searchKeyWord = userTextField.getText(); 
        result = getSearchResult(searchKeyWord); 


        for (i=0; i<result.size(); i++) 

       { 
         System.out.println("" +result.get(i)); 
         ImageView resultview; 
         resultview = new ImageView(result.get(i)); 
         resultview.setFitWidth(130); 
         resultview.setFitHeight(130); 
//      resultview.setStyle("-fx-border:6; -fx-border-color: green;"); 

          if(j==4) 
            { 
            j=0; 
            k++; 
            } 



          resultgrid.add(resultview, j,k); 
          j++; 





        VBox vbox = new VBox(); 
        resultgrid.setHgap(50); 
        resultgrid.setVgap(50); 
//     resultgrid.setStyle("-fx-border:1; -fx-border-color: red;"); 
        vbox.getChildren().add(resultgrid); 
        vbox.setSpacing(10); 
        vbox.setPadding(new Insets(90, 0, 10, 220)); //TOP RIGHT BOTTOM LEFT 
//     content.setAlignment(resultgrid, Pos.TOP_RIGHT); 
        getChildren().add(vbox); 


        final int ind = i; 
        resultview.setOnMouseClicked((ev) ->{ 


         if (ev.getClickCount()==2) 
         { 





          image = SwingFXUtils.fromFXImage(resultview.getImage(), null); 
          parent.setCrop(image); 



       } 


       }); 


       } 

       } 
      }); 

回答

2

代碼看看Task。它有setOnSucceeded()setOnFailed()它會在你的情況下得心應手。

您可以基本上創建一個新的任務時,搜索發生。搜索將在後臺運行,您可以在屏幕上顯示加載用戶界面。

  • 如果任務成功完成,則可以在新屏幕中加載結果。

  • 如果任務失敗,可以在搜索TextField附近顯示錯誤消息。

  • 如果發生異常,您可以捕捉並編寫必要的代碼。

+0

嗨,很好的解釋,但我需要一個例子來理解。此刻,我只需要創建一個任務,這樣的任務'任務 =新任務(){ \t \t \t \t \t \t @覆蓋 \t \t \t \t \t \t保護布爾()調用拋出異常{ \t \t \t \t \t \t \t // TODO自動生成方法存根 \t \t \t \t \t \t \t return null; \t \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t};' – user2556079

+0

@IItachiUchiha我只是把代碼有關 「CERCA」 按鈕,所以在這種方式我們可以更好地瞭解對方。我已經評論了我寫過 – user2556079

+1

@ user2556079的代碼,在按鈕操作事件中創建一個任務並不是一個好主意,因爲你在其中推送了很多代碼。你可以創建一個任務,並在動作事件中啓動它。此外,您還需要重寫'setOnSucceeded()'和'setOnFailed()',這會讓您的事件變得笨拙。 – ItachiUchiha