【问题标题】:How to add onclick listener on CardPane items (Gluon with JavaFX)如何在 CardPane 项目上添加 onclick 侦听器(使用 JavaFX 的 Gluon)
【发布时间】:2018-09-24 09:39:38
【问题描述】:

我在 fxml 文件中使用 CardPane 组件:

<?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() 方法?如何进行 ?以及如何确定点击了哪个项目?

【问题讨论】:

    标签: javafx action fxml gluon


    【解决方案1】:

    这是我提出的解决方案,请分享您对这种方法的看法:

     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!");
        }
    }
    

    【讨论】:

    • 当然,这是一个有效的解决方案。但是如果您使用 FXML 并且只有固定数量的标签,为什么不直接将事件处理程序添加到每个标签(SceneBuilder,代码选项卡-> On Mouse Clicked)?
    • 是的,如果我有固定数量的标签,这可以工作,但在这种情况下,我不这就是我问的原因:-)
    • 当然是。请注意,CardPane 只是一个容器,因此您必须在某个时候添加它的子项。当您这样做时,您已经可以为他们提供所需的侦听器。
    • 是的,我猜是这样的解决方案,因为 CardPane 并不真正需要知道它的孩子发生了什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多