将触摸手势添加到旧版挥杆应用程序
2022-09-04 23:31:38
我有一个传统的挥杆应用程序,我需要添加触摸手势,特别是捏合缩放,触摸和拖动。
我尝试了JDK 8的SwingNode,我可以在那里运行swing应用程序,但是显示性能降低了50%以上,这不起作用。MT4J中的SwingTextureRenderer也有同样的问题,甚至没有尝试将触摸事件重新标记为鼠标事件。
我想到了一种玻璃窗格方法,在顶部使用JavaFX层并捕获触摸事件,并尝试将它们作为鼠标事件调度到下面的Swing应用程序。
有没有人有其他方法?目标平台是窗口 8。
赏金一旦Stackoverflow打开它就会来。我很快就需要这个。
编辑:
以下是我用SwingNode尝试的(鼠标重新贴片不起作用)。SwingNode的东西可能会分散对最佳解决方案的注意力,所以如果你有一个更好的主意来让触摸到摇摆,请忽略这一点:
@Override
public void start(Stage stage) {
final SwingNode swingNode = new SwingNode();
createAndSetSwingContent(swingNode);
StackPane pane = new StackPane();
pane.getChildren().add(swingNode);
stage.setScene(new Scene(pane, 640, 480));
stage.show();
}
private void createAndSetSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
UILib.setPlatformLookAndFeel();
// create GraphViewTouch
String datafile = null;
String label = "label";
final JPanel frame = GraphView.demoFrameless(datafile, label);
swingNode.setContent(frame);
swingNode.setOnZoom(new EventHandler<ZoomEvent>() {
@Override public void handle(ZoomEvent event) {
MouseWheelEvent me = new MouseWheelEvent(frame, 1, System.currentTimeMillis(), 0, (int)Math.round(event.getSceneX()), (int)Math.round(event.getSceneY()), (int)Math.round(event.getScreenX()), (int)Math.round(event.getScreenY()), (int)Math.round(event.getZoomFactor()), false, MouseWheelEvent.WHEEL_UNIT_SCROLL, (int)Math.round(event.getZoomFactor()), (int)Math.round(event.getZoomFactor()), event.getZoomFactor());
frame.dispatchEvent(me);
System.out.println("GraphView: Zoom event" +
", inertia: " + event.isInertia() +
", direct: " + event.isDirect());
event.consume();
}
});
}
});
}