2015-12-03 4 views
0

У меня есть следующий интерфейсДобавить уровень в JavaFX во время операции загрузки

enter image description here

Таким образом, вы вставить ключевое слово, а затем нажмите кнопку «Cerca» (это как поиск на итальянском языке), то Google Custom Search Api показать первые 10 снимков. Во время пользовательского поиска API обрабатывают результаты (картинки), я хочу показать другое изображение, подобное этому enter image description here

(Я знаю, что это большой, но измерение не является главным моментом сейчас). Моя идея проста, я хочу поместить изображение на один уровень (не знаю точно, как позвонить) через пользовательский интерфейс, тогда изображение не будет видно в 3 случаях: 1) Когда API закончит свою работу 2) Если у меня нет результатов 3) Если я получу исключение. Мой вопрос в том, что это лучший подход для этого? И затем, Должен ли я использовать Threads?

Я надеюсь, что было ясно

UPDATE:

Это код кнопки

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

"Cerca" Взгляните на Task. Он имеет setOnSucceeded() и setOnFailed(), который пригодится в вашем случае.

Вы можете создать новую задачу при поиске. Поиск будет выполняться в фоновом режиме, и вы можете показать загрузочный интерфейс на экране.

  • Если задача завершена успешно, вы можете загрузить новый экран с результатами.

  • Если задача не удалась, вы можете показать сообщение об ошибке возле текстового поля поиска.

  • В случае исключения вы можете поймать его и написать необходимый код.

+0

Привет, славное объяснение, но мне нужен пример, чтобы понять.На данный момент я просто создать задачу, как эта 'Задача задачи = новая задача () { \t \t \t \t \t \t @Override \t \t \t \t \t \t защищенный булеву вызов() бросает исключение { \t \t \t \t \t \t \t // TODO автоматическая генерация метод заглушки \t \t \t \t \t \t \t null 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