我正在尝试使用键盘使图像“移动”。在场景本身中重新定位图像。我确实设法在图像上添加 setOnMouseClicked() 并更改位置,但它似乎不适用于箭头键。假设我做错了什么。
代码如下:
public class DEPImageMovement extends Application {
@Override
public void start(Stage primaryStage) {
Pane pane = new Pane();
pane.setStyle("-fx-background-color: RED");
Image img = new Image("Images/mappy.jpg");
final double centerX = img.getWidth()/2, centerY = img.getHeight()/2;
ImageView imgw = new ImageView(img);
imgw.setX(-centerX);
imgw.setY(-centerY);
imgw.setOnKeyPressed(a ->
{
switch (a.getCode())
{
case UP: {
imgw.setY(imgw.getY()-50); System.out.println("Up"); break;}
case DOWN: {
imgw.setY(imgw.getY()+50); System.out.println("Down"); break;}
case LEFT:{
imgw.setX(imgw.getX()-50); System.out.println("Left"); break;}
case RIGHT:{
imgw.setX(imgw.getX()+50); System.out.println("Right"); break;}
default:{
System.out.println("Default"); break;}
}
});
pane.getChildren().add(imgw);
Scene scene = new Scene(pane, 250 ,250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我想使用箭头键移动图像。如果有任何更简单的解决方案可用,只要它们使用更少或更简单的代码/正确的语法解决相同的问题,这些解决方案也非常受欢迎。我只是在玩弄它,试图通过多种方式学习如何做到这一点。
最佳答案
已经有一个控件似乎可以提供您所追求的行为:ScrollPane
。如果你不想要任何滚动条那么你可以设置hbarPolicy
和 vbarPolicy
属性为ScrollBarPolicy.NEVER
。您可能还需要考虑设置 pannable
属性设置为true
。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.image.ImageView;
import javafx.stage.Stage;
public class App extends Application {
@Override
public void start(Stage primaryStage) {
ScrollPane root = new ScrollPane(new ImageView(/* your image */));
root.setHbarPolicy(ScrollBarPolicy.NEVER);
root.setVbarPolicy(ScrollBarPolicy.NEVER);
root.setPannable(true);
primaryStage.setScene(new Scene(root, 1000, 650));
primaryStage.show();
}
}
如果您将 ScrollPane
聚焦(例如通过单击它),则箭头键将水平/垂直滚动 ImageView
。但请注意,您将无法按照当前代码允许的方式“过度滚动”。
关于java - 尝试使巨大的图像(与场景 View 相比)移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59805797/