【发布时间】:2019-10-25 18:25:04
【问题描述】:
我有一个StackPane,我需要在其中添加四个文本字段和一个图表。这些文本字段将用于设置图表轴的范围。我选择了StackPane,因为它在稍后包含的停靠窗格中很好地重新缩放(与图表一起)。我没有在VBox 或HBox 中嵌入文本字段,因为它们给我后来添加到窗格的缩放矩形(可缩放)带来了麻烦。
除了我无法设置TextFields 和StackPane 边界附近的距离之外,一切正常。我所能控制的只是像pane.setAlignment(upperY, Pos.TOP_LEFT) 这样的一般定位。但这意味着我的两个TextFields 在左下角重叠。任何人都知道如何通过 CSS 或直接在 Java 代码中解决此问题?
我尝试在 CSS 中设置 -fx-alignment。我尝试更改窗格的类型。我尝试在 CSS 等中设置边框插图。
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application
{
static LineChart<Number, Number> chart;
@Override
public void start(Stage stage) throws Exception
{
TextField upperY = new TextField("upperY"); upperY.getStylesheets().add("css/chart.css");
TextField lowerY = new TextField("lowerY"); lowerY.getStylesheets().add("css/chart.css");
TextField rightX = new TextField("rightX"); rightX.getStylesheets().add("css/chart.css");
TextField leftX = new TextField("leftX"); leftX.getStylesheets().add("css/chart.css");
StackPane pane = new StackPane();
HBox.setHgrow(pane, Priority.ALWAYS);
VBox.setVgrow(pane, Priority.ALWAYS);
pane.setAlignment(upperY, Pos.TOP_LEFT);
pane.setAlignment(lowerY, Pos.BOTTOM_LEFT);
pane.setAlignment(rightX, Pos.BOTTOM_RIGHT);
pane.setAlignment(leftX, Pos.BOTTOM_LEFT);
chart = new LineChart<>(new NumberAxis(), new NumberAxis());
pane.getChildren().addAll(chart, upperY, lowerY, leftX, rightX);
Pane root = new Pane();
root.getChildren().add(pane);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
} // end start
public static void main(String[] args)
{
launch(args);
}
}
.text-field{
-fx-font-size: 10pt;
-fx-min-width: 35;
-fx-pref-width: 35;
-fx-max-width: 35;
-fx-min-height: 18;
-fx-pref-height: 18;
-fx-max-height: 18;
-fx-font-family: "Arial Narrow";
-fx-text-fill: black;
-fx-alignment: BASELINE_CENTER;
-fx-padding: -2 2 0 2; /* // T R B L*/
-fx-background-color: white;
-fx-control-inner-background: white;
-fx-border-color: lightgray;
-fx-border-insets: 0 0 0 0;
-fx-background-insets: 0 0 0 0;
}
我需要将leftX 文本字段向右推,将lowerY 文本字段向上推一点。
【问题讨论】:
-
如果您知道节点的大小,您可以使用the
marginproperty 或AnchorPane。我想不出为什么这比将多个节点包装在HBox/VBox中更可取的原因。不知道你的问题是什么...... -
感谢费边。我现在附上一张照片。在 StackPane 上施加插图/边距的问题在于它减少了图表的可用空间。这不会阻止我的两个文本字段在左下角重叠。我需要一些东西来独立替换每个文本字段
-
我解决了它,因为你建议将此方法应用为 StackPane.setMargin(textfield, new Insets(1,0,0,20)); // T R B L
-
阅读 api 文档并了解所有可用布局的行为(在选择最不合适的布局之前)似乎是个好主意;不相关:不要对字段使用静态范围