【问题标题】:javafx TreeTableView string array columnsjavafx TreeTableView 字符串数组列
【发布时间】:2022-02-02 15:39:09
【问题描述】:

所有现有答案都使用类对象来显示多列。我必须使用类吗?我可以只使用像 C# 的 ListViewItem 这样的字符串数组吗?如果可以,怎么做?

例如,在第一列显示“hello”,在第二列显示“world”。

public class HelloController {
    @FXML
    private TreeTableView mytree;
    @FXML
    private TreeTableColumn colFirst;
    @FXML
    private TreeTableColumn colSecond;

    @FXML
    void initialize()
    {
        TreeItem<String[]> item = new TreeItem<String[]>(new String[]{"hello", "world"});
        colFirst.setCellValueFactory((CellDataFeatures<Object, String[]> p)
            -> new ReadOnlyStringWrapper(p.getValue().toString()));
        mytree.setRoot(item);
    }
}

fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox alignment="CENTER" spacing="20.0" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.fx2.HelloController">
  <TreeTableView fx:id="mytree" prefHeight="200.0" prefWidth="200.0">
     <columns>
        <TreeTableColumn id="colFirst" prefWidth="75.0" text="First" />
        <TreeTableColumn id="colSecond" prefWidth="75.0" text="Second" />
     </columns>
  </TreeTableView>
</VBox>

【问题讨论】:

  • “我必须使用一个类吗?我可以只使用一个字符串数组”。在 Java 中,数组由类表示,即String[] 是一个类。如果你是这样想的,那么你已经知道了解决方案:你只是在创建一个TreeTableView&lt;String[]&gt;,你基本上可以像TreeTableView&lt;T&gt; 一样将它用于任何其他类T

标签: java javafx treetableview


【解决方案1】:

永远不要使用原始类型:正确参数化你的类型:

public class HelloController {
    @FXML
    private TreeTableView<String[]> mytree;
    @FXML
    private TreeTableColumn<String[], String> colFirst;
    @FXML
    private TreeTableColumn<String[], String> colSecond;

    // ...
}

那么在 lambda 表达式中,pTreeTableColumn.CellDataFeatures&lt;String[], String&gt;,所以 p.getValue()TreeItem&lt;String[]&gt;p.getValue().getValue() 是代表行的 String[]

所以你可以这样做

@FXML
void initialize() {
    TreeItem<String[]> item = new TreeItem<String[]>(new String[]{"hello", "world"});
    colFirst.setCellValueFactory(p
        -> new ReadOnlyStringWrapper(p.getValue().getValue()[0]));
    mytree.setRoot(item);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多