- ベストアンサー
JTextFieldで確定前の文字をフォーカスが離れた時に無効にする方法
Swingにてアプリを作成しています。 OSはWindowsXpで、JDKバージョンは1.4.2です。 JTextFieldで入力中にまだ確定前(下線がある状態)で、 フォーカスが離れた時に、その確定前の文字を無効にする方法で 悩んでいます。 フォーカスリスナーを実装し、フォーカスが失われたことは断定出来たのですが、確定前の文字があるか否かを知り、それを無効にする方法が判りません。 ご存知の方がおりましたらご教授お願いいたします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 興味があったので、いろいろいじくり回しているうちに何とかそれっぽいことができるようになりました。 でも、これが正しいやり方なのか、自信がありません。 とりあえず、参考になればよいのですが。 (コンパイルするときは全角スペースを半角スペースに変換してからにしてください) import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TextFieldTest extends JFrame implements FocusListener, InputMethodListener { JTextField textField1; JTextField textField2; boolean isLostFocus; public static void main(String[] args) throws Exception { TextFieldTest frame = new TextFieldTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public TextFieldTest() { getContentPane().setLayout(new FlowLayout()); textField1 = new JTextField(10); textField1.addFocusListener(this); textField1.addInputMethodListener(this); getContentPane().add(textField1); textField2 = new JTextField(10); textField2.addFocusListener(this); textField2.addInputMethodListener(this); getContentPane().add(textField2); } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { isLostFocus = true; } public void inputMethodTextChanged(InputMethodEvent event) { //フォーカスを失った直後なら if (isLostFocus) { //InputMethodEventを握りつぶす event.consume(); isLostFocus = false; } } public void caretPositionChanged(InputMethodEvent event) {} }
お礼
ありがとうございます。 実は入力制限等を行うテキストフィールドを作成したまでは良かったんですが、使用しているうちに色々問題が出てきてしまい大変困っていました。 InputMethodListenerを実装することにより、実現できることが分かり大変参考になりました。