Pergunta

Eu estou usando cena builder para criar o meu GUI e eu estou exibindo Images como usuários selecionar itens em uma lista.O Images são de tamanhos diferentes, e quando um Image que é menor do que o painel é, a imagem é exibida na parte superior esquerda do painel.Como faço para ir sobre a obtenção de ImageView e/ou Image para ser exibido no centro da Pane?

Eu já procurei em todo o javafx imagemver de imagem e APIs, mas eu não encontrei muito sobre a centralização da ImageViewem um Pane.Eu não vi nada na cena do construtor, seja.Geralmente em cena o construtor, se há uma forma de o centro de um nó, haverá uma opção para a centralização.

Foi útil?

Solução

Em qualquer tipo de painel de agora é possível definir o alinhamento da imagem em específico posição..para isso, você pode tentar usar HBox

quando você inserir um Image no HBox, inicialmente , sua mostrada como abaixo.

screenshot

agora, defina a propriedade de alinhamento do HBox

screenshot

agora altere o alinhamento ao centro e ver o resultado

screenshot

Eu espero que seja o trabalho para você

Também é possível fazer isso programaticamente em um Pane via get imagem

tente isso

AnchorPane anchorPane = new AnchorPane();
Image img = new Image(getClass().getResourceAsStream("Edit-Male-User-icon.png"));
ImageView imageView = new ImageView(img);
anch.getChildren().add(imageView );
ImageView app = (ImageView) (Node) anchorPane.getChildren().get(0);
app.setX(100);
app.setY(100);

Outras dicas

Criar um Group e a cena no seu método start:

Group root = new Group();
Scene scene = new Scene(root, 551, 400, Color.BLACK);
primaryStage.setScene(scene);

Criar um ImageView e defina as seguintes propriedades:

ImageView imageView = new ImageView();
// set aspect ratio
imageView.setPreserveRatio(true);
// resize based on the scene
imageView.fitWidthProperty().bind(scene.widthProperty());
imageView.fitHeightProperty().bind(scene.heightProperty());

Criar um StackPane (pelo menos é o que eu usei) e vincular suas propriedades:

StackPane stack = new StackPane();
stack.getChildren().add(imageView);

    stack.translateXProperty()
            .bind(scene.widthProperty().subtract(stack.widthProperty())
                    .divide(2));

    stack.translateYProperty()
            .bind(scene.heightProperty().subtract(stack.heightProperty())
                    .divide(2));

Adicionar esta pilha para o elemento raiz:

root.getChildren().add(stack);

Mostrar primaryStage e executar outro código no seu método start:

primaryStage.show();

Uma forma simples de fazer pequenas imagens dinamicamente centrado :

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class CenterInStage extends Application {

    private final String TITLE = "Center in Stage";
    private final double WIDTH = 350;
    private final double HEIGHT = 250;
    private final String IMAGE_PATH =
            "http://icons.iconarchive.com/icons/iconka/meow-2/64/cat-rascal-icon.png";

    @Override
    public void start(Stage primaryStage) {

        primaryStage.setTitle(TITLE);

        Image image = new Image(IMAGE_PATH);
        ImageView imageView = new ImageView(image);
        imageView.setPreserveRatio(true);

        StackPane pane = new StackPane();
        pane.getChildren().add(imageView);
        StackPane.setAlignment(imageView, Pos.CENTER);

        Scene scene = new Scene(pane, WIDTH, HEIGHT);

        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top