我有一个TreeView,在缩小父目录时,我仍然看到原始子节点。只存在作为“神器”,不是真的存在而且不可点击。这是导致问题的代码的一部分。我知道,因为当我评论它时,TreeView工作正常。
selectionTreeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> paramP) {
return new TreeCell<String>(){
@Override
protected void updateItem(String paramT, boolean paramBoolean) {
super.updateItem(paramT, paramBoolean);
if(!isEmpty()){
setGraphic(new Label(paramT));
final TreeCell<String> this$ = this;
this.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(event.getClickCount()==2){
// Getting the node value.
String nodeValue = this$.getItem();
}
}
});
}
}
};
}
});
这允许我在双击时返回子项的值。不确定如何纠正问题。任何建议,任何帮助将不胜感激?如果它有帮助,请在下面包含完整的源代码。最后使用JDK 8u5。
package javafxapplication1;
import java.net.URL;
import java.sql.*;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.input.MouseEvent;
import javafx.util.Callback;
/**
*
* @author kevin_000
*/
public class FXMLDocumentController implements Initializable {
@FXML
private Label label;
@FXML TreeView selectionTreeView;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println("You clicked me!");
label.setText("Hello World!");
}
//should delete item selected, does not work currently
@FXML
private void testRemoveTreeItem(ActionEvent event) {
TreeItem<String> c = (TreeItem)selectionTreeView.getSelectionModel().getSelectedItem();
boolean remove = c.getParent().getChildren().remove(c);
System.out.println("Remove");
}
@Override
public void initialize(URL url, ResourceBundle rb) {
createTree();
//Get Name of TreeViewCell Double Clicked
selectionTreeView.setCellFactory(new Callback<TreeView<String>, TreeCell<String>>() {
@Override
public TreeCell<String> call(TreeView<String> paramP) {
return new TreeCell<String>(){
@Override
protected void updateItem(String paramT, boolean paramBoolean) {
super.updateItem(paramT, paramBoolean);
if(!isEmpty()){
setGraphic(new Label(paramT));
final TreeCell<String> this$ = this;
this.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(event.getClickCount()==2){
// Getting the node value.
String nodeValue = this$.getItem();
}
}
});
}
}
};
}
});
}
public void createTree(String... rootItems) {
//create root
TreeItem<String> root = new TreeItem<>("Sales Analysis & Goal Is King");
//root.setExpanded(true);
//january
TreeItem<String> itemJanuary = new TreeItem<>("January");
itemJanuary.setExpanded(false);
TreeItem<String> itemSalesAnalysisJanuary = new TreeItem<>("Sales Analysis");
itemSalesAnalysisJanuary.setExpanded(false);
TreeItem<String> itemGoalIsKingJanuary = new TreeItem<>("Goal Is King");
itemGoalIsKingJanuary.setExpanded(false);
//february
TreeItem<String> itemFebruary = new TreeItem<>("February");
itemFebruary.setExpanded(false);
TreeItem<String> itemSalesAnalysisFebruary = new TreeItem<>("Sales Analysis");
itemSalesAnalysisFebruary.setExpanded(false);
TreeItem<String> itemGoalIsKingFebruary = new TreeItem<>("Goal Is King");
itemGoalIsKingFebruary.setExpanded(false);
//march
TreeItem<String> itemMarch = new TreeItem<>("March");
itemMarch.setExpanded(false);
TreeItem<String> itemSalesAnalysisMarch = new TreeItem<>("Sales Analysis");
itemSalesAnalysisMarch.setExpanded(false);
TreeItem<String> itemGoalIsKingMarch = new TreeItem<>("Goal Is King");
itemGoalIsKingMarch.setExpanded(false);
//april
TreeItem<String> itemApril = new TreeItem<>("April");
itemApril.setExpanded(false);
TreeItem<String> itemSalesAnalysisApril = new TreeItem<>("Sales Analysis");
itemSalesAnalysisApril.setExpanded(false);
TreeItem<String> itemGoalIsKingApril = new TreeItem<>("Goal Is King");
itemGoalIsKingApril.setExpanded(false);
//may
TreeItem<String> itemMay = new TreeItem<>("May");
itemMay.setExpanded(false);
TreeItem<String> itemSalesAnalysisMay = new TreeItem<>("Sales Analysis");
itemSalesAnalysisMay.setExpanded(false);
TreeItem<String> itemGoalIsKingMay = new TreeItem<>("Goal Is King");
itemGoalIsKingMay.setExpanded(false);
//june
TreeItem<String> itemJune = new TreeItem<>("June");
itemJune.setExpanded(false);
TreeItem<String> itemSalesAnalysisJune = new TreeItem<>("Sales Analysis");
itemSalesAnalysisJune.setExpanded(false);
TreeItem<String> itemGoalIsKingJune = new TreeItem<>("Goal Is King");
itemGoalIsKingJune.setExpanded(false);
//july
TreeItem<String> itemJuly = new TreeItem<>("July");
itemJuly.setExpanded(false);
TreeItem<String> itemSalesAnalysisJuly = new TreeItem<>("Sales Analysis");
itemSalesAnalysisJuly.setExpanded(false);
TreeItem<String> itemGoalIsKingJuly = new TreeItem<>("Goal Is King");
itemGoalIsKingJuly.setExpanded(false);
//august
TreeItem<String> itemAugust = new TreeItem<>("August");
itemAugust.setExpanded(false);
TreeItem<String> itemSalesAnalysisAugust = new TreeItem<>("Sales Analysis");
itemSalesAnalysisAugust.setExpanded(false);
TreeItem<String> itemGoalIsKingAugust = new TreeItem<>("Goal Is King");
itemGoalIsKingAugust.setExpanded(false);
//september
TreeItem<String> itemSeptember = new TreeItem<>("September");
itemSeptember.setExpanded(false);
TreeItem<String> itemSalesAnalysisSeptember = new TreeItem<>("Sales Analysis");
itemSalesAnalysisSeptember.setExpanded(false);
TreeItem<String> itemGoalIsKingSeptember = new TreeItem<>("Goal Is King");
itemGoalIsKingSeptember.setExpanded(false);
//october
TreeItem<String> itemOctober = new TreeItem<>("October");
itemOctober.setExpanded(false);
TreeItem<String> itemSalesAnalysisOctober = new TreeItem<>("Sales Analysis");
itemSalesAnalysisOctober.setExpanded(false);
TreeItem<String> itemGoalIsKingOctober = new TreeItem<>("Goal Is King");
itemGoalIsKingOctober.setExpanded(false);
//november
TreeItem<String> itemNovember = new TreeItem<>("November");
itemNovember.setExpanded(false);
TreeItem<String> itemSalesAnalysisNovember = new TreeItem<>("Sales Analysis");
itemSalesAnalysisNovember.setExpanded(false);
TreeItem<String> itemGoalIsKingNovember = new TreeItem<>("Goal Is King");
itemGoalIsKingNovember.setExpanded(false);
//december
TreeItem<String> itemDecember = new TreeItem<>("December");
itemDecember.setExpanded(false);
TreeItem<String> itemSalesAnalysisDecember = new TreeItem<>("Sales Analysis");
itemSalesAnalysisDecember.setExpanded(false);
TreeItem<String> itemGoalIsKingDecember = new TreeItem<>("Goal Is King");
itemGoalIsKingDecember.setExpanded(false);
//create stores, stores are children of SalesAnalsysis & GoalIsKing Trees
try (Connection connection = DriverManager.getConnection(
"jdbc:derby://localhost:1527/FJH_Stores_&_Employees","kevinkabatra","ew4pkd8d");
Statement statement = connection.createStatement();) {
ResultSet rs = statement.executeQuery("select LOCATION from STORES");
while (rs.next()){
//january
itemSalesAnalysisJanuary.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis January"));
itemGoalIsKingJanuary.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King January"));
//february
itemSalesAnalysisFebruary.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis February"));
itemGoalIsKingFebruary.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King February"));
//march
itemSalesAnalysisMarch.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis March"));
itemGoalIsKingMarch.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King March"));
//april
itemSalesAnalysisApril.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis April"));
itemGoalIsKingApril.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King April"));
//may
itemSalesAnalysisMay.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis May"));
itemGoalIsKingMay.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King May"));
//june
itemSalesAnalysisJune.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis June"));
itemGoalIsKingJune.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King June"));
//july
itemSalesAnalysisJuly.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis July"));
itemGoalIsKingJuly.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King July"));
//august
itemSalesAnalysisAugust.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis August"));
itemGoalIsKingAugust.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King August"));
//september
itemSalesAnalysisSeptember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis September"));
itemGoalIsKingSeptember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King September"));
//october
itemSalesAnalysisOctober.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis October"));
itemGoalIsKingOctober.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King October"));
//november
itemSalesAnalysisNovember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis November"));
itemGoalIsKingNovember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King November"));
//december
itemSalesAnalysisDecember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Sales Analsysis December"));
itemGoalIsKingDecember.getChildren().add(new
TreeItem<>(rs.getString("LOCATION")+" Goal Is King December"));
}
} catch (SQLException ex) {
System.err.print("Exception: ");
System.err.println(ex.getMessage());
}
//SalesAnalysis and GoalIsKing are children of each month,
//months are children of root
itemJanuary.getChildren().addAll(itemSalesAnalysisJanuary,itemGoalIsKingJanuary);
itemFebruary.getChildren().addAll(itemSalesAnalysisFebruary,itemGoalIsKingFebruary);
itemMarch.getChildren().addAll(itemSalesAnalysisMarch,itemGoalIsKingMarch);
itemApril.getChildren().addAll(itemSalesAnalysisApril,itemGoalIsKingApril);
itemMay.getChildren().addAll(itemSalesAnalysisMay,itemGoalIsKingMay);
itemJune.getChildren().addAll(itemSalesAnalysisJune,itemGoalIsKingJune);
itemJuly.getChildren().addAll(itemSalesAnalysisJuly,itemGoalIsKingJuly);
itemAugust.getChildren().addAll(itemSalesAnalysisAugust,itemGoalIsKingAugust);
itemSeptember.getChildren().addAll(itemSalesAnalysisSeptember,itemGoalIsKingSeptember);
itemOctober.getChildren().addAll(itemSalesAnalysisOctober,itemGoalIsKingOctober);
itemNovember.getChildren().addAll(itemSalesAnalysisNovember,itemGoalIsKingNovember);
itemDecember.getChildren().addAll(itemSalesAnalysisDecember,itemGoalIsKingDecember);
root.getChildren().addAll(itemJanuary,itemFebruary,itemMarch,
itemApril,itemMay,itemJune,itemJuly,itemAugust,itemSeptember,
itemOctober,itemNovember,itemDecember);
selectionTreeView.setRoot(root);
}
}
答案 0 :(得分:5)
错误在你的updateItem方法中 - 当empty参数为true时你不会调用setGraphic(null)。
我应该注意,在这种情况下使用setGraphic是不正确的 - 当您可以使用paramT字符串调用setText时,您将传入Label。
此外,考虑到调用它的频率,我不会注意到你的updateItem方法正在做更多的工作。当item和empty参数更改为TreeCell的构造函数时(通过使用匿名构造函数),您应该移动与更新单元格无关的所有内容。这包括创建EventHandler - 只需要在构造函数中设置。