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