我正在尝试做一个音量旋钮,我有旋钮,但我想在旋钮周围放置音量指示器,由启迪大点表示。Circle
我用节点试了一下。我声明了一个Circle
将它们全部添加到 a的数组,Group
以便我可以将组放置在框架中我想要的位置。Circle
我使用setTranslateX 和 setTranslateY 方法放置每个圆圈。每个Circle
都有用于填充的径向渐变,并且不可见。我将滑块(音量旋钮)的值映射到Circle
数组中的每个值,并调用 valueChanged 方法以获取所有Circle
低于或等于该值的值并将它们中的每一个设置为可见。Circle
我的内部位置有问题Group
. 当它们都可见时,它们就被完美地放置了,但是当它们的属性变为 false 时,剩下的可见的就不会停留在它们的位置上。所以我正在寻找一种更好的设计方法来做到这一点。谢谢你。
代码示例: 圆创建
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);
。看起来它没有保留我首先设置的旋转值。