pat*_*nca 4 android javafx javafxports
我有Textfield,我想在我的Android设备上复制它的内容.
如果我将它作为Windows桌面应用程序运行,我可以通过可能的操作选择right click我得到的文本popup menu.
反正有没有popup menu在Android上得到这个?
可以在JavaFX中轻松模拟推送和保持事件,如此问题.
获得初始事件后,您需要做的就是从TextField调用ContextMenu.由于TextField.getContextMenu()不会返回默认值,您可以提供自己的,也可以尝试获取默认值.
获得默认值有点棘手,因为它是TextFieldBehavior类的一部分.它包含此方法public void contextMenuRequested(ContextMenuEvent e);,因此您只需提供一个ContextMenuEvent,然后从TextField触发事件.
这是一个快速实现:
public class BasicView extends View {
public BasicView(String name) {
super(name);
TextField textField = new TextField();
addPressAndHoldHandler(textField, Duration.seconds(1), event -> {
Bounds bounds = textField.localToScreen(textField.getBoundsInLocal());
textField.fireEvent(new ContextMenuEvent(ContextMenuEvent.CONTEXT_MENU_REQUESTED,
0, 0, bounds.getMinX() + 10, bounds.getMaxY() + 10, false, null));
});
setCenter(new VBox(15.0, new Label("Push and hold for ContextMenu"), textField));
}
private void addPressAndHoldHandler(Node node, Duration holdTime, EventHandler<MouseEvent> handler) {
class Wrapper<T> {
T content;
}
Wrapper<MouseEvent> eventWrapper = new Wrapper<>();
PauseTransition holdTimer = new PauseTransition(holdTime);
holdTimer.setOnFinished(event -> handler.handle(eventWrapper.content));
node.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> {
eventWrapper.content = event;
holdTimer.playFromStart();
});
node.addEventHandler(MouseEvent.MOUSE_RELEASED, event -> holdTimer.stop());
node.addEventHandler(MouseEvent.DRAG_DETECTED, event -> holdTimer.stop());
}
@Override
protected void updateAppBar(AppBar appBar) {
appBar.setTitleText("Push and Hold");
}
}
Run Code Online (Sandbox Code Playgroud)
在桌面上,这是你将得到的:

好消息是你不需要修改Android的ContextMenu,JavaFX有一个自定义的:

请注意,不同的菜单项将根据上下文自动更改,如桌面弹出窗口中所示.
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |