我试图做一个音量旋钮,我已经得到了旋钮,但是我想将音量指示器放在由开光大点代表的旋钮周围。我试了一下Circle
节点。我宣布了一组Circle
将它们全部添加到一个Group
,以便我可以将该组放在我想要的框架中。我使用Circle
方法setTranslateX和setTranslateY来放置每个圆。每个Circle
都有一个用于填充的径向梯度,并且不可见。 我将滑块(音量旋钮)的值映射到我的数组中的每个Circle
,并调用valueChanged方法以获取所有Circle
以下或等于该值并将其设置为可见。我在Group
内的Circle
的位置有问题。当它们全都可见时,它们被完全放置,但是当一些可见的虚假物品可见时,其余的可见物品不会停留在它们的位置。所以我正在寻找一个更好的设计方法来做到这一点。谢谢。javafx布局中的节点
代码示例: 圈创造
audioSelectionValueToCircle = new HashMap<Double, Circle>(audioSelectionCircle.length);
for (int i = 0; i < 6; i++) {
final int count = i;
audioSelectionCircle[count] = new Circle(15.0);
RadialGradient rgrad = RadialGradientBuilder.create().centerX(audioSelectionCircle[count].getCenterX() - audioSelectionCircle[count].getRadius()/5).centerY(audioSelectionCircle[count].getCenterY() - audioSelectionCircle[count].getRadius()/5).radius(audioSelectionCircle[count].getRadius()).proportional(false).stops(new Stop(0.0, Color.WHITE), new Stop(0.3, Color.ORANGE), new Stop(1.0, Color.TRANSPARENT)).build();
audioSelectionCircle[count].setFill(rgrad);
audioSelectionValueToCircle.put(audioSelectionValue[count], audioSelectionCircle[count]);
audioSelectionCircle[count].setVisible(false);
}
集团创建
gAudioSelectionCircle = new Group();
gAudioSelectionCircle.resizeRelocate(1225, 520, 280, 280);
gAudioSelectionCircle.setRotate(90);
圈放置
int n = 6;
for (int i = 0; i < n; i++) {
final int count = i;
double t = 2 * Math.PI * i/n;
double x = 60 * Math.cos(t);
double y = 60 * Math.sin(t);
audioSelectionCircle[count].setTranslateX(x);
audioSelectionCircle[count].setTranslateY(y);
gAudioSelectionCircle.getChildren().add(audioSelectionCircle[count]);
// audioSelectionCircle[count].resizeRelocate(x, y, 41, 41);
}
旋钮行为
audioSelectionKnob.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> ov, Number oldVal, Number newVal) {
// if (!audioSelectionKnob.isValueChanging()) {
// }
Iterator<Map.Entry<Double, Circle>> it = audioSelectionValueToCircle.entrySet().iterator();
while(it.hasNext()) {
Map.Entry<Double, Circle> pairs = it.next();
Circle c = pairs.getValue();
if(pairs.getKey() >= newVal.doubleValue()) {
c.setVisible(true);
} else {
c.setVisible(false);
}
}
}
});
也许有一件事,如果我添加我的旋钮上方的组是一个问题?我将旋钮添加到根组,并将圆组添加到旋钮上方的根组。
我部分解决了将示例时钟的旋转方法应用于我的圆圈的问题。但是,当我使用group.setRotate(rotation);
旋转圈组时,仍然存在问题。当我所有的圆都可见时,圆的位置是好的,但是当我开始更改可见属性时,通过滑动旋钮,该组的行为就好像我做了group.setRotation(0);
。它看起来不会保留我首先设置的旋转值。
请发布一些代码(最好是[自包含的可编译的](http://sscce.org/)),它会显示问题 – Attila
在搜索引擎中寻找这些条款_radial layout algorithm_ – Enrique