Как добавить прослушиватель onclick для элементов CardPane (Gluon с JavaFX) - PullRequest
0 голосов
/ 24 сентября 2018

Я использую компонент CardPane внутри fxml-файла:

<?import com.gluonhq.charm.glisten.control.CardPane?>

<CardPane fx:id="cardList">
 <Label text="label1" />
 <Label text="label2" />
</CardPane>

С моим контроллером:

public class Sample extends Pane {

@FXML
private CardPane cardList;

private final String FXML_FILE = "sample.fxml";

public Sample()
{
    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().getResource(FXML_FILE));
    fxmlLoader.setRoot(this);
    fxmlLoader.setController(this);

    try
    {
        fxmlLoader.load();
    }
    catch (IOException ioexception)
    {
        throw new RuntimeException(ioexception);
    }
}

protected void clickItem()
{
    System.out.println("The item 'x' was clicked!");
}

Можно ли добавить слушателя к элементам CardPane, чтобыкогда я нажимаю на один элемент, я вызываю метод clickItem ()?Как действовать ?И как я могу определить, какой элемент был нажат?

1 Ответ

0 голосов
/ 24 сентября 2018

Вот решение, с которым я пришел, пожалуйста, поделитесь своим мнением об этом подходе:

 public XMLFileChooserComponentController()
{
   [...]

    ObservableList<Label> labels = xmlFiles.getItems();

    labels.forEach((label) -> {
        label.setOnMouseClicked(this::clickItem);
    });

}

public void clickItem(MouseEvent event)
{
    Label label = (Label) event.getSource();
    if (label.getId().equals("label1"))
    {
        System.out.println("The label " + label.getId() + " was clicked!");
    }
    if (label.getId().equals("label2"))
    {
        System.out.println("The label " + label.getId() + " was clicked!");
    }
}
...