3ポジションのスイッチのような部品を設計したいと思います。1つのニュートラル位置、およびユーザーがコンポーネントの上半分をクリックしたときの上部スイッチ位置と、ユーザーがコンポーネントの下半分をクリックしたときの下部スイッチ位置。マウスを離すと、スイッチはニュートラル位置に戻ります。これらの位置のスイッチ画像が3つあります。Button
次に、マウスのクリック座標が上半分か下半分かを確認し、それに応じて画像を設定することを考えていました。可能であれば、画像にcssを使用して(可能かどうかはわかりませんが)、より良い提案を探しています。または、より適切な場合は、別のコンポーネントを使用して他の提案を探しています。ありがとうございました。
2 に答える
これが私がやったことです、それは動作します...
final Button rstButton = new Button();
final Image rstNeutral = new Image(MyClass.class.getResourceAsStream("images/switch_neutral.png"));
final Image rstUp = new Image(MyClass.class.getResourceAsStream("images/switch_on.png"));
final Image rstDown = new Image(MyClass.class.getResourceAsStream("images/switch_off.png"));
final ImageView rstImage = new ImageView();
rstImage.setImage(rstNeutral);
rstButton.setGraphic(rstImage);
rstButton.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
double mouseY = me.getY();
double buttonY = rstButton.getLayoutY();
double buttonHeight = rstButton.getHeight();
if(buttonY + mouseY > buttonY + (buttonHeight / 2)) {
rstImage.setImage(rstDown);
} else {
rstImage.setImage(rstUp);
}
}
});
rstButton.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent arg0) {
rstImage.setImage(rstNeutral);
}
});
1 つではなく 3 つのコンポーネントを使用する必要があると思います。
たとえば、ToogleButton の 3 つのインスタンスを使用できます。このコンポーネントは、見た目はボタンに似ていますが、トゥーグル状態 (クリック/非クリック) があります。私は javaFX で使用したことはありませんが、Oracle サイトで十分なヘルプが見つかると思います (例: http://docs.oracle.com/javafx/2/ui_controls/toggle-button.htm )
編集 :
コメントの後、メカニカル スイッチの画像 (http://docs.oracle.com/javafx/2/api/javafx/scene/image/Image.html) が解決策になると思います。スイッチを横から表示している場合は、スイッチの状態に応じて画像の回転を変更できます。
ユーザーがクリックした場所を知るには、ボタンの位置を特定することが有効です。
別の解決策として、画像の上に 3 つの透明な領域を配置し、画像の代わりにこれらの領域でクリック イベントをインターセプトすることもできます。そのようなソリューションを使用したことがないので、もっとお手伝いできます。
私が見る最後の解決策は、スイッチ画像の横にある 2 つの別の画像コンポーネントを使用して、スイッチを上下に引っ張るために 2 つの矢印を表示することです。