use*_*978 3 java layout user-interface swing javafx
我仍然在JavaFX中学习和试验GUI,我似乎无法获得我想要的"外观"..我试图在面板中组合几个标签,然后在另一个面板中添加另一个标签.但我似乎无法弄清楚如何在JavaFX中正确使用"JPanels"?
任何帮助将不胜感激:D谢谢
编辑: 这是我试图通过尝试不同的布局,仍然没有运气实现
虽然Java FX Pane
与Swing类似JPanel
,但下面的示例使用子类Pane
来获得各种布局效果.特别是,
而不是JPanel
设置GridLayout
,使用GridPane
.
而不是JPanel
设置BoderLayout
,使用BorderPane
.
使用ContentDisplay.TOP
一个标签的内容定位其上面的文字,如图所示这里.
使用ContentDisplay.CENTER
为topCenter
使标签覆盖的矩形; 为了便于比较,以前的版本使用StackPane
.
使用setPadding()
,setMargin()
并将setVgap()
事情传播出去.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10997 次 |
最近记录: |