我一直在遵循本指南,并在演示的最后一直提供了工作示例(非常有见地的教程,建议10/10):
现在,我想通过添加一个浮动操作按钮来添加新项目,将其扩展到一个更实用的待办事项列表:
fab = FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
fab.bindFabToContainer(current.getContentPane(), Component.RIGHT,
Component.BOTTOM);
fab.addActionListener(e -> { // show dialog for adding new item });
这本身可以正常工作。现在是棘手的部分。在所有项目上使用长按事件时,应该发生两件事:
长按事件是通过从Checkbox类覆盖longPointPress方法实现的:
@Override
public void longPointerPress(int x, int y){
mainForm.longPressEvent(this);
// no event parameter for e.consume();
}
我的问题:
Q1:当我从ToggleButton使用动作侦听器时,会同时触发“正常”点击事件和长按事件。我需要区分两者。 longPointerPress方法在参数列表中没有该事件,因此在完成长时间的Press Event活动后,我无法使用该事件。如何防止正常动作侦听器触发?
Q2:对于“突出效果”,我希望该项目的所有面都具有边距,以使元素整体缩小该数量。换句话说,无需增加以前的总大小。通过仅增加边距,该项目会变大。 如何缩小给定元素的边距,但保留原始大小?
Q3:FAB仅可以选择“ setIcon”,而不能选择“ setMaterialIcon”。因此,我现在每次更改FAB时都在重新创建它,因为我不想忙于所涉及的样式。有没有比这更好的方法了?
//this is the unwanted function, as I dont want to set the style myself
fab.setIcon(FontImage.createMaterial(icon, s));
//Delete FAB pressed, change to Add FAB
fab.remove();
fab = FloatingActionButton.createFAB(FontImage.MATERIAL_ADD);
fab.bindFabToContainer(current.getContentPane(), Component.RIGHT, Component.BOTTOM);
答案 0 :(得分:1)
总是在释放指针时调用Action事件,而不管是否触发了长按事件,因为我们不“知道”您处理了longPress事件。您需要创建一个标志,例如:
private boolean handledInLongPress;
public void longPress(int x, int y) {
// do your stuff
handledInLongPress = true;
}
private void handleActionEvent(ActionEvent ev) {
// I'm using this as a placeholder for your event code
// block the event from propagating and undo anything it might
// have triggered
ev.consume();
}
我建议在元素上使用setUIID()
并定义一组“删除*”的UIID。您可以定义较小的填充和字体来创建缩小效果,但是如果在此处也有图标,这可能会很棘手。您可以按比例缩小上述图标,并将原始图标保留在客户端属性中。
FAB进行了大量假设,因此重新创建它(或使用两个实例)可能比尝试设置图标更好。在当前实现中,无法在运行时更改FAB的图标。