Button events in ListCells not working

Daniel Opitz dfxloc at gmail.com
Thu Feb 13 23:26:46 PST 2014


https://javafx-jira.kenai.com/browse/RT-35864

-- 
Daniel Opitz

On 14 Feb 2014 at 08:09:20, Jonathan Giles (jonathan.giles at oracle.com) wrote:

File a bug in Jira and I can take a closer look in the coming days. Thanks!
-- Jonathan
Sent from a touch device. Please excuse my brevity.

On 14 February 2014 19:46:12 GMT+13:00, Daniel Opitz <dfxloc at gmail.com> wrote:
Hi,

I found something that looks like a bug. When a Button is placed in a ListCell (or probably any other Cell) its onAction event is never fired and onMouseClicked very rarely and seemingly randomly. Or is it me doing things the wrong way? Using the JDK8 RC. Here is some example code:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.stage.Stage;

public class Testing extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        ObservableList<String> strings = FXCollections.observableArrayList();
        strings.addAll("text", "another");
        ListView<String> list = new ListView<>(strings);
        list.setCellFactory(cell -> new ButtonCell());
        Scene s = new Scene(list, 300, 400);
        primaryStage.setScene(s);
        primaryStage.show();
    }

    private class ButtonCell extends ListCell<String> {

        @Override
        protected void updateItem(String item, boolean empty) {
            super.updateItem(item, empty);
            if (empty) {
                setText(null);
                setGraphic(null);
            } else {
                setText(item);
                Button b = new Button("button");
                b.setOnAction(action -> System.out.println("zam"));
                b.setOnMouseClicked(action -> System.out.println("bam"));
                setGraphic(b);
            }
        }
    }
}


--  
Daniel Opitz



More information about the openjfx-dev mailing list