我試圖做一個音量旋鈕,我已經得到了旋鈕,但是我想將音量指示器放在由開光大點代表的旋鈕周圍。我試了一下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