It may be more of a generic usage issue than a JavaFX issue, but I don't know how to resolve the error. Please let me know.
I'm trying to create a desktop app using JavaFX. I'd like to see TreeView, but I get a compilation error during initialization.
Development Environment
jdk17.0.1
JavaFx17.0.2
Eclipse 2021-12
Description Resource Path Location Type
The method setRoot (TreeItem<TreeItem<TreeItemDataDataOtTree>)
in the type TreeView <TreeItem<TreeItemDataDataOtTree>>
is not applicable for the arguments (TreeItem<TreeItemDataDataOtTree>)
OtMainController.java/OtInvoker/src/com/xxx/ditaot/appline88 Java Problem
OtMain.fxml (TreeView Affected)
<TabPane prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE">
<tabs>
<Tab text="%tabTxtDitaOt">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="346.0" prefWidth="200.0">
<children>
<TreeView prefHeight="346.0" prefWidth="200.0" fx:id="tvDitaOt"/>
</children></AnchorPane>
</content>
</Tab>
OtMainController.java (some codes may not be relevant)
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.ButtonType;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initialize;
import com.xxx.ditaot.util.XmlResourceBundle;
import com.xxx.ditaot.util.XmlResourceBundleControl;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
//...
public class OtMainController extensions Application implements Initializable {
private static final String RESOURCE_BUNDLE_PATH="."+File.separator+"resource"+File.separator+"property";
private static final String ICON_FILE_PATH="."+File.separator+"resource"+File.separator+"icon";
private static final String DITAOT_ROOT_ICON = "icons 8-home-48.png";
private static final String DITAOT_ICON = "icons 8-folder-48.png";
private static final String DITAOT_PLUGIN_ICON = "icons8-file-check-48.png";
private Scene;
private Pane root;
static Stage stage;
private String atDirPath=null;
private ResourceBundle.Control control;
private ResourceBundle bundle;
private final Node iconDitaOtRoot;
private final NodeiconDitaOt;
private final Node iconDitaOtPlugin;
public OtMainController()throws MalformedURLException {
ditaOtInfos = new DitaOtInfos();
control = new XmlResourceBundleControl();
URLClassLoader urlLoader=newURLClassLoader(newURL[]{newFile(RESOURCE_BUNDLE_PATH).toURI().toURL()});
Locale locale= Locale.getDefault();
bundle=XmlResourceBundle.getBundle("ditaOtAppProp", locale, urlLoader, control);
iconDitaOtRoot=new ImageView(newFile(ICON_FILE_PATH+File.separator+DITAOT_ROOT_ICON).toURI().toString();
iconDitaOt=new ImageView(newFile(ICON_FILE_PATH+File.separator+DITAOT_ICON).toURI().toString();
iconDitaOtPlugin=new ImageView(newFile(ICON_FILE_PATH+File.separator+DITAOT_PLUGIN_ICON).toURI().toString();
}
@ FXML
private TreeView <TreeItem<TreeItemDataDataOtTree>tvDitaOt;
public void setScene(SceneScene) {
This.scene=scene;
}
public void setRoot (Pane root) {
This.root=root;
}
@ Override
public void initialize(java.net.URL url,java.util.ResourceBundle bundle){
TreeItemDataDitaOtRoot dataDitaOtRoot = new TreeItemDataOtRoot(bundle.getString("tvTxtDitaOtRoot"));
TreeItem<TreeItemDataDataOtTree>ditaOtTreeItemRoot=newTreeItemDataDataOtTree>(dataDitaOtRoot, iconDitaOtRoot);
This.tvDitaOt.setRoot(ditaOtTreeItemRoot); // Compilation error here
This.tvDitaOt.setShowRoot(false);
}
public static void setStage(StageParam){
stage=stageParam;
}
//...
}
TreeItemDataDitaOtTree.java
public abstract class TreeItemDataDataOtTree{
// Empty!
}
TreeItemDataDataOtRoot.java
public class TreeItemDataDataOtRoot extensions TreeItemDataDataOtTree{
private final String rootTitle;
public String getRootTitle() {
return this.rootTitle;
}
public TreeItemDataDataOtRoot(String rootTitle){
This.rootTitle=rootTitle;
}
public String to String() {
return getRootTitle();
}
}
Self-resolved.
setRoot
is
The method setRoot (TreeItem<TreeItem>) in the
type TreeView <TreeItem>
I don't know how to interpret it as .
public final void setRoot (TreeItem value)
It should be .
The solution was to simply run away with @SuppressWarnings
. The compilation error disappears below.
@FXML
@SuppressWarnings({"rawtypes"})
private TreeView tvDitaOt;
@Override
@SuppressWarnings({"unchecked"})
public void initialize(java.net.URL url,java.util.ResourceBundle bundle){
TreeItemDataDitaOtRoot dataDitaOtRoot = new TreeItemDataOtRoot(bundle.getString("tvTxtDitaOtRoot"));
TreeItem<TreeItemDataDataOtTree>ditaOtTreeItemRoot=newTreeItemDataDataOtTree>(dataDitaOtRoot, iconDitaOtRoot);
This.tvDitaOt.setRoot(ditaOtTreeItemRoot);
This.tvDitaOt.setShowRoot(false);
}
After this, I moved the code to update TreeView (although it's still bumpy). I think I can somehow proceed with coding.
Sorry for the trouble.
Wrong. I didn't know how to use TreeView type parameters at all. @SuppressWarnings
is not required.
@FXML
private TreeView <TreeItemDataDataOtTree>tvDitaOt;
@Override
public void initialize(java.net.URL url,java.util.ResourceBundle bundle){
TreeItemDataDitaOtRoot dataDitaOtRoot = new TreeItemDataOtRoot(bundle.getString("tvTxtDitaOtRoot"));
TreeItem<TreeItemDataDataOtTree>ditaOtTreeItemRoot=newTreeItem<TreeItemDataDataOtTree>(dataDitaOtRoot);
This.tvDitaOt.setRoot(ditaOtTreeItemRoot);
This.tvDitaOt.setShowRoot(false);
}
is the correct answer.
© 2024 OneMinuteCode. All rights reserved.