单击包含observableArray的tableView内部的ImageView后执行事件

时间:2018-05-08 15:24:29

标签: java javafx

我有一个类(TaskInOurProgram),它在constructer中包含ImageView。 这是一个小代码剪切 - 声明然后构造:

private ImageView closeTask;
private ImageView pauseTask;
private final Image pauseImage = new Image("file:images/pause.png");
private final Image closeImage = new Image("file:images/close.png");

public TaskInOurProgram(String name, String configName, String extensionOfTheFile) {
    this.nameOfTheFile = name;
    this.configName = configName;
    this.extensionOfTheFile = extensionOfTheFile;
    this.closeTask = new ImageView();
    closeTask.setImage(closeImage);
    this.pauseTask = new ImageView();
    pauseTask.setImage(pauseImage);       
}

然后我有一个observableArrayList,其中包含许多这些TaskInOurProgram对象。

private ObservableList<TaskInOurProgram> tasksInTheTableView = FXCollections.observableArrayList();

我有一个tableView,它显示了这个对象列表。那么它看起来像这样。

enter image description here

对象从一开始就不存在,需要通过单击按钮ADD TASK添加它们,因为它是observableList,它会在添加后立即显示这个“任务”。

我需要什么:我需要的是在控制器内部创建方法,点击“暂停”ImageView后会执行某些操作。我真的不知道该怎么做,我不知何故在想着听众。在此之前,我需要将click事件放在imageView上。

请问你们,帮助我吗?谢谢你的想法。

2 个答案:

答案 0 :(得分:0)

尝试使用带有Graphic的Button而不是普通的ImageView。这样您就可以使用Button.setOnAction()方法。

您当前正在定义ImageView的位置,请将其更改为以下内容:

this.pauseTask = new Button("", new ImageView(pauseImage));
this.pauseTask.setOnAction(new EventHandler<ActionEvent>(){
    @Override
    public void handle(ActionEvent event) {
        pause();
    }
});

您可以在程序中的其他位置定义方法,如下所示:

private void pause() {
    // your code here
}

答案 1 :(得分:0)

使用setOnMouseClicked()方法imageView来处理点击事件。

pauseTask.setOnMouseClicked(new EventHandler<Event>() {

            @Override
            public void handle(Event event)
            {
                pauseTask();
            }
        });

然后你可以用其他方法处理它

void pauseTask()
{

}