Javafx BorderPane.setCenter更改底部区域的位置
我正在学习Javafx,在这里,我试图在屏幕的左下角显示一个模拟时钟和秒针的角度值。如果我尝试增加时钟组中被设置为BorderPane center的圆的半径,它会改变显示角度值的底部区域的位置。我原以为中心区域将保持在其区域内,即使更大的维度节点被添加(或更新)到时钟组,并且底部区域仍然可见。这是我的示例代码Javafx BorderPane.setCenter更改底部区域的位置,javafx,Javafx,我正在学习Javafx,在这里,我试图在屏幕的左下角显示一个模拟时钟和秒针的角度值。如果我尝试增加时钟组中被设置为BorderPane center的圆的半径,它会改变显示角度值的底部区域的位置。我原以为中心区域将保持在其区域内,即使更大的维度节点被添加(或更新)到时钟组,并且底部区域仍然可见。这是我的示例代码 import javafx.application.Application; import javafx.geometry.Pos; import javafx.scene.Group;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;
import javafx.scene.transform.Rotate;
import javafx.stage.Screen;
import javafx.stage.Stage;
public class MainApp extends Application {
static BorderPane borderPane;
static Group clock;
public static Circle clockCircle;
public static Line angHand;
public static Text angText;
public static Rotate angRotate;
public static Label angLabel;
public static void main(String[] args) {
borderPane = new BorderPane();
clock = new Group();
clockCircle = new Circle(360, Color.RED); //increasing the radius affects other region
angHand = new Line();
angHand.startXProperty().bind(clockCircle.centerXProperty());
angHand.startYProperty().bind(clockCircle.centerYProperty());
angHand.endXProperty().bind(clockCircle.centerXProperty());
angHand.endYProperty().bind(clockCircle.centerYProperty().subtract(clockCircle.getRadius()));
angText = new Text();
angRotate = new Rotate();
angRotate.pivotXProperty().bind(clockCircle.centerXProperty());
angRotate.pivotYProperty().bind(clockCircle.centerYProperty());
angHand.getTransforms().addAll(angRotate);
angText.getTransforms().addAll(angRotate);
angLabel = new Label();
angLabel.setText("Angle: 0");
BorderPane.setAlignment(angLabel, Pos.BOTTOM_LEFT);
clock.getChildren().addAll(clockCircle, angHand, angText);
Button home = new Button();
home.setGraphic(new ImageView(new Image(MainApp.class.getResourceAsStream("etc/home.png"))));
borderPane.setCenter(clock);
borderPane.setBottom(angLabel);
borderPane.setRight(home);
//DataReceiver objDataReceiver = new DataReceiver();
//Thread dataRecvThread = new Thread(objDataReceiver, "DATARECVR");
//dataRecvThread.start();
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("CLOCK");
primaryStage.setMaximized(true);
primaryStage.setScene(new Scene(borderPane, Screen.getPrimary().getVisualBounds().getWidth(), Screen.getPrimary().getVisualBounds().getHeight()));
primaryStage.show();
}
}
您发布的代码无法编译。什么是class
DataReceiver
?就是我运行你的代码时的样子。我将“home.png”替换为一个黄色圆圈,它出现在右上角。问题出在哪里?@Abra我修改了密码。请再看一遍,特别是“时钟圈=新圈(360,颜色。红色);”这行没有区别。我仍然不明白问题出在哪里。@Abra如果我增大圆的半径,左下角的标签就看不见了。我希望borderpane的底部、右侧、左侧和顶部区域始终可见,无论中心区域中节点的大小/位置如何