将 JPanel 添加到 Javafx
Adding a JPanel to Javafx
我目前正在研究数字签名的签名解决方案。我收到了带有 API 的签名平板电脑。 API 已关闭,我无法更改其中的任何内容。现在的问题是我无法处理设备的响应。在签名或绘图时,我会收到 JPanel 形式的答复。由于我正在使用 JavaFX 场景进行编程,所以我现在不知道如何将 JPanel 包含到我的场景中。我只学会了使用 JavaFx,所以我对 JPanels 之类的东西了解不多。
所以..我想知道是否有办法将 Jpanel 添加到 FlowPane。我发现的关于这个主题的所有内容都是关于其他方式的线程。当人们试图将 javafx-Components 添加到 Jpanel 时。但不是这样..所以也许很明显怎么做,但我不明白。
JPanel x = pad.startSiganture();
FlowPane flow = new FlowPane();
flow.getChildren.addAll(x);
基本上这就是我梦寐以求的,当然是行不通的。所以.. 感谢您的任何回复,我希望这是可能的。
YXCD
是的,这是可能的:将您的 JPanel 添加到 SwingNode,然后将其放入您的 FlowPane:
SwingNode node = new SwingNode()
node.setContent(pad.startSiganture());
FlowPane flow = new FlowPane();
flow.getChildren.addAll(node);
是的,这可以通过 SwingNode 实现,SwingNode 是一个可以包含 swing 内容的 javafx 节点,请参阅文档说明:
此 class 用于将 Swing 内容嵌入到 JavaFX application.The 要显示的内容由接受 Swing JComponent 实例的 setContent(javax.swing.JComponent) 方法指定。 JComponent 实例中包含的组件层次结构不应包含任何重量级组件,否则 SwingNode 可能无法绘制它。内容会自动重新绘制。所有输入和焦点事件都以对开发人员透明的方式转发到 JComponent 实例。
这是一个典型的模式,它演示了如何使用 SwingNode:
public class SwingFx extends Application {
@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, 100, 50));
stage.show();
}
private void createAndSetSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
swingNode.setContent(new JButton("Click me!"));
}
});
}
public static void main(String[] args) {
launch(args);
}
}
我目前正在研究数字签名的签名解决方案。我收到了带有 API 的签名平板电脑。 API 已关闭,我无法更改其中的任何内容。现在的问题是我无法处理设备的响应。在签名或绘图时,我会收到 JPanel 形式的答复。由于我正在使用 JavaFX 场景进行编程,所以我现在不知道如何将 JPanel 包含到我的场景中。我只学会了使用 JavaFx,所以我对 JPanels 之类的东西了解不多。
所以..我想知道是否有办法将 Jpanel 添加到 FlowPane。我发现的关于这个主题的所有内容都是关于其他方式的线程。当人们试图将 javafx-Components 添加到 Jpanel 时。但不是这样..所以也许很明显怎么做,但我不明白。
JPanel x = pad.startSiganture();
FlowPane flow = new FlowPane();
flow.getChildren.addAll(x);
基本上这就是我梦寐以求的,当然是行不通的。所以.. 感谢您的任何回复,我希望这是可能的。
YXCD
是的,这是可能的:将您的 JPanel 添加到 SwingNode,然后将其放入您的 FlowPane:
SwingNode node = new SwingNode()
node.setContent(pad.startSiganture());
FlowPane flow = new FlowPane();
flow.getChildren.addAll(node);
是的,这可以通过 SwingNode 实现,SwingNode 是一个可以包含 swing 内容的 javafx 节点,请参阅文档说明:
此 class 用于将 Swing 内容嵌入到 JavaFX application.The 要显示的内容由接受 Swing JComponent 实例的 setContent(javax.swing.JComponent) 方法指定。 JComponent 实例中包含的组件层次结构不应包含任何重量级组件,否则 SwingNode 可能无法绘制它。内容会自动重新绘制。所有输入和焦点事件都以对开发人员透明的方式转发到 JComponent 实例。
这是一个典型的模式,它演示了如何使用 SwingNode:
public class SwingFx extends Application {
@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, 100, 50));
stage.show();
}
private void createAndSetSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
swingNode.setContent(new JButton("Click me!"));
}
});
}
public static void main(String[] args) {
launch(args);
}
}