У меня есть круг и четыре кнопки для его перемещения; вверх (ylos), вниз (увы), влево (vasemmalle) и вправо (oikealle). Естественно, я хотел бы сохранить свой круг внутри окна, но как только я добавляю к событию кнопки условие, которое препятствует движению круга за пределы окна, оно перестает полностью двигаться в этом направлении.
Радиус круга равен 100, он начинается с середины (?), Что означает координаты (200,200).
Ниже приведен мой код, я уверен, что некоторые из вас легко заметят мой ошибка из такой простой программы. Я поставил предполагаемое профилактическое условие только на одну кнопку, чтобы вы могли видеть, что другие работают так, как должны. Строка прокомментирована.
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.control.Button;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.collections.ObservableList;
public class Ympyra extends Application {
private double uusiY, uusiX, raja = 0;
@Override
public void start(Stage aloitus) throws Exception {
Circle ympyra = new Circle(100);
ympyra.setStroke(Color.BLACK);
ympyra.setFill(Color.WHITE);
Button btnYlos = new Button("Ylos");
Button btnAlas = new Button("Alas");
Button btnOikea = new Button("Oikealle");
Button btnVasen = new Button("Vasemmalle");
btnYlos.setOnMouseClicked(e -> {
uusiY = ympyra.getCenterY() + uusiY - 10;
if (uusiY < 100) { uusiY += 10; } // for example this kind of condition stops upward movement completely
ympyra.setTranslateX(uusiX);
ympyra.setTranslateY(uusiY);
});
btnAlas.setOnMouseClicked(e -> {
uusiY = ympyra.getCenterY() + uusiY + 10;
ympyra.setTranslateX(uusiX);
ympyra.setTranslateY(uusiY);
});
btnOikea.setOnMouseClicked(e -> {
uusiX = ympyra.getCenterX() + uusiX + 10;
ympyra.setTranslateX(uusiX);
ympyra.setTranslateY(uusiY);
});
btnVasen.setOnMouseClicked(e -> {
uusiX = ympyra.getCenterX() + uusiX - 10;
ympyra.setTranslateX(uusiX);
ympyra.setTranslateY(uusiY);
});
HBox napit = new HBox();
napit.setAlignment(Pos.CENTER);
napit.setSpacing(20);
napit.setMargin(btnYlos, new Insets(5, 5, 5, 5));
napit.setMargin(btnAlas, new Insets(5, 5, 5, 5));
napit.setMargin(btnOikea, new Insets(5, 5, 5, 5));
napit.setMargin(btnVasen, new Insets(5, 5, 5, 5));
ObservableList lista = napit.getChildren();
lista.addAll(btnYlos, btnAlas, btnOikea, btnVasen);
BorderPane paneeli = new BorderPane();
paneeli.setCenter(ympyra);
paneeli.setBottom(napit);
Scene kehys = new Scene(paneeli, 400, 400);
aloitus.setTitle("Ympyra");
aloitus.setScene(kehys);
aloitus.show();
}
public static void main(String[] args) {
launch(args);
}
}