¿Cómo puedo centro de una Imagen vista en un ancla panel?
-
21-12-2019 - |
Pregunta
Estoy usando escena builder para crear mi GUI y estoy mostrando Image
s como a los usuarios seleccionar elementos en una lista.El Image
s son de diferentes tamaños, y cuando un Image
que es menor que el panel está en la imagen se muestra en la parte superior izquierda del panel.¿Cómo puedo obtener el ImageView
y/o Image
para que se muestre en el centro de la Pane
?
He mirado en todo el javafx imageview y la imagen de la Api, pero no he encontrado mucho sobre el centrado de la ImageView
en un Pane
.No he visto nada en la escena del generador, ya sea.Por lo general en la escena del generador, si hay una manera de centro de un nodo, habrá una opción para el centrado.
Solución
En cualquier tipo de panel que ahora es posible establecer la alineación de la imagen en específico posición..para ello se puede utilizar try HBox
cuando se inserta un Image
en el HBox
, inicialmente aparecen como el de abajo.
ahora establece la propiedad de alineación de la HBox
ahora cambie la alineación al centro y ver el resultado
Espero su labor por usted
También es posible hacerlo mediante programación en un Pane
a través de obtener la imagen
intente esto
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);
Otros consejos
Crear un Group
y la escena en su método de inicio:
Group root = new Group();
Scene scene = new Scene(root, 551, 400, Color.BLACK);
primaryStage.setScene(scene);
Crear un ImageView
y establezca las siguientes propiedades:
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());
Crear un StackPane
(al menos eso es lo que he usado) y se unen a sus propiedades:
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));
Agregar esta pila a raíz del elemento:
root.getChildren().add(stack);
Mostrar primaryStage
y ejecutar otro código en el método de inicio:
primaryStage.show();
Una forma sencilla de hacer pequeñas imágenes de forma dinámica centrada en :
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);
}
}