【发布时间】:2019-04-18 06:55:57
【问题描述】:
我正在尝试在 JavaFX 程序中排列 n 个矩形。我的总体目标是制作某种附加的“音频均衡器”。如何使用 JavaFx 中的 Rectangle 方法实现这一点?
我知道,如果说我在窗格中的宽度为 740,并且我想要 10 个相等的矩形,则每个矩形的宽度为 74。所以 Rect 1 的宽度需要定位在:0-74,Rect 2 是 75-149 等等。
我尝试使用 Rectangle.setX 并使用范围,但这会留下一个矩形的大小与整个窗格一样大。或者一个矩形将是完美的宽度,但只会显示 1 个矩形。
下面是我尝试覆盖 start 方法以显示我的可视化工具。
Start 方法是问题的根源。
public class AudioEqualizer implements Visualizer {
private String name = "AudioEqualizer";
private Integer numOfBands;
private AnchorPane vizPane;
private Double height = 0.0;
private Double width = 0.0;
private Double rectHeight = 0.0;
private Double rectWidth = 0.0;
private Double rectHeightPercentage = 1.3;
private final Double startHue = 260.0;
private Double halfRectHeight = 0.0;
private Rectangle[] rectangles;
@Override
public String getName() {
return name;
}
@Override
public void start(Integer numBands, AnchorPane vizPane) {
end();
this.numOfBands = numBands;
this.vizPane = vizPane;
height = vizPane.getHeight();
width = vizPane.getWidth();
Rectangle clip = new Rectangle(width, height);
clip.setLayoutX(0);
clip.setLayoutY(0);
vizPane.setClip(clip);
clip.setFill(Paint.valueOf("BLACK"));
rectWidth = width / numBands;
rectHeight = height / 2 ;
rectangles = new Rectangle[numBands];
for (int i = 0; i < numBands; i++) {
Rectangle rectangle = new Rectangle((rectWidth * (i-1)), 0,
rectWidth, rectHeight);
//rectangle.setX(rectWidth);
rectangle.setFill(Color.hsb(startHue, 1.0, 1.0, 1.0));
rectangles[i] = rectangle;
vizPane.getChildren().add(rectangle);
}
}
我希望它看起来会像这张图片一样让矩形彼此相邻排列。
但实际发生的是两件事之一,这取决于在 for 循环中注释或取消注释的代码。
结果:
或
感谢您的宝贵时间。
【问题讨论】:
-
如果将多个具有相同尺寸和颜色的
Rectangles 并排放置,结果看起来就像是一个矩形。请注意,您的代码不会产生响应式布局。调整父级的大小不会改变条的大小,并且根据执行代码的时间,父级的尺寸可能仍然是0 x 0... -
另见
AudioBarChartApp,在here的答案中被引用。 -
@fabian 所以你说有一些偏移量,也许我的回答是对的?