2017-01-10 4 views
0

次のコードは、treeviewを表示し、ユーザーが選択した値を出力します。 私は、ChangeLisnerメソッドの引数にオブジェクト "oval"の同じ値を意味する "OK"を出力したいと思います。ChangeListenerでオブジェクトのメッセージを比較する方法

どうすればよいですか?

私は、次のURL

http://blog.professional-webworkx.de/javafx-get-selecteditem-of-treeview/

を参照してください、私は次のようなコードを追加します。

if("TreeItem [ value: SubItem ]".equals(oldVal)){System.out.println("YES");} 
else{System.out.println("NO");}" 

のSystem.out.printlnの結果は以下の通りです:

TreeItem [値:SubItem]

NO

package app; 

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.Event; 
import javafx.event.EventHandler; 
import javafx.event.EventType; 
import javafx.scene.Scene; 
import javafx.scene.control.MultipleSelectionModel; 
import javafx.scene.control.TreeItem; 
import javafx.scene.control.TreeView; 
import javafx.scene.input.MouseEvent; 
import javafx.stage.Stage; 

public class App extends Application{ 

    @Override 
    public void start(Stage stage) throws Exception { 

     TreeItem<String> item = new TreeItem<String>("root"); 
     final TreeView<String> treeView = new TreeView<String>(item); 
     for(int i=0; i<10; i++) { 
      item.getChildren().add(new TreeItem<String>("Item" + i)); 
       if(i%5==0) { 
       TreeItem<String> subItem = new TreeItem<String>("SubItem"); 
       item.getChildren().add(subItem); 
       subItem.setExpanded(true); 
       for(int j=0; j<10; j++) { 
        subItem.getChildren().add(new TreeItem<String>("SubsubItem" + i)); 
       } 

      } 

     } 
     treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { 
      @Override 
      public void changed(ObservableValue observable, Object oldVal, Object newVal) { 
       System.out.println(oldVal);// + " neuer: " + newVal); 

       if("TreeItem [ value: SubItem ]".equals(oldVal)){System.out.println("YES");} 
       else{System.out.println("NO");} 
      } 
     }); 
     stage.setTitle("TreeView"); 
     stage.setScene(new Scene(treeView, 640, 480)); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 

答えて

0

ツリー項目のtoStringを比較しないでください。その価値を比較する。 (そして、は生の型を使用しない:正しく、すべての変数と匿名クラスを入力するなど)もちろん

treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TreeItem<String>>() { 
    @Override 
    public void changed(ObservableValue<? extends TreeItem<String>> observable, TreeItem<String> oldItem, TreeItem<String> newItem) { 
     System.out.println(oldItem.getValue());// + " neuer: " + newVal); 

     if(oldItem != null && "SubItem".equals(oldItem.getValue())){ 
      System.out.println("YES"); 
     } else{ 
      System.out.println("NO"); 
     } 
    } 
}); 

を、これは、ラムダ式を使用して、非常にクリーンである(とJava 8型推論を利用して):

treeView.getSelectionModel().selectedItemProperty().addListener(
    (observable, oldItem, newItem) -> { 
     System.out.println(oldItem.getValue());// + " neuer: " + newVal); 

     if(oldItem != null && "SubItem".equals(oldItem.getValue())){ 
      System.out.println("YES"); 
     } else{ 
      System.out.println("NO"); 
     } 
    } 
); 
+0

ありがとうございます。あなたはとても役に立ちました! – kkj

関連する問題