2015-09-25 11 views
1

В настоящее время я пытаюсь центрировать изображение в ImageView с помощью JavaFX.Центрирование изображения в ImageView

Так что я загрузить изображение в окне:

Image img = new Image("..."); 
imageView.setImage(img); 

и давайте предположим, что изображение является огромным (2000x3000), а не в ImageView (400x100)

Визуализированное изображение будет выравниваться по левой , и я хотел бы поставить в центре ImageView:

enter image description here

есть в любом случае, чтобы выполнить это?

+1

Вы можете разместить код, как вы устанавливаете размер ImageView? Если возможно, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve). – ItachiUchiha

+0

Я подхожу к размеру родителя: 'imageView.fitWidthProperty(). Bind (((AnchorPane) imageView.getParent()). WidthProperty());' (то же самое относится и к высоте). Я не могу опубликовать MCVE на данный момент, я в спешке, извините ... – trichetriche

+0

Проблема, скорее всего, вызвана вашей компоновкой, а не самим изображением, но невозможно сказать без [MCVE]. –

ответ

6

Таким образом, после нескольких дней расчета, мне удалось найти хороший способ сделать это.

Я размещаю его здесь, если кто-то хотел бы его достичь.

Я создал метод, который должен доступ только к ImageView:

public void centerImage() { 
     Image img = imageView.getImage(); 
     if (img != null) { 
      double w = 0; 
      double h = 0; 

      double ratioX = imageView.getFitWidth()/img.getWidth(); 
      double ratioY = imageView.getFitHeight()/img.getHeight(); 

      double reducCoeff = 0; 
      if(ratioX >= ratioY) { 
       reducCoeff = ratioY; 
      } else { 
       reducCoeff = ratioX; 
      } 

      w = img.getWidth() * reducCoeff; 
      h = img.getHeight() * reducCoeff; 

      imageView.setX((imageView.getFitWidth() - w)/2); 
      imageView.setY((imageView.getFitHeight() - h)/2); 

     } 
    } 
2

Ниже приведен пример кода, который может быть решением для вашего случая:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class Test extends Application { 

    @Override 
    public void start(Stage primaryStage) { 

     Image image = new Image("https://upload.wikimedia.org/wikipedia/commons/a/a7/Frankenstein's_monster_(Boris_Karloff).jpg"); 
     ImageView imageView = new ImageView(); 
     imageView.setImage(image); 
     imageView.setPreserveRatio(true); 
     imageView.setFitWidth(400); 
     imageView.setFitHeight(300); 

     BorderPane pane = new BorderPane(); 
     pane.setPrefSize(400, 300); 
     pane.setCenter(imageView); 

     primaryStage.setScene(new Scene(pane)); 
     primaryStage.show(); 

    } 

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

} 

И результат:

enter image description here

Смежные вопросы