当前位置: 首页 > 知识库问答 >
问题:

JavaFX HBox布局绑定为圆形

申高卓
2023-03-14

我在将JavaFX的HBox定位成与Circle类似的方式时遇到了问题。

如果使用圆形形状,则可以手动定位它,使其绑定到不同的节点。这是我到现在为止所做的,通过使用一个窗格作为参考点:

Pane node; //can be dragged around/resized
//...
Circle terminal = new Circle(10);
terminal.setStroke(Color.GREEN);
terminal.setFill(Color.GREEN);
terminal.centerXProperty().bind( node.layoutXProperty() );
terminal.centerYProperty().bind( node.layoutYProperty() );
Pane node; //can be dragged around/resized
//...
HBox terminalContainer = new HBox();
terminalContainer.layoutXProperty().bind( node.layoutXProperty() );
terminalContainer.layoutYProperty().bind( node.layoutYProperty() );
//... adding circles into HBox as scenegraph children

唯一的区别是将HBox替换为圆圈,并使用layoutXProperty(),因为没有centerXProperty()。但这当然失败了,端口看起来粘在包含框架的顶部,行为奇怪。有解决办法吗?我尝试将“家长”窗格更改为“锚定窗格”,这允许手动将HBox锚定在正确的位置,但导致了调整大小/拖动代码的问题。

最小示例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Main2 extends Application {

    private AnchorPane component;

    @Override
    public void start(Stage primaryStage) {
        component = new AnchorPane();
        Scene scene = new Scene(component, 1024, 768);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();

        //This works, but is hard to maintain
        Cell c1 = new Cell();
        Cell c2 = new Cell();
        Port p1 = new Port(c1);
        Port p2 = new Port(c2);
        component.getChildren().addAll(c1, c2, p1, p2);
        c1.relocate(150, 150);
        c2.relocate(550, 550);
        //This does not work, even if unbinding circles, but is simpler
        HBox pc1 = new HBox();
        HBox pc2 = new HBox();
        pc1.layoutXProperty().bind( c1.layoutXProperty() );
        pc1.layoutYProperty().bind( c1.layoutYProperty() );
        pc2.layoutXProperty().bind( c2.layoutXProperty() );
        pc2.layoutYProperty().bind( c2.layoutYProperty() );
        Port p3 = new Port(c1);
        Port p4 = new Port(c2);
        pc1.getChildren().add(p3);
        pc2.getChildren().add(p4);
        component.getChildren().addAll(pc1, pc2);
    }

    class Cell extends Pane {
        public Cell() {
            Rectangle view = new Rectangle(50,50);
            view.setStroke(Color.DODGERBLUE);
            view.setFill(Color.DODGERBLUE);
            getChildren().add(view);
        }
    }

    class Port extends Pane {
        public Port(Cell owner) {
            Circle view = new Circle(10);
            view.setStroke(Color.GREEN);
            view.setFill(Color.GREEN);
            view.centerXProperty().bind( owner.layoutXProperty() );
            view.centerYProperty().bind( owner.layoutYProperty() );
            getChildren().add(view);
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

共有1个答案

包和泰
2023-03-14

在绑定layoutXProperty两次而不是layoutYProperty facepalm的代码中出现了一个错误

 类似资料:
  • 问题内容: 我想将我的线性布局制作成环形。 我遵循了此链接,但没有环形布局,而是环形布局。 https://developer.android.com/guide/topics/resources/drawable- resource.html#Shape 我的xml 和ring.xml在drawable中 我只是在布局中出现一个圆圈而不是ring。抱歉,由于声誉欠佳,我无法上传输出图片。 问题答

  • 我如何做一个圆角布局?我想对我的应用圆角。

  • 我试图在另一个活动的顶部显示一个半透明背景的活动,并在屏幕中央显示一个drawable。drawable有圆角,我设置了一个圆角矩形作为布局的背景。这个形状的背景是可绘制的。问题是我仍然在圆角的drawable后面得到一个黑色的方形边框。有没有办法去掉那个黑边? 我想我不能发布图片,因为我没有声誉? 这是布局的xml: 以下是形状的xml:

  • 我想包括一个布局与数据绑定。 我想使用将id从java传递到布局,但我似乎找不到正确的语法。 这是我的片段类,带有和: 我想充气。分割项目,并使其包含

  • 我正试图通过数据绑定来设置android中最小值为0、最大值为10的整数的限制。为此,我有一个可绑定的适配器,它通过两个侦听器设置一个整数的值,一个增加值,另一个减少值。最后,我想设置这个整数的极限,最小值为0,最大值为10。

  • 我有一个线性布局,有2个不同背景颜色的文本视图。我想使整个视图(线性布局)圆角。我试图将它封闭在MaterialCardview中(因为当我在里面设置整个片段布局时,我能够达到这种效果),但由于某种原因,它不起作用。我需要做什么来实现视图的圆角? 注意:我知道有些人可能建议使用背景为圆形的xml drawable。这将不起作用,因为儿童背景色将接管透明度,并将保持锐利的边缘