Разрешить пользователю изменять размер недекорированной сценыJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Разрешить пользователю изменять размер недекорированной сцены

Сообщение Гость »


Я работаю над созданием устройства записи экрана в JavaFX, и одна из утилит, которая является обязательной для устройства записи экрана, позволяет пользователю определять, какую область для записи.

Мне удалось создать недекорированную полупрозрачную Сцену, которую можно перетаскивать, чтобы определить область, и добавить кнопку закрыть, позволяющую пользователю подтвердить область, которая подлежит записи.

Как теперь разрешить пользователю изменять размер сцены, перетаскивая ее за края?

SSCCE:

перетаскивание пакета; импортировать javafx.application.Application; импортировать javafx.event.ActionEvent; импортировать javafx.event.EventHandler; импортировать javafx.geometry.Pos; импортировать javafx.geometry.Rectangle2D; импортировать javafx.scene.Scene; импортировать javafx.scene.SceneBuilder; импортировать javafx.scene.control.Button; импортировать javafx.scene.control.ButtonBuilder; импортировать javafx.scene.input.MouseEvent; импортировать javafx.scene.layout.StackPane; импортировать javafx.scene.layout.StackPaneBuilder; импортировать javafx.scene.paint.Color; импортировать javafx.stage.Screen; импортировать javafx.stage.Stage; импортировать javafx.stage.StageStyle; общественный класс DraggableStage расширяет приложение { Кнопка закрытия; держатель StackPane; Rectangle2D maxBounds; СценаСцена; двойное нажатиеX; двойное нажатие Y; двойной перетаскиваниеX; двойное перетаскиваниеY; @Override public void start (этап этапа) выдает исключение { финальный этап theStage = stage; // определяем размер экрана maxBounds = Screen.getPrimary().getVisualBounds(); //создаем кнопку закрытия закрыть = ButtonBuilder .создавать() .text("Закрыть") .строить(); //создаем держатель StackPane для кнопки держатель = StackPaneBuilder .создавать() .alignment(Поз.ЦЕНТР) .дети рядом) .строить(); // вы не можете изменить размер экрана, превышающий максимальное разрешение экрана Holder.setMaxSize(maxBounds.getWidth(), maxBounds.getHeight()); //вы не можете изменить размер меньше половины ширины и высоты экрана Holder.setMinSize(maxBounds.getWidth()/2,maxBounds.getHeight()/2); //сцена, где все это происходит theScene = SceneBuilder .создавать() .root(держатель) .width(maxBounds.getWidth()/2) .height(maxBounds.getHeight()/2) .строить(); // добавляем прослушиватели кнопок close.setOnAction(new EventHandler(){ @Override public void handle (событие ActionEvent) { theStage.close(); } }); // добавляем прослушиватель перетаскивания и нажатия для StackPane Holder.setOnMousePressed(new EventHandler(){ @Override public void handle(MouseEvent e) { нажатыйX = e.getX(); нажатыйY = e.getY(); } }); Holder.setOnMouseDragged(new EventHandler(){ @Override public void handle(MouseEvent e) { перетащилX = e.getX(); перетащилY = e.getY(); двойная разницаX = перетащилX - нажалX; двойная разницаY = перетащилY - нажалY; theStage.setX(theStage.getX() + разницаX); theStage.setY(theStage.getY() + разницаY); } }); //обязательная ерунда theScene.setFill(Color.rgb(128, 128, 128, 0,5)); stage.initStyle(StageStyle.TRANSPARENT); stage.setScene(theScene); stage.sizeToScene(); сцена.шоу(); } public static void main(String[] args) { Application.launch("draggable.DraggableStage"); } } Изображение:
Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»