Javafx 2 Javafx,获取TableCell引用的对象
我在TableView的选定单元格上侦听以下回调:Javafx 2 Javafx,获取TableCell引用的对象,javafx-2,Javafx 2,我在TableView的选定单元格上侦听以下回调: Callback<TableColumn<MyFTPFile,String>, TableCell<MyFTPFile,String>> cellFactory = new Callback<TableColumn<MyFTPFile,String>, TableCell<MyFTPFile,String>>() {
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);
}
}
});
回调单元工厂=
新回调函数(){
公共TableCell调用(TableP列){
TableCell单元格=新的TableCell(){
@凌驾
public void updateItem(字符串项,布尔值为空){
super.updateItem(项,空);
setText(空?null:getString());
设置图形(空);
}
私有字符串getString(){
返回getItem()==null?”:getItem().toString();
}
};
cell.addEventFilter(MouseEvent.MOUSE_单击,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
如果(event.getClickCount()>1){
TableCell c=(TableCell)事件.getSource();
ftpObservablelist=MyFTPClient.getInstance().getFtpObservableList();
ftpTable.setItems(ftpObservablelist);
}
}
});
现在,我想获取单元格引用的MyFTPFile对象,双击该对象,这样我就可以将其传递给另一个类并执行一些操作…知道如何执行吗
提前感谢。MyFTPFile对象与单元格的行相关联,因此,正如询问者在其评论中指出的那样,可以通过
cell.getTableRow().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.application.application;
导入javafx.event.EventHandler;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.control.TableCell;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
导入javafx.scene.control.cell.TextFieldTableCell;
导入javafx.scene.input.MouseEvent;
导入javafx.stage.stage;
导入javafx.util.Callback;
公共类TableClickListener扩展了应用程序{
公共静态void main(字符串[]args){
发射(args);
}
类FTPTableCell扩展了TextFieldTableCell{
FTPTableCell(){
超级();
addEventFilter(单击MouseEvent.MOUSE_,新建EventHandler()){
@凌驾
公共无效句柄(MouseeEvent事件){
if(event.getClickCount()>1&&getItem()!=null){
System.out.println(“将“+getTableRow().getItem()+”发送到FTP客户端”);
}
}
});
}
}
最终回调FTP\表\单元\工厂=
新回调函数(){
公共TableCell调用(TableP列){
返回新的FTPTableCell();
}
};
@凌驾
公共作废开始(最后阶段){
最终的TableView表格=新的TableView();
final TableColumn filenameColumn=新的TableColumn(“文件名”);
setCellValueFactory(新的PropertyValueFactory(“文件名”);
setCellFactory(FTP\表格\单元格\工厂);
filenameColumn.setMinWidth(150);
最终表列评级列=新表列(“评级”);
ratingColumn.setCellValueFactory(新属性ValueFactory(“评级”);
ratingColumn.setCellFactory(FTP表格单元格工厂);
ratingColumn.setMinWidth(20);
table.getColumns().setAll(filenameColumn,ratingColumn);
table.getItems().setAll(
新的MyFTPFile(“xyzy.txt”,10),
新的MyFTPFile(“管理报告文件”,1),
新MyFTPFile(“flower.png”,7)
);
table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_策略);
舞台场景(新场景(新组(表));
stage.show();
}
公共类MyFTPFile{
私有最终字符串文件名;
私人最终int评级;
MyFTPFile(字符串文件名,整数分级){
this.filename=文件名;
这个。评级=评级;
}
公共字符串getFilename(){
返回文件名;
}
public int getRating(){
回报率;
}
@凌驾
公共字符串toString(){
返回“MyFTPFile{”+
“文件名='”+文件名+'\''+
“,额定值=”+额定值+
'}';
}
}
}
Thx,但我必须使用cell.getTableRow().getItem()来获取对象。