2014-05-22 4 views
0

JavaFx에서 스크린 레코딩 응용 프로그램을 만드는 법을 배우고 있습니다. 사용자가 화면 캡처 영역을 결정하기 위해 사각형의 크기를 조정하기를 원합니다. 무대와 장면을 투명하게 만들었습니다. primaryStage.initStyle(StageStyle.TRANSPARENT);scene.setFill(null);. 사각형 섹션의 크기를 조정할 수 있지만 문제는 스테이지 내부를 클릭하면 투명하므로 최소화됩니다. 이 문제를 해결하는 방법? 본 신청서는 screencast-o-matics으로 동일하게 간주됩니다. 제발 날 안내 해줘.Javafx에서 내부를 클릭하면 투명한 스테이지가 최소화되지 않아야합니다.

편집 : 코드 :

import java.awt.Toolkit; 

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.HBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class ScreenCaptureDemo extends Application { 

    Rectangle rectangle ; 
    double x0,y0; 

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

    @Override 
    public void start(final Stage primaryStage) throws Exception { 

     BorderPane borderPane = new BorderPane(); 

     GridPane gridPane = new GridPane(); 

     HBox box = new HBox(); 
     Button button1 = new Button("button2"); 
     Button button2 = new Button("Button3"); 
     Button button = new Button("button"); 

     box.getChildren().add(button); 
     box.getChildren().add(button1); 
     box.getChildren().add(button2); 



     rectangle = new Rectangle(500.0, 500.0); 

     rectangle.setStrokeWidth(2); 
     rectangle.setArcHeight(15.0); 
     rectangle.setArcWidth(15.0); 
     rectangle.setFill(Color.TRANSPARENT); 
     rectangle.setStroke(Color.RED); 
     rectangle.setStrokeWidth(5); 
     rectangle.getStrokeDashArray().addAll(3.0,13.0,3.0,7.0); 

     gridPane.add(rectangle, 0, 0); 
     gridPane.add(box, 0, 1); 

     borderPane.setCenter(gridPane); 

     Scene scene = new Scene(borderPane,Toolkit.getDefaultToolkit().getScreenSize().getWidth()-100,Toolkit.getDefaultToolkit().getScreenSize().getHeight()-100); 
     scene.setOnMouseDragged(mouseHandler); 
     scene.setOnMousePressed(mouseHandler); 

     primaryStage.setScene(scene); 
     primaryStage.initStyle(StageStyle.TRANSPARENT); 
     scene.setFill(null); 
     rectangle.setMouseTransparent(true); 
     rectangle.setPickOnBounds(true); 
     primaryStage.show(); 

    } 


    void setScaleRect(double sX, double sY){ 
     rectangle.setHeight(sY); 
     rectangle.setWidth(sX); 
    } 

    EventHandler<MouseEvent> mouseHandler = new EventHandler<MouseEvent>() { 

     @Override 
     public void handle(MouseEvent mouseEvent) { 

      if (mouseEvent.getEventType() == MouseEvent.MOUSE_DRAGGED) { 
       double heightLowerLimit = rectangle.getHeight()-500; 
       double heightUpperLimit = rectangle.getHeight()+500; 
       double widthLowerLimit = rectangle.getWidth()-500; 
       double widthUpperLimit = rectangle.getWidth()+500; 
       if ((mouseEvent.getY() >heightLowerLimit && mouseEvent.getY() < heightUpperLimit) && 
         (mouseEvent.getX() >widthLowerLimit && mouseEvent.getX() < widthUpperLimit) 
         ) { 

        double scaleX = mouseEvent.getX(); 
        double scaleY = mouseEvent.getY(); 

        setScaleRect(scaleX, scaleY); 
       } else if ((mouseEvent.getY() >heightLowerLimit && mouseEvent.getY() < heightUpperLimit) 
         && (mouseEvent.getX() <widthLowerLimit && mouseEvent.getX() > widthUpperLimit)) { 
        double scaleY = mouseEvent.getY(); 
        double scaleX=rectangle.getWidth(); 
        setScaleRect(scaleX, scaleY); 
       } else if (mouseEvent.getY() != rectangle.getHeight() 
         && mouseEvent.getX() == rectangle.getWidth()) { 
        double scaleX = mouseEvent.getX(); 
        double scaleY=rectangle.getHeight(); 
        setScaleRect(scaleX, scaleY); 
       } 

      } 

     } 

    }; 
} 

미리

+0

포스트 재현 샘플 코드로 사각형을 채 웁니다. –

+0

@UlukBiy : hie 나는 http://www.screencast-o-matic.com/과 같은 것을 계속하고 싶다. 나는 투명 창을 클릭 할 수 없다. 내가 클릭하면, 최소화된다. 나는 가지고있다. 코드로 제 질문을 수정했습니다 ... screen-o-matics를 확인하십시오. 화면 캡처 영역과 관련하여 비슷한 기능을 원합니다. 감사합니다. – tarkikshah

답변

0

당신을 감사합니다

rectangle.setFill(Color.web("blue", 0.1)); 
// or more transparent 
rectangle.setFill(Color.web("gray", 0.01)); 
+0

예, 투명 화면을 제공하지만 사용자가 화면에서 콘텐츠를 선택할 수 없습니다. [screencast-o-matics] (http://www.screencast-o-matic.com/)의 경우 사용자는 필수 기능이라고 생각되는 화면의 콘텐츠를 선택할 수 있습니다. – tarkikshah

관련 문제