1

この例のボリュームノブに基づいて、http://fxexperience.com/2012/01/fun-javafx-2-0-audio-player/

たとえば、15度または30度ごとに、特定の角度値にスナップするボリュームノブをどのように作成しますか?ヒントをありがとう。私がしたことは、サブクラスでrotateKnobを再定義し、スライダーが値180、120、60、0、-180、-160、-120、-60でスナップするようにこの方法で角度を設定することです。

Slider s = getSkinnable();
    double zeroOneValue = (s.getValue() - s.getMin()) / (s.getMax() - s.getMin());
    double angle = minAngle + ((maxAngle - minAngle) * zeroOneValue);

    int angleMod = (int) (angle % 60);
    double val;
    if (angleMod == 0) {
        val = (int) angle;
    } else if (angleMod > (60 / 2)) {
        val = (int) angle - angleMod;
    } else {
        val = (int) angle - angleMod + 60;
    }
4

2 に答える 2

1

特別なことをする必要はありません。「snapToTicks」プロパティを利用するだけです。メインクラスで、ボリュームノブを定義した後、次のコードを入力します。

    volumeKnob.setMinorTickCount(0);
    volumeKnob.setMajorTickUnit(1.0/14.0);
    volumeKnob.snapToTicksProperty().set(true);

ここでの数字は、ボリュームノブの周りに14個の「ドット」があるという事実に基づいています。このコードは、音量をこれらのドットの1つにのみ設定できることを確認します。

于 2012-07-02T17:33:13.447 に答える
0

@Enwiredには良い答えがあります。ドットの数を変更するには、別のグラフィックリソースが必要です。しかし、それはロータリーコントロールの周りの各ティック間の角度を作るものの一部ではありません。

彼が円を1/14に分割したのと同じように、60.0/360.0または1.0/6.0で60度のスライスに分割することを選択できます。

于 2020-05-25T20:03:22.287 に答える