2017-01-10 1 views
0

Следующий код предназначен для отображения дерева и распечатки значения, выбранного пользователем. Я хотел бы распечатать «ОК», что означает то же значение объекта «овал» в аргументе метода ChangeLisner.Как сравнить сообщение объекта в ChangeListener

Как мне это сделать?

Я имею в виду следующий адрес

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

Смежные вопросы