2016-12-15 11 views
-1

私はウェブブラウザを構築しようとしています。私はウェブページを取得するためにWebViewを使用しています。私は履歴を格納するためのURLとタイトル名の両方を取得する必要があります。私は値をプリントアウト2人のarraylistsの値をプッシュして印刷する際のシーケンスを維持する

private void currentScene() { 
    Platform.runLater(new Runnable() { 
     @Override 
     public void run() { 

      WebView view = new WebView(); 
      engine = view.getEngine(); 

      engine.createPopupHandlerProperty(); 
      engine.titleProperty().addListener(new ChangeListener<String>() { 
       @Override 
       public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) { 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          if (newValue != null) { 
           //stores the title name in an arraylist 
           title.add(newValue); 
          } 
         } 

        }); 
       } 
      }); 

      engine.locationProperty().addListener(new ChangeListener<String>() { 
       @Override 
       public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) { 
        SwingUtilities.invokeLater(new Runnable() { 
         @Override 
         public void run() { 
          //stores the URL in another arraylist 
          titleUrl.add(newValue); 
          //sets the text of the location text field 
          locationTextField.setText(newValue); 
         } 
        }); 
       } 
      }); 

      jfxPanel.setScene(new Scene(view)); 
     } 
    }); 
} 

は、だから私は、このようにしてみました

for (int i = 0; i < title.size(); i++) { 
      System.Out.Println(title.get(i)+" : "+titleUrl.get(i));   
     } 

をしかし、私の出力は、誰も私でした教えてくださいでき

Google : http://www.yahoo.com 
Yahoo : http://www.google.com 

のようなものです私は間違っていますか?前もって感謝します。

+1

される(1イベントのみがトリガされるというケースはありません) 2つのリスナーが呼び出されたときの順番(たとえば、titlePropertyリスナーが常に最初に呼び出される)は、最初のリスナーの長さをチェックして、最初のリスナーのリストが1要素第2のリスナのリストから。 – Hani

+0

あなたはあなたの答えにそれを示すことができますか? – IAmBlake

答えて

1

2つのリスナーの呼び出し順序がわかっている場合(たとえば、titlePropertyリスナーが常に最初に呼び出される場合など)、最初のリストの長さをチェックして、最初のリストの長さを確認することができますここでは最初のリスナー2番目のリスナーのリストから1つの要素で大きい

はいつも)2つの条件が

1を満たしているのであれば、このソリューションが動作するソリューション

if (title.size() == titleUrl.size() + 1) { 
     titleUrl.add(newValue); 
    } 

の重要な部分であります両方のイベントが発生するあなたが知っていれば

2)その後、同じ注文titlePropertyリスナーlocationPropertyリスナーここ

で常にイベント火災の両方の完全なコード

private void currentScene() { 
     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 

       WebView view = new WebView(); 
       engine = view.getEngine(); 

       engine.createPopupHandlerProperty(); 
       engine.titleProperty().addListener(new ChangeListener<String>() { 
        @Override 
        public void changed(ObservableValue<? extends String> observable, String oldValue, final String newValue) { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           if (newValue != null) { 
            //stores the title name in an arraylist 
            title.add(newValue); 
           } 
          } 

         }); 
        } 
       }); 

       engine.locationProperty().addListener(new ChangeListener<String>() { 
        @Override 
        public void changed(ObservableValue<? extends String> ov, String oldValue, final String newValue) { 
         SwingUtilities.invokeLater(new Runnable() { 
          @Override 
          public void run() { 
           //stores the URL in another arraylist 
           if (title.size() == titleUrl.size() + 1) { 
            titleUrl.add(newValue); 
           } 
           //sets the text of the location text field 
           locationTextField.setText(newValue); 
          } 
         }); 
        } 
       }); 

       jfxPanel.setScene(new Scene(view)); 
      } 
     }); 
    } 
+0

ありがとう!それは私が探している解決策です:) – IAmBlake

関連する問題