ともさんのHP >プロブラミング >JavaFX >マウスイベント

JavaFXマウスイベント

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

ともさんのHP >プロブラミング >JavaFX >マウスイベント

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

ブルーベリーの挿し木  
シンプルなパネルラインワンピースの型紙と作りかた  
和風コートの作り方  
ホオノキ  
雑草でグリーンカーテン  
エケベリア植え替え  
E型肝炎体験記  
フラワースタンドの自作  
ウエスト切り替えワンピースの作りかた  
メーラーの引っ越し  
RaspberryPi用Javaサンプルプログラム  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます