gpt4 book ai didi

javafx-2 - Javafx,获取一个TableCell引用的对象

转载 作者:行者123 更新时间:2023-12-04 11:09:58 25 4
gpt4 key购买 nike

我有以下回调监听 TableView 的选定单元格:

        Callback<TableColumn<MyFTPFile,String>, TableCell<MyFTPFile,String>> cellFactory =
new Callback<TableColumn<MyFTPFile,String>, TableCell<MyFTPFile,String>>() {
public TableCell<MyFTPFile,String> call(TableColumn<MyFTPFile,String> p) {
TableCell<MyFTPFile,String> cell = new TableCell<MyFTPFile, String>() {
@Override
public void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : getString());
setGraphic(null);
}

private String getString() {
return getItem() == null ? "" : getItem().toString();
}
};

cell.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() > 1) {
TableCell<MyFTPFile,String> c = (TableCell<MyFTPFile,String>) event.getSource();


ftpObservablelist = MyFTPClient.getInstance().getFtpObservableList();
ftpTable.setItems(ftpObservablelist);

}
}
});

现在,我想获取单元格引用的 MyFTPFile 对象,双击该对象,以便我可以将它传递给另一个类并执行操作......知道怎么做吗???

提前致谢。

最佳答案

MyFTPFile 对象与单元格的行相关联,因此,正如提问者在他的评论中指出的那样,它可以通过 cell.getTableRow().getItem() 检索。 .

起初我以为这应该是cell.getItem() ,它返回与单元格关联的数据值。但是,大多数情况下,单元格数据值将是支持项的属性而不是对象本身(例如 MyFTPFile 对象的文件名字段)。

好奇的可执行示例:

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
import javafx.util.Callback;

public class TableClickListener extends Application {

public static void main(String[] args) {
launch(args);
}

class FTPTableCell<S, T> extends TextFieldTableCell<S, T> {
FTPTableCell() {
super();
addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getClickCount() > 1 && getItem() != null) {
System.out.println("Sending " + getTableRow().getItem() + " to the FTP client");
}
}
});
}
}

final Callback<TableColumn<MyFTPFile, String>, TableCell<MyFTPFile, String>> FTP_TABLE_CELL_FACTORY =
new Callback<TableColumn<MyFTPFile, String>, TableCell<MyFTPFile, String>>() {
public TableCell<MyFTPFile, String> call(TableColumn<MyFTPFile, String> p) {
return new FTPTableCell<>();
}
};

@Override
public void start(final Stage stage) {
final TableView<MyFTPFile> table = new TableView<>();

final TableColumn<MyFTPFile, String> filenameColumn = new TableColumn<>("Filename");
filenameColumn.setCellValueFactory(new PropertyValueFactory<MyFTPFile, String>("filename"));
filenameColumn.setCellFactory(FTP_TABLE_CELL_FACTORY);
filenameColumn.setMinWidth(150);

final TableColumn<MyFTPFile, String> ratingColumn = new TableColumn<>("Rating");
ratingColumn.setCellValueFactory(new PropertyValueFactory<MyFTPFile, String>("rating"));
ratingColumn.setCellFactory(FTP_TABLE_CELL_FACTORY);
ratingColumn.setMinWidth(20);

table.getColumns().setAll(filenameColumn, ratingColumn);

table.getItems().setAll(
new MyFTPFile("xyzzy.txt", 10),
new MyFTPFile("management_report.doc", 1),
new MyFTPFile("flower.png", 7)
);

table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

stage.setScene(new Scene(new Group(table)));
stage.show();
}

public class MyFTPFile {
private final String filename;
private final int rating;

MyFTPFile(String filename, int rating) {
this.filename = filename;
this.rating = rating;
}

public String getFilename() {
return filename;
}

public int getRating() {
return rating;
}

@Override
public String toString() {
return "MyFTPFile{" +
"filename='" + filename + '\'' +
", rating=" + rating +
'}';
}
}

}

关于javafx-2 - Javafx,获取一个TableCell引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com