2015-05-06 2 views
4

Я новичок в javafx. Я разрабатываю приложение, в котором у меня есть холст, и я нарисовал в нем несколько изображений. Я хочу добавить ImageView на мой холст и реализовать всплывающее окно, щелкая по ImageView?Можно ли разместить ImageView на холсте в JavaFX?

Есть ли какие-либо возможности с ImageView (кнопки или любые элементы управления?) Или ограничено использование элементов управления над холстом?

Мне нужны некоторые предложения, пожалуйста.

+0

Вы хотите разместить 'ImageView' поверх' Canvas'? – ItachiUchiha

+0

@ItachiUchiha: Да! –

ответ

4

Вы можете складывать ImageView поверх Canvas. Используйте StackPane. Затем вы можете добавить слушателей мыши к ImageView.

Есть ли какие-либо возможности с ImageView (кнопки или любые элементы управления?) Или ограничено использование элементов управления над холстом?

Все органы управления, включая Button, ImageView и Canvas сам простираться от Node и может быть использован для добавления в StackPane.

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.StackPane; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class Main extends Application { 

    int count = 1; 

    @Override 
    public void start(Stage stage) { 

     StackPane root = new StackPane(); 
     Scene s = new Scene(root, 400, 400, Color.BLACK); 

     final Canvas canvas = new Canvas(300, 300); 
     GraphicsContext gc = canvas.getGraphicsContext2D(); 

     gc.setFill(Color.BLUE); 
     gc.fillRect(10, 10, 300, 300); 

     ImageView image = new ImageView("https://cdn0.iconfinder.com/data/icons/toys/256/teddy_bear_toy_6.png"); 

     // Listener for MouseClick 
     image.setOnMouseClicked(e -> { 
      Stage popup = new Stage(); 
      popup.initOwner(stage); 
      popup.show(); 
     }); 

     root.getChildren().addAll(canvas, image); 

     stage.setScene(s); 
     stage.show(); 
    } 

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

Выход:

  • Сцена имеет черный фон
  • Холст имеет голубой фон
  • ImageView является медведь.

enter image description here

+0

Привет, большое спасибо за решение. У меня есть сомнения, считаю, что я использую anchorpane как родительский, внутри которого я могу использовать эту стек стек и остальные операции? –

+0

Да, вы можете. Просто добавьте StackPane в качестве дочернего элемента AnchorPane. – ItachiUchiha

+0

Привет, я добавил изображение, но я не могу позиционировать его с координатами x и y, он всегда появляется в центре. Я использовал свойства setLayoutX и setLayoutY. Как разместить его? –

1

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

StackPane stack = new StackPane(); 
stack.getChildren().addAll(yourCanvas, yourButton); 

Вы должны прочитать this для лучшего понимания с помощью JavaFX Оформление печатных изданий.

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