问题描述
我还在 JavaFX 中学习并尝试 GUI ,我似乎无法获得我所追求的外观..我是尝试在面板中对几个标签进行分组,然后在不同面板中添加另一个标签。但我似乎无法弄清楚如何在 JavaFX 中正确使用JPanels?
任何帮助都将是非常感谢:D
谢谢
编辑:
以下是我尝试通过尝试不同的布局实现的目标,没有运气
Java FX
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
* /
公共类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);
@Override
public void start(Stage primaryStage){
primaryStage.setTitle(Test);
GridPane root = new GridPane();
root.setPadding(new Insets(16));
root.setVgap(16);
root.setBorder(黑色);
root.setBackground(new Background(new BackgroundFill(
Color.LIGHTGRAY,CornerRadii.EMPTY,Insets.EMPTY)));
BorderPane top = new BorderPane();
top.setPadding(new Insets(16));
top.setBorder(红色);
top.setLeft(createLabel(Label 1,yellow,16));
标签topCenter = createLabel(标签2,黄色,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(蓝色);
bot.setCenter(createLabel(Label 4,Color.GREEN,24));
root.add(bot,0,1);
场景场景=新场景(根);
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);
标签l =新标签(text,r);
l.setContentDisplay(ContentDisplay.TOP);
l.setTextFill(color);
l.setFont(new Font(16));
返回l;
}
public static void main(String [] args){
launch(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 :DThanks
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!