Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从对象中的对象在单独的窗口中绘制子表_Java_Javafx - Fatal编程技术网

Java 从对象中的对象在单独的窗口中绘制子表

Java 从对象中的对象在单独的窗口中绘制子表,java,javafx,Java,Javafx,假设我有List lstcat,其中包含两个表中所需的全部类别列表 我还有observeListLStObject,定义如下: public class ObjectA { String MPID; String Date; ObjectB insideObject; } private static ObservableList<ObjectA> getLstObject() { return new lstObject.... } 对象

假设我有
List lstcat
,其中包含两个表中所需的全部类别列表

我还有
observeListLStObject
,定义如下:

public class ObjectA {
    String MPID;
    String Date;
    ObjectB insideObject;
    }
private static ObservableList<ObjectA> getLstObject() {
    return new lstObject....
}
对象B定义为:

public class ObjectB {
    String Symbol;
    int Age;
    }
所以
lstObject=[ObjectA1,ObjectA2,…]

我的目标是让一个表显示所有对象a的成员,当我单击该表中的一行时,另一个表显示相应对象B的成员

我有第一个表的代码:

private TableView init(Stage primaryStage) throws Exception {
    Group root = new Group();
    primaryStage.setScene(new Scene(root));
    TableView<ObjectA> tableView = new Tableview<>;
    List<String> lstCat = ...
    ObservableList<ObjectA> lstObject = ...

    for (int i =0; lstCat.get(i).equals("Symbol") == false;i++) {
        TableColumn<ObjectA,String> col = new TableColumn<>(lstCat.get(i));
        col.setCellValueFactory(new PropertyValueFactory<>(lstCat.get(i)));
        tableView.getColumns().add(col);
        }
    tableView.setItems(lstObject);
    return tableView;
}


public void start(stage primaryStage) throws Exception {
    TableView firstTable = init(primaryStage);
    // Here's the code I need help with. Right now I just have a print statement, 
    // I need this to generate a new table with the corresponding objectB.
    firstTable.setOnMouseClicked(new EventHandler<MouseEvent>()
    {
        @Override
        public void handle(MouseEvent t) {
            System.out.println("print when click")
            }
            });
    Scene scene = new Scene(test);
    primarystage.setScene(scene);
    primaryStage.show();
    }
但是,这不起作用,因为
lstObject
的类型是
ObjectA
,而我的
innerTable
的类型是
ObjectB
。所以我有错误

我错过了什么

(我之所以动态地这样做,是因为我实际使用的表的列比这个多得多,所以静态地不是一个真正的选项

谢谢大家!

编辑:

我想我可能已经弄明白了

我可以在
lstObject
上进行交互,生成一个
lstObjectB
并将每个
ObjectA
中的每个
ObjectB
添加到该
ObservableList
中,然后以这种方式生成一个
innerTable

除非有更好的办法

另外,如何使用mouseEvent使新窗口与新的
innertable一起出现


它也可能只是一个子行或其他东西。不一定是一个新窗口,只是一些弹出显示新信息的东西。

经过一点思考后,我自己找到了答案

这可能不是最干净/最有效的方式,但它又快又脏,可以让你继续前进

我为类a的ObjectB创建了一个
返回
函数

Public class ObjectA {
    ...
    public ObjectB getObjectB() {
        return ObejctB;
    }
然后,正如我所说,我迭代了
lstObject
,以拉出ObjectB

所以我最终得到了这样的结果:

public class ObjectA {
    String MPID;
    String Date;
    ObjectB insideObject;
    }
private static ObservableList<ObjectA> getLstObject() {
    return new lstObject....
}
private static observeList getLstObject(){
返回新对象。。。。
}
然后我做了另一个函数:

private static ObservableList<ObjectB> getListObjectB() {
        ObservableList<ObjectA> lstObjectA =  getLstObject;
        ObservableList<ObjectB> lstObjectB = new FXCollection.observableArraylist();
        for (int i =0;i<lstObjectA.size();i++) {
            lstObjectB.add(lstObjectA.getObjectB());
        }
        return lstObjectB
    }
private静态可观察列表getListObjectB(){
ObservableList lstObjectA=getLstObject;
ObservableList lstObjectB=新的FXCollection.observableArraylist();
对于(int i=0;i