JavaFX - позиционирование изображения с вводом символов - PullRequest
0 голосов
/ 08 мая 2019

У меня есть графический интерфейс, который принимает ввод имени изображения, и после нажатия кнопки обновления оно отображается в фиксированном положении. Я хочу иметь возможность вводить символ «A-G», который изменит позицию X изображения, и символ «0-6», который изменит позицию Y изображения. Названия изображений просто "А1", "А2" ... "А5". Таким образом, если пользователь вводит «A1B3», он будет отображать изображение A1 в X-позиции «B» и Y-позиции «3». Таким образом, B может быть 200, а 3 может быть 300, что составляет (X, Y) координаты (200 300).

Это мой код, который получает пользовательский ввод для изображения.

private void getImage(){
    Image img = new Image("comp1110/ass2/gui/assets/" + textField.getText() + ".png", 100, 100, false, false);

    ImageView image = new ImageView();
    image.setImage(img);
    image.setX(100);
    image.setY(100);
    pane.getChildren().add(image);
}

1 Ответ

1 голос
/ 08 мая 2019

Я думаю, вы должны сделать что-то вроде этого, да, есть некоторые косметические проблемы, которые вам нужно будет исправить. Но это только для того, чтобы дать вам представление о том, что делать. Он использует сетку, так что вам не нужно беспокоиться о получении точных координат. Я выбираю vbox, чтобы мне не пришлось беспокоиться о макете, вы можете сохранить панель, которая у вас есть, не должна иметь значения.

public class Main extends Application {

    private GridPane gridPane;
    private TextField imageTextField = new TextField();
    private HashMap<String,String> hashMap = new HashMap<>();

    @Override
    public void start(Stage primaryStage) {
        fillHashMapValues();

        gridPane = new GridPane();
        gridPane.setGridLinesVisible(true);
        for (int i = 0; i < 7; i++) {
            RowConstraints rowConstraints = new RowConstraints();
            rowConstraints.setPercentHeight(14);
            gridPane.getRowConstraints().add(rowConstraints);

            ColumnConstraints columnConstraints = new ColumnConstraints();
            columnConstraints.setPercentWidth(14);
            gridPane.getColumnConstraints().add(columnConstraints);

            gridPane.addColumn(i);
            gridPane.addRow(i);
        }

        imageTextField.setPromptText("Enter Image Letters?");

        TextField textField = new TextField();
        textField.setPromptText("Enter Coordinates");

        Button button = new Button("Go!");
        button.setOnAction(event -> {
            addToGridPane(textField.getText());
        });

        VBox vBox = new VBox();
        vBox.setPrefSize(300, 300);
        vBox.setAlignment(Pos.TOP_CENTER);
        vBox.getChildren().addAll(imageTextField, textField, button, gridPane);

        primaryStage.setScene(new Scene(vBox));
        primaryStage.show();
        button.requestFocus();//This is only so you can see the prompt text its irrelevant
    }

    private void fillHashMapValues(){
        hashMap.put("A", "1");
        hashMap.put("B", "2");
        hashMap.put("C", "3");
        hashMap.put("D", "4");
        hashMap.put("E", "5");
        hashMap.put("F", "6");
        hashMap.put("G", "7");
    }

    private void addToGridPane(String string){
        char[] chars = string.toCharArray();
        if(chars.length==2){//Do more data validation here
            if(hashMap.containsKey(String.valueOf(chars[0]))) {
                int xValue = Integer.parseInt(hashMap.get(String.valueOf(chars[0])));
                int yValue = Integer.parseInt(String.valueOf(chars[1]));

                ImageView image = getImage();

                gridPane.add(image, xValue, yValue);
            }
        }
    }

    private ImageView getImage(){
        Image image = new Image("comp1110/ass2/gui/assets/" + imageTextField.getText() + ".png", 100, 100, false, false);

        ImageView imageView = new ImageView();
        imageView.setImage(image);
        //imageView.setX(100);
        //imageView.setY(100);
        //pane.getChildren().add(image);
        return imageView;
    }

    public static void main(String[] args) { launch(args); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...