JavaFXマウスイベント
JavaFXでマウスからイベントを発生させるプログラムの紹介です。
下の動画では、
ボタンをクリックすると、ボタン楽天 の表示が変わる。
テキストフィールド内にマウスカーソルが入ると、カーソルの形状が変わり、出ると元に戻る。
テキストフィールド内でマウスホイールを動かすと、テキストフィールドの数値が変わる。
という処理をしています。
マウスクリックによるイベント
まず、ボタンの設定時に、クリックされたらmouseClick()メソッドに入るように設定します。
Button b = new Button( " ボタン " );
pane.getChildren().add( b );
EventHandler<MouseEvent> mouseClick = ( event ) -> this.mouseClick( event );
b.addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClick );
mouseClick()メソッドでは、ボタンの表示を調べ、表示の差し替えを行っています。
private void mouseClick( MouseEvent e ){
System.out.println(" マウスクリック ");
String s = ((Button)e.getSource()).getText();
if(s.equals(" ボタン ")){
((Button)e.getSource()).setText("クリック");
}else{
((Button)e.getSource()).setText(" ボタン ");
}
}
マウスがUIコントロールに出入りした時のイベント
マウスが入った時、出た時のイベント設定は下記のように書きます。
//マウスが入った時
EventHandler<MouseEvent> mouseEnter = ( event ) -> this.mouseEnter( event );
this.addEventHandler( MouseEvent.MOUSE_ENTERED, mouseEnter );
//マウスが出た時
EventHandler<MouseEvent> mouseOut = ( event ) -> this.mouseOut( event );
this.addEventHandler( MouseEvent.MOUSE_EXITED, mouseOut );
設定で指定したメソッドも用意しておきます。
private void mouseEnter( MouseEvent e ){ this.setCursor( Cursor.V_RESIZE );}
private void mouseOut( MouseEvent e ){ this.setCursor( Cursor.DEFAULT );}
マウスホイールを動かした時のイベント
同様にマウスホイールを動かしたときのイベントの設定と、イベント処理メソッド。
サンプルではテキストフィールドに入っている数値を、マウスホイールの動きに対応して増減させています。
EventHandler<ScrollEvent> mouseScroll = ( event ) -> this.mouseScroll( event );
this.addEventHandler( ScrollEvent.SCROLL, mouseScroll );
private void mouseScroll( ScrollEvent e ){
int i = Integer.parseInt( ((TTextField)e.getSource()).getText());
if( e.getDeltaY()>0 ){ i++; }else{ i--; }
((TTextField)e.getSource()).setText( i + "" );
//System.out.println( e.getDeltaY() );
}
マウスイベントのサンプルプログラム
最初の動画のソースプログラムです。
ボタンは単純にイベントを設定しています。
テキストフィールドのほうは、TextFieldを拡張したクラスを作り、その中にイベント処理を入れています。
同じイベントを発生させるコントロールをたくさん用意するときはこちらの方が簡単ですね。
package tomojavalib.fx;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class ButtonTest extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
//StageにPaneとSceneを置く
Vbox pane = new Vbox();
Label l1 = new Label( " ボタン " );
pane.getChildren().add( l1 );
Button b = new Button( " ボタン " );
pane.getChildren().add( b );
//マウスがクリックされたとき
EventHandler<MouseEvent> mouseClick = ( event ) -> this.mouseClick( event );
b.addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClick );
Label l2 = new Label( " テキスト " );
pane.getChildren().add( l2 );
TTextField t = null ;
try{
t = new TTextField( "5" );
}catch( Exception ex ){ t = new TTextField(); }
pane.getChildren().add( t );
Scene scene = new Scene(pane, 320, 240);
stage.setScene(scene);
stage.show();
}
private void mouseClick( MouseEvent e ){
System.out.println(" マウスクリック ");
String s = ((Button)e.getSource()).getText();
if(s.equals(" ボタン ")){
((Button)e.getSource()).setText("クリック");
}else{
((Button)e.getSource()).setText(" ボタン ");
}
}
}
package tomojavalib.fx;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.ScrollEvent;
public class TTextField extends TextField {
public TTextField(String s)throws Exception{
super( s );
try{
Integer.parseInt( s );
}catch( Exception ex ){ throw ex; }
this.setEvent();
}
public TTextField(){ super( "0" ); this.setEvent();}
/**イベント設定*/
private void setEvent(){
//マウスが入った時
EventHandler<MouseEvent> mouseEnter = ( event ) -> this.mouseEnter( event );
this.addEventHandler( MouseEvent.MOUSE_ENTERED, mouseEnter );
//マウスが出た時
EventHandler<MouseEvent> mouseOut = ( event ) -> this.mouseOut( event );
this.addEventHandler( MouseEvent.MOUSE_EXITED, mouseOut );
//マウスのホイールが動いたとき
EventHandler<ScrollEvent> mouseScroll = ( event ) -> this.mouseScroll( event );
this.addEventHandler( ScrollEvent.SCROLL, mouseScroll );
}
private void mouseEnter( MouseEvent e ){ this.setCursor( Cursor.V_RESIZE );}
private void mouseOut( MouseEvent e ){ this.setCursor( Cursor.DEFAULT );}
private void mouseScroll( ScrollEvent e ){
int i = Integer.parseInt( ((TTextField)e.getSource()).getText());
if( e.getDeltaY()>0 ){ i++; }else{ i--; }
((TTextField)e.getSource()).setText( i + "" );
//System.out.println( e.getDeltaY() );
}
}
最終更新日: 2017-03-31 18:55:10