JavaFX 中 JPanel 的等价物是什么 [英] Whats the equivalent of JPanel in JavaFX
问题描述
我仍在学习和试验 JavaFX 中的 GUI 并且我似乎无法获得我想要的外观"......我尝试在 面板 中组合几个标签,然后在不同的面板中添加另一个标签.但我似乎无法弄清楚如何在 JavaFX 中正确使用 "JPanels"?
任何帮助将不胜感激:D谢谢
这是我试图通过尝试不同的布局来实现的目标,但仍然没有运气
While Java FX
import javafx.application.Application;导入 javafx.geometry.Insets;导入 javafx.scene.Scene;导入 javafx.scene.control.ContentDisplay;导入 javafx.scene.control.Label;导入 javafx.scene.layout.Background;导入 javafx.scene.layout.BackgroundFill;导入 javafx.scene.layout.Border;导入 javafx.scene.layout.BorderPane;导入 javafx.scene.layout.BorderStroke;导入 javafx.scene.layout.BorderStrokeStyle;导入 javafx.scene.layout.BorderWidths;导入 javafx.scene.layout.CornerRadii;导入 javafx.scene.layout.GridPane;导入 javafx.scene.paint.Color;导入 javafx.scene.shape.Rectangle;导入 javafx.scene.text.Font;导入 javafx.stage.Stage;/*** @see https://stackoverflow.com/a/37935114/230513*/公共类 BorderTest 扩展应用程序 {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);@覆盖公共无效开始(阶段primaryStage){primaryStage.setTitle("测试");GridPane root = new GridPane();root.setPadding(new Insets(16));root.setVgap(16);root.setBorder(黑色);root.setBackground(新背景(新背景填充(Color.LIGHTGRAY, CornerRadii.EMPTY, Insets.EMPTY)));BorderPane top = new BorderPane();top.setPadding(new Insets(16));top.setBorder(红色);top.setLeft(createLabel("标签 1", 黄色, 16));Label topCenter = createLabel("标签 2", Yellow, 64);topCenter.setContentDisplay(ContentDisplay.CENTER);BorderPane.setMargin(topCenter, new Insets(16));top.setCenter(topCenter);top.setRight(createLabel("标签 3", 黄色, 16));root.add(top, 0, 0);BorderPane bot = new BorderPane();bot.setPadding(新插入(16));bot.setBorder(蓝色);bot.setCenter(createLabel("标签 4", Color.GREEN, 24));root.add(bot, 0, 1);场景场景 = 新场景(根);primaryStage.setScene(场景);primaryStage.show();}私有标签 createLabel(字符串文本,颜色颜色,整数大小){矩形 r = 新矩形(3 * 大小,2 * 大小);r.setFill(颜色.透明);r.setStroke(颜色);r.setStrokeWidth(3);标签 l = 新标签(文本,r);l.setContentDisplay(ContentDisplay.TOP);l.setTextFill(颜色);l.setFont(新字体(16));返回 l;}公共静态无效主(字符串 [] args){发射(参数);}}
I'm still learning and experimenting with GUIs in JavaFX and I cant seem to get the "look" that I'm aiming for.. I'm trying to group a couple of Labels in a Panel and then in a different panel add another Label. But I cant seem to figure out how to properly use "JPanels" in JavaFX?
Any help would be greatly appreciated :D Thanks
EDIT: Here is what I'm trying to achieve by trying different layouts, no luck still
While Java FX Pane
is similar to Swing JPanel
, the example below uses subclasses of Pane
to get various layout effects. In particular,
Instead of a
JPanel
set toGridLayout
, useGridPane
.Instead of a
JPanel
set toBoderLayout
, useBorderPane
.Use
ContentDisplay.TOP
to position a label's content above its text, as shown here.Use
ContentDisplay.CENTER
fortopCenter
to make the label overlay the rectangle; for comparison, a previous version usedStackPane
.Use
setPadding()
,setMargin()
andsetVgap()
to spread things out a little.
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);
}
}
这篇关于JavaFX 中 JPanel 的等价物是什么的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!