テキストフィールドに入力されたテキストを取得する
テキストフィールドに利用者が入力したテキストを取得する方法について解説します。入力されたテキストをすべて取得したり、指定した部分だけや選択された部分だけを取得することもできます。
(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)
テキストフィールドに入力されたテキストを取得する
テキストフィールドに入力された値を取得するには JTextField クラスの親クラスである JTextComponent で用意されている getText メソッドを使います。
public String getText()
このTextComponentに格納されたテキストを返します。 ベースとなるドキュメントがnullの場合は、NullPointerExceptionを返します。 テキストはバウンド・プロパティではないため、それが変更されてもPropertyChangeEvent はトリガーされません。 テキストの変更を待機するには、DocumentListenerを使用してください。
戻り値:
テキスト
例外:
NullPointerException - ドキュメントがnullの場合
メソッドを実行するとテキストフィールドに入力されているテキストを String クラスの値として取得します。
実際の使い方は次のようになります。
JTextField text = new JTextField(); String str = text.getText();
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample9_1.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class JSample9_1 extends JFrame implements ActionListener{ JLabel label; JTextField text; public static void main(String args[]){ JSample9_1 frame = new JSample9_1("MyTitle"); frame.setVisible(true); } JSample9_1(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); text = new JTextField(20); JButton button = new JButton("Get"); button.addActionListener(this); JPanel p = new JPanel(); p.add(text); p.add(button); label = new JLabel(); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); contentPane.add(label, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e){ label.setText(text.getText()); } }
次のようにコンパイルを行います。
javac JSample9_1.java
コンパイルが終わりましたら実行します。
java JSample9_1
テキストフィールドを 1 つ、ボタンを 1 つ、そして今は何も表示されていませんがラベルを 1 つ追加しています。
テキストフィールドにテキストを入力したあとでボタンをクリックすると、テキストフィールドに入力されたテキストを取得し画面下部に追加されているラベルに表示します。
入力されたテキストを取得することができました。
入力されたテキストの指定部分だけを取得する
テキストフィールドに入力されたテキストの中で、指定した位置から指定した長さのテキストを取得することもできます。先ほどと同じ getText メソッドで引数の異なる次のメソッドを使用します。
public String getText(int offs, int len) throws BadLocationException
コンポーネントが表すテキストの一部を取り出します。 長さが0の場合は、空の文字列を返します。
パラメータ:
offs - オフセット>= 0
len - 長さ>= 0
戻り値:
テキスト
例外:
BadLocationException - オフセットまたは長さが無効な場合
1 番目の引数には取得する文字列の開始位置、 2 番目の引数には取得する文字の長さを指定します。文字数で指定し先頭は 0 から開始されます。戻り値はテキストフィールドに入力されたテキストの中から指定した位置から指定した長さだけを String クラスの値として取得します。
例外として javax.swing.text.BadLocationException が発生する可能性がありますので、その処理を記述して下さい。
実際の使い方は次のようになります。
JTextField text = new JTextField(); try{ String str = text.getText(0, 2); }catch(BadLocationException e){ System.out.println("Bad Location Error!"); }
上記の場合、先頭から2文字分の値を取得します。
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample9_2.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.text.BadLocationException; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class JSample9_2 extends JFrame implements ActionListener{ JLabel label; JTextField text; public static void main(String args[]){ JSample9_2 frame = new JSample9_2("MyTitle"); frame.setVisible(true); } JSample9_2(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); text = new JTextField(20); JButton button = new JButton("Get"); button.addActionListener(this); JPanel p = new JPanel(); p.add(text); p.add(button); label = new JLabel(); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); contentPane.add(label, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e){ try{ label.setText(text.getText(0, 5)); }catch(BadLocationException err){ System.out.println("Bad Location Error!"); } } }
次のようにコンパイルを行います。
javac JSample9_2.java
コンパイルが終わりましたら実行します。
java JSample9_2
テキストフィールドを 1 つ、ボタンを 1 つ、そして今は何も表示されていませんがラベルを 1 つ追加しています。
テキストフィールドにテキストを入力したあとでボタンをクリックすると、テキストフィールドに入力されたテキストの中から先頭から 5 文字分を取得し画面下部に追加されているラベルに表示します。
入力されたテキストの指定した部分だけを取得することができました。
入力されたテキストの選択した部分だけを取得する
テキストフィールドに入力されたテキストの中で、マウスやキーボードを使って選択した部分のテキストを取得することもできます。選択した部分を取得するには JTextField クラスの親クラスである JTextComponent で用意されている getSelectedText メソッドを使います。
public String getSelectedText()
このTextComponentに格納された選択されているテキストを返します。 選択領域がnullであるか、ドキュメントが空の場合は、nullを返します。
戻り値:
テキスト
例外:
IllegalArgumentException - 選択領域が何らかの理由でドキュメントへの有効なマッピングを持たない場合
メソッドを実行するとテキストフィールドに入力されているテキストの中で選択されている部分を String クラスの値として取得します。
実際の使い方は次のようになります。
JTextField text = new JTextField(); String str = text.getSelectedText();
それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample9_3.java という名前で保存します。
import javax.swing.JFrame; import javax.swing.JTextField; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JButton; import java.awt.Container; import java.awt.BorderLayout; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; class JSample9_3 extends JFrame implements ActionListener{ JLabel label; JTextField text; public static void main(String args[]){ JSample9_3 frame = new JSample9_3("MyTitle"); frame.setVisible(true); } JSample9_3(String title){ setTitle(title); setBounds(100, 100, 600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); text = new JTextField(20); JButton button = new JButton("Get"); button.addActionListener(this); JPanel p = new JPanel(); p.add(text); p.add(button); label = new JLabel(); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); contentPane.add(label, BorderLayout.SOUTH); } public void actionPerformed(ActionEvent e){ label.setText(text.getSelectedText()); } }
次のようにコンパイルを行います。
javac JSample9_3.java
コンパイルが終わりましたら実行します。
java JSample9_3
テキストフィールドを 1 つ、ボタンを 1 つ、そして今は何も表示されていませんがラベルを 1 つ追加しています。
テキストフィールドにテキストを入力したあとで取得したい部分をマウスなどを使って選択します。
その後でボタンをクリックすると、テキストフィールドに入力されたテキストの中の選択されている部分を取得し画面下部に追加されているラベルに表示します。
入力されたテキストの中の選択されている部分を取得することができました。
-- --
テキストフィールドに利用者が入力したテキストを取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。