java - 什么相当于 JavaFX 中的 JPanel

标签 java swing user-interface layout javafx

我仍在学习和试验 JavaFX 中的 GUI,我似乎无法获得我想要的“外观”。我试图在一个面板中组合几个标签,然后在一个不同的面板中添加另一个标签。但我似乎无法弄清楚如何在 JavaFX 中正确使用 “JPanels”

任何帮助将不胜感激:D 谢谢

编辑: 这是我试图通过尝试不同的布局来实现的目标,仍然没有运气

preview

最佳答案

虽然 Java FX Pane类似于 Swing JPanel , 下面的示例使用 Pane 的子类来获得各种布局效果。特别是,

  • 不要将 JPanel 设置为 GridLayout,而是使用 GridPane

  • 不要将 JPanel 设置为 BoderLayout,而是使用 BorderPane

  • 使用 ContentDisplay.TOP 将标签的内容定位在其文本之上,如图所示 here .

  • topCenter使用ContentDisplay.CENTER,使标签覆盖在矩形上;为了比较,以前的 version使用了 StackPane

  • 使用 setPadding()setMargin()setVgap() 将事情展开一点。

image

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;

/**
 * @see https://stackoverflow.com/a/37935114/230513
 */
public class BorderTest extends Application {

    private static final Border black = new Border(new BorderStroke(Color.BLACK,
        BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
    private static final Border red = new Border(new BorderStroke(Color.RED,
        BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
    private static final Border blue = new Border(new BorderStroke(Color.BLUE,
        BorderStrokeStyle.SOLID, new CornerRadii(8), new BorderWidths(2)));
    private static final Color yellow = Color.YELLOW.deriveColor(0, .9, 1, 1);

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Test");

        GridPane root = new GridPane();
        root.setPadding(new Insets(16));
        root.setVgap(16);
        root.setBorder(black);
        root.setBackground(new Background(new BackgroundFill(
            Color.LIGHTGRAY, CornerRadii.EMPTY, Insets.EMPTY)));

        BorderPane top = new BorderPane();
        top.setPadding(new Insets(16));
        top.setBorder(red);
        top.setLeft(createLabel("Label 1", yellow, 16));
        Label topCenter = createLabel("Label 2", yellow, 64);
        topCenter.setContentDisplay(ContentDisplay.CENTER);
        BorderPane.setMargin(topCenter, new Insets(16));
        top.setCenter(topCenter);
        top.setRight(createLabel("Label 3", yellow, 16));
        root.add(top, 0, 0);

        BorderPane bot = new BorderPane();
        bot.setPadding(new Insets(16));
        bot.setBorder(blue);
        bot.setCenter(createLabel("Label 4", Color.GREEN, 24));
        root.add(bot, 0, 1);

        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private Label createLabel(String text, Color color, int size) {
        Rectangle r = new Rectangle(3 * size, 2 * size);
        r.setFill(Color.TRANSPARENT);
        r.setStroke(color);
        r.setStrokeWidth(3);
        Label l = new Label(text, r);
        l.setContentDisplay(ContentDisplay.TOP);
        l.setTextFill(color);
        l.setFont(new Font(16));
        return l;
    }

    public static void main(String[] args) {
        launch(args);
    }
}

关于java - 什么相当于 JavaFX 中的 JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37931670/

相关文章:

java - 如何使 JTable 的标题透明

python - PyQt4:GUI 在长时间运行的循环中卡住

Java swing - 通过 alpha setBackground 在组件中淡入淡出,正确同步

Java Swing - 单击按钮后完成计算时 GUI 卡住

ios - AutoLayout - 如何绑定(bind)两个 View 并相应地更改大小

java - 有没有一种简单的方法可以使用 Jackson 展平 JSON 对象属性?

java - JavaMelody 和 ab 中的 tomcat 性能监控

java - Android Studio 3.1.3 错误。 java.lang.IllegalStateException : Could not execute method for android:onClick 错误

Java Jar hell 运行时异常

java swing形式挂起