Javafx 2 圆形中的javafx布局节点
我试着做一个音量旋钮,我有这个旋钮,但我想把音量指示器放在旋钮周围,用“照亮大斑点”表示。我用Javafx 2 圆形中的javafx布局节点,javafx-2,radial,Javafx 2,Radial,我试着做一个音量旋钮,我有这个旋钮,但我想把音量指示器放在旋钮周围,用“照亮大斑点”表示。我用Circle节点进行了尝试。我声明了一个Circle数组,将它们全部添加到组中,这样我就可以将组放置在框架中我想要的位置。我使用circle方法setTranslateX和setTranslateY放置每个圆。每个圆都有一个用于填充的径向梯度,并且不可见。 我将滑块(音量旋钮)的值映射到数组中的每个圆圈,并调用valueChanged方法以使所有圆圈低于或等于该值,并将每个圆圈设置为可见。我的组中圆圈的
Circle
节点进行了尝试。我声明了一个Circle
数组,将它们全部添加到组中
,这样我就可以将组放置在框架中我想要的位置。我使用circle
方法setTranslateX和setTranslateY放置每个圆。每个圆
都有一个用于填充的径向梯度,并且不可见。
我将滑块(音量旋钮)的值映射到数组中的每个圆圈
,并调用valueChanged方法以使所有圆圈
低于或等于该值,并将每个圆圈设置为可见。我的组中圆圈的位置有问题。当它们都可见时,它们被完美地放置,但是当一些属性对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);
}
圆布局
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);
}
int n=6;
对于(int i=0;i
旋钮行为
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);
}
}
}
});
AudioSelectionKnobl.valueProperty().addListener(新的ChangeListener()){
@凌驾
公共无效已更改(可观察值)
其余可见的一个没有停留在他们的位置
这可能是放置算法中的一个错误导致的。要进行诊断,您需要提供一个简短、简化、可编译的示例应用程序
仅修改节点的可见性属性不应以任何方式影响应用程序的布局
对于围绕一个圆布置节点,您可以看一看。时钟示例所做的是将12个节点放置在12点钟的位置,然后对节点应用旋转以将其放置到适当的位置。布局似乎与您描述的有点类似,但如果没有参考图片,则很难确定
一旦节点被正确放置,并且在中间有一个音量旋钮“滑块”,那么就可以根据滑块值调整节点的CSS样式表(类似于当前正在进行可见性调整的方式)。打开或关闭它们的样式。您不需要从组中添加或删除更多节点,布局不应仅更改应用于不同样式节点的可见性或效果
您可能想看看这个功能,它基于替换滑块行为和皮肤的旋钮滑块(尽管您需要稍微调整实现以获得所描述的效果)。请发布一些代码(最好是a)这显示了问题在搜索引擎径向布局算法中查找这些术语
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);
}
}
}
});