我正在尝试将Swing内容嵌入到更大的JavaFX应用程序中,但是我不能让嵌入式JPanel具有透明背景。 JPanel只画了一些区域。我希望绿色“透过”,即删除下图中的浅灰色背景。
public class TransparentSwingNode extends Application {
@Override
public void start(Stage stage) {
BorderPane pane = new BorderPane();
pane.setStyle("-fx-background-color: green");
final SwingNode swingNode = new SwingNode();
BorderPane.setMargin(swingNode, new Insets(20));
createAndSetSwingContent(swingNode);
pane.setCenter(swingNode);
// swingNode.setStyle("-fx-background-color: transparent"); // doesn't work
stage.setScene(new Scene(pane, 240, 240));
stage.show();
}
private void createAndSetSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JPanel panel = new DummyPanel();
panel.setOpaque(false);
// panel.setBackground(null); // doesn't work
// panel.setBackground(new Color(0, 0, 0, 0)); // Doesn't work
swingNode.setContent(panel);
}
});
}
private class DummyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillOval(getHeight() / 4, getHeight() / 4, getWidth() / 2, getHeight() / 2);
}
}
public static void main(String[] args) {
launch(args);
}
}
我试过
更新
答案 0 :(得分:4)
我的同事终于找到了一些东西。系统属性swing.jlf.contentPaneTransparent
,即-Dswing.jlf.contentPaneTransparent=true
除了
之外,我找不到任何关于此的官方文档另外,我们有一个实验性的无证选项 (“swing.jlf.contentPaneTransparent”)打开SwingNode的 透明度。这就是说我们可能不应该拒绝 透明度支持,除非这需要认真努力。