JavaSwing IMEの自動ON/OFF設定
特定のJTextField等に入力するときに、自動的に日本語入力をON/OFFするサンプルプログラムです。
Swingのサンプルプログラム
上の動画のソースコードです。
上のJTextFieldにフォーカスが当たったら、日本語IMEをオンにし、外れたらOFFにしています。
package tomojavalib.swingfx;
import java.awt.Dimension;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class FocusTestSwing extends JFrame {
/*コンストラクタ*/
public FocusTestSwing()
{
//サイズ設定
this.setBounds(500, 500, 320, 240);
//タイトル設定
this.setTitle("JavaSwing");
JPanel pane = new JPanel();
add(pane);
JTextField t1 = new JTextField("");
t1.setPreferredSize( new Dimension( 200,20 ));
pane.add(t1);
JTextField t2 = new JTextField("");
t2.setPreferredSize( new Dimension( 200,20 ));
pane.add(t2);
t1.addFocusListener(new FocusListener(){
public void focusGained(FocusEvent fe){t1.getInputContext().setCompositionEnabled(true);}
public void focusLost(FocusEvent fe){t1.getInputContext().setCompositionEnabled(false);}
});
}
public static void main(String[] args) {
FocusTestSwing ets = new FocusTestSwing();
ets.setVisible(true);
}
}
JavaFXの場合
Java 楽天 FXには、Swingの
getInputContext().setCompositionEnabled(true);
にあたる機能がないようで、検索したけど見つかりませんでした、残念。
せっかくなので、フォーカスのあたったTextFieldの背景色を変えるプログラムをあげておきます。
package tomojavalib.swingfx;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class FocusTestFx2 extends Application {
TextField[] t = new TextField[4];
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage stage) throws Exception {
stage.setTitle("JavaFX楽天 ");
FlowPane pane = new FlowPane();
Scene scene = new Scene(pane, 320, 240);
//TextField[] t = new TextField[4];
for(int i=0;i<t.length;i++){
t[i] = new TextField();
t[i].setPrefSize(200, 20);
pane.getChildren().add(t[i]);
t[i].focusedProperty().addListener(new ChangeListener<Boolean>(){
@Override
public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldPropertyValue, Boolean newPropertyValue){
if (newPropertyValue){
FocusTestFx2.this.setColor();
}else{
System.out.println("Textfield out focus");
}}});
}
stage.setScene(scene);
stage.show();
}
/**フォーカスされているテキストフィールドの色を変える*/
private void setColor(){
for(int i=0;i<t.length;i++){
//System.out.println("1");
if( t[i].isFocused() ){
t[i].setBackground(new Background(new BackgroundFill( new Color(240/255.,240/255.,255/255.,1.) , CornerRadii.EMPTY , Insets.EMPTY )));
}else{
t[i].setBackground(new Background(new BackgroundFill( Color.WHITE , CornerRadii.EMPTY , Insets.EMPTY )));
}
}
return;
}
}
最終更新日: 2018-12-25 08:31:48