2014-09-03 7 views
0

JavaFX에서 스크롤 창 (앵커 창 포함)을 만들었습니다. 런타임에 사각형을 만들어 ScrollPane에 추가하고 있습니다. 런타임시 스크롤 패널의 내용을 변경할 수있는 마우스 클릭 이벤트를 스크롤 패널에 추가하려고합니다.JavaFX의 ScrollPane에서 MouseClick 이벤트 추가

나는 그 일을 시도하지만 스크롤 구획 여기

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: argument type mismatch 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.Trampoline.invoke(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at sun.reflect.misc.MethodUtil.invoke(Unknown Source) 
at javafx.fxml.FXMLLoader$MethodHandler.invoke(Unknown Source) 
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(Unknown Source) 
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEventImpl(Unknown Source) 
at com.sun.javafx.event.EventUtil.fireEvent(Unknown Source) 
at javafx.event.Event.fireEvent(Unknown Source) 
at javafx.scene.Scene$ClickGenerator.postProcess(Unknown Source) 
at javafx.scene.Scene$ClickGenerator.access$7900(Unknown Source) 
at javafx.scene.Scene$MouseHandler.process(Unknown Source) 
at javafx.scene.Scene$MouseHandler.access$1500(Unknown Source) 
at javafx.scene.Scene.impl_processMouseEvent(Unknown Source) 
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.handleMouseEvent(Unknown Source) 
at com.sun.glass.ui.View.notifyMouse(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source) 
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

클릭 할 때 나는이 예외가 내 자바 FX fxml 부분,

<ScrollPane fx:id="scrollPane" layoutX="229.0" layoutY="183.0" onMouseClicked="#ChangeImageColor" prefHeight="137.0" prefWidth="143.0"> 
     <content> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="154.0" prefWidth="157.0" /> 
     </content> 
</ScrollPane> 

그리고 내 자바 코드,

@FXML 
void ChangeImageColor(ActionEvent event) 
{ 
    System.out.print("Hit!"); 
    scrollPane.setContent(null); 
    Rectangle rectangle = new Rectangle(200, 200, Color.BLUEVIOLET); 
    rectangle.setStroke(Color.BLACK); 
    rectangle.setStrokeWidth(25); 
    scrollPane.setContent(rectangle);   
} 

이것은 초기화시 수행하는 작업입니다.

Rectangle rectangle = new Rectangle(200, 200, Color.RED); 
rectangle.setStroke(Color.BLACK); 
rectangle.setStrokeWidth(25); 
scrollPane.setContent(rectangle); 

답변

1

당신이 직면하고있는 문제는 다음 매개 변수 유형 MouseEvent 대신 ActionEvent이어야하기 때문에 방법

@FXML  
void ChangeImageColor(ActionEvent event) 

의 선언이다. 이벤트 종류가 확실하지 않은 경우 매개 변수를 제거 할 수도 있습니다. 사용해보십시오 :

@FXML  
void ChangeImageColor() 

또는

@FXML  
void ChangeImageColor(MouseEvent event) 
+0

그것은했다! 감사! :) – AnkitG

0

fxml에서 이벤트를 추가하지 않은 이유가 확실하지 않습니다. Java 코드에 이벤트 정의를 추가하기 만하면 완벽하게 작동합니다.

scrollPane.setOnMouseClicked(new EventHandler<Event>() 
{ 
    @Override 
    public void handle(Event event) 
    { 
     //Logic on event occurrence 
    } 
}); 
관련 문제