私はボリュームノブをしようとしています、私はノブを持っています、しかし私は啓発された大きなスポットによって表されるノブの周りにボリュームインジケーターを配置したいと思います。Circle
ノードで試してみました。フレーム内の必要な場所にグループを配置できるようCircle
に、それらすべてをに追加する配列を宣言しました。setTranslateXメソッドとsetTranslateYメソッドGroup
を使用して各円を配置します。Circle
それぞれ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);
}
}
}
});
たぶん1つ、ノブの上にグループを追加すると、問題が発生しますか?ノブをルートグループに追加し、サークルグループをノブの上のルートグループに追加します。
サンプル時計の回転方法をサークルに適用する際の問題を部分的に修正しました。しかし、を使用して円のグループを回転させると、まだ問題がありgroup.setRotate(rotation);
ます。すべての円が表示されている場合、円の位置は適切ですが、表示プロパティの変更を開始すると、ノブをスライドさせることで、グループは私が行った場合と同じように動作しgroup.setRotation(0);
ます。最初に設定した回転値が保持されていないようです。