JavaFX/Swing 同時キー押しのサンプルプログラム
アプリケーションで時々、「Siftキーを押しながら〇×する」あるいはAlt、Ctlを押しながら〇×するという操作をする場合があります。
このページではほかのキーを押しながらマウスボタンをクリックする場合のJava(FXとSwing)サンプルプログラムを紹介しています。
下の動画は、サンプルプログラムの実行結果です。
Eventからキーの状態を受け取る
マウスをクリックしたり、キーを押したりした場合にイベントを発生させることが出来ます。
イベント処理の中で、特定のキーが押されているかを調べ、キーの状態に応じた処理をしています。
Swingの場合
int flugi = event.getModifiers();
if( (flugi & ActionEvent.CTRL_MASK)==ActionEvent.CTRL_MASK ){ b.setText("CTLが押されています"); }
else if( (flugi & ActionEvent.SHIFT_MASK)==ActionEvent.SHIFT_MASK ){ b.setText("SIFTが押されています"); }
else if( (flugi & ActionEvent.ALT_MASK)==ActionEvent.ALT_MASK ){ b.setText("ALTが押されています"); }
else{b.setText("ボタン楽天 が押されました");}
Java
楽天 FXの場合
if( event.isControlDown() ){ b.setText("CTLが押されています"); }
else if( event.isShiftDown() ){ b.setText("SIFTが押されています"); }
else if( event.isAltDown() ){ b.setText("ALTが押されています"); }
else{ b.setText("ボタンが押されました"); }
サンプルプログラム(JavaSwing)
冒頭の動画のソースは以下の通り。
package tomojavalib.swingfx;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Jbutton;
import javax.swing.Jframe;
import javax.swing.Jpanel;
public class SiftKeySwing extends Jframe {
Jbutton b;
/*コンストラクタ*/
public SiftKeySwing()
{
//サイズ設定
this.setBounds(500, 500, 320, 240);
//タイトル設定
this.setTitle("JavaSwing");
Jpanel pane = new Jpanel();
add(pane);
b = new Jbutton("ボタン");
pane.add(b);
setEvent();
}
public static void main(String[] args) {
SiftKeySwing ets = new SiftKeySwing();
ets.setVisible(true);
}
private void setEvent(){
b.addMouseListener(
new MouseAdapter(){
public void mouseClicked(MouseEvent event){
int flugi = event.getModifiers();
if( (flugi & ActionEvent.CTRL_MASK)==ActionEvent.CTRL_MASK ){ b.setText("CTLが押されています"); }
else if( (flugi & ActionEvent.SHIFT_MASK)==ActionEvent.SHIFT_MASK ){ b.setText("SIFTが押されています"); }
else if( (flugi & ActionEvent.ALT_MASK)==ActionEvent.ALT_MASK ){ b.setText("ALTが押されています"); }
else{b.setText("ボタンが押されました");}
}});
}
}
サンプルプログラム(JavaFX)
冒頭の動画のソースは以下の通り。
package tomojavalib.swingfx;
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.*;
import javafx.stage.Stage;
public class SiftKeyFX extends Application {
Button b;
boolean sift = false;
boolean ctl = false;
boolean alt = false;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("JavaFX楽天 ");
BorderPane pane = new BorderPane();
Scene scene = new Scene(pane, 320, 240);
b = new Button("ボタン");
pane.setCenter(b);
stage.setScene(scene);
stage.show();
EventHandler<MouseEvent> mouseClicked = ( event ) -> this.mouseClicked( event );
b.addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClicked );
}
private void mouseClicked( MouseEvent event ){
if( event.isControlDown() ){ b.setText("CTLが押されています"); }
else if( event.isShiftDown() ){ b.setText("SIFTが押されています"); }
else if( event.isAltDown() ){ b.setText("ALTが押されています"); }
else{ b.setText("ボタンが押されました"); }
}
}
最終更新日: 2019-01-21 08:51:33