java - JSwing简单按钮/JFXPanel布局

标签 java swing layout javafx

有人可以告诉我用 Java 实现下图中的布局的最简单方法吗?

JFXPanel 应占据所有屏幕空间,但调整窗口大小时应保持相同大小的按钮除外。

enter image description here

更一般地说,Java 中是否有任何 LayoutManager 可以让我以一种简单的方式将组件一个一个地堆叠起来?

我尝试过的所有方法都使按钮太大。我不知道,也许 JFXPanel 的大小调整很困惑。

谢谢你,这让我发疯。

最佳答案

  • 使用嵌套的 JPanel,这是关键,每个面板都使用自己的布局。
  • 主 JPanel 中的整个内容的 BorderLayout。
  • 一个 FlowLayout JPanel,用于容纳 JButton,并将该 JPanel 放置在主 JPanel BorderLayout 中。PAGE_START
  • 将 JFXPanel 放置在主 JPanel BorderLayout.CENTER 中
  • 请阅读布局管理器教程,因为其中已对此进行了全部解释和显示。

enter image description here

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class JavaFXSwingApplication1 extends JApplet {

    private static final int JFXPANEL_WIDTH_INT = 300;
    private static final int JFXPANEL_HEIGHT_INT = 250;
    private static JFXPanel fxContainer;
    private static JFXPanel fxContainerTwo;
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (Exception e) {
                }
                JFrame frame = new JFrame("JavaFX embeded in Swing");
                frame.setLayout(new BorderLayout(5, 5));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JApplet applet = new JavaFXSwingApplication1();
                applet.init();
                frame.setContentPane(applet.getContentPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
                applet.start();
            }
        });
    }

    @Override
    public void init() {
        fxContainer = new JFXPanel();
        fxContainer.setPreferredSize(new Dimension(JFXPANEL_WIDTH_INT / 5, JFXPANEL_HEIGHT_INT / 5));
        add(fxContainer, BorderLayout.NORTH);
        fxContainerTwo = new JFXPanel();
        fxContainerTwo.setPreferredSize(new Dimension(JFXPANEL_WIDTH_INT, JFXPANEL_HEIGHT_INT));
        add(fxContainerTwo, BorderLayout.CENTER);
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                createScene();
                createScene2();
            }
        });
    }

    private void createScene() {
        Button btn = new Button();
        btn.setText("Say 'Hello World'");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        Scene scene = new Scene(root, Color.BLUEVIOLET);
        fxContainer.setScene(scene);
    }

    private void createScene2() {
        Button btn = new Button();
        btn.setText("Say 'Hello World' Two");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });
        StackPane root = new StackPane();
        root.getChildren().add(btn);
        Scene scene = new Scene(root, Color.ALICEBLUE);
        fxContainerTwo.setScene(scene);
    }
}

关于java - JSwing简单按钮/JFXPanel布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723289/

相关文章:

java - 在基本 SQLite 页面上找不到方法 addButtonClick

swing - 如何在矩形上创建和分布对角条纹?

java - 使用 JButton Click 打开新的 JFrame - Java Swing

reactjs - UIScrollView Canvas 等效吗?

android - 两个按钮在 Android 上拉伸(stretch)到全屏

bean 构造函数中的 Java 值注入(inject)

java - 从方法返回泛型

java - FusedLocationProviderClient.getCurrentLocation 是如何工作的?取消 token

java - 简单 Java 程序的启动导致白屏暂停

layout - 当 FutureBuilder 在 LayoutBuilder 中时 flutter 无限循环