テキストエリアに入力されたテキストを取得する

テキストエリアに利用者が入力したテキストを取得する方法について解説します。入力されたテキストをすべて取得したり、指定した部分だけや選択された部分だけを取得することもできます。

(2022 年 04 月 11 日公開 / 2022 年 04 月 11 日更新)

テキストエリアに入力されたテキストを取得する

テキストエリアに入力された値を取得するには JTextArea クラスの親クラスである JTextComponent で用意されている getText メソッドを使います。

public String getText()

このTextComponentに格納されたテキストを返します。 ベースとなるドキュメントがnullの場合は、NullPointerExceptionを返します。 テキストはバウンド・プロパティではないため、それが変更されてもPropertyChangeEvent はトリガーされません。 テキストの変更を待機するには、DocumentListenerを使用してください。

戻り値:
テキスト

例外:
NullPointerException - ドキュメントがnullの場合

メソッドを実行するとテキストエリアに入力されているテキストを String クラスの値として取得します。

実際の使い方は次のようになります。

JTextArea textarea = new JTextArea();
String str = textarea.getText();
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample11_1.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JTextArea;
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;
import java.awt.Color;

class JSample11_1 extends JFrame implements ActionListener{
  JTextArea textarea_left;
  JTextArea textarea_right;

  public static void main(String args[]){
    JSample11_1 frame = new JSample11_1("MyTitle");
    frame.setVisible(true);
  }

  JSample11_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    textarea_left = new JTextArea(5, 20);
    textarea_right = new JTextArea(5, 20);
    textarea_right.setEditable(false);
    textarea_right.setBackground(Color.LIGHT_GRAY);

    JButton button = new JButton("Get");
    button.addActionListener(this);

    JPanel p = new JPanel();
    p.add(textarea_left);
    p.add(textarea_right);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    textarea_right.setText(textarea_left.getText());
  }
}

次のようにコンパイルを行います。

javac JSample11_1.java

テキストエリアに入力されたテキストを取得する(1)

コンパイルが終わりましたら実行します。

java JSample11_1

テキストエリアを 2 つ、ボタンを を 1 つ追加しています。

テキストエリアに入力されたテキストを取得する(2)

左のテキストエリアにテキストを入力したあとでボタンをクリックすると、入力されたテキストを取得し右のテキストエリアに表示します。

テキストエリアに入力されたテキストを取得する(3)

テキストエリアに入力されたテキストを取得する(4)

テキストエリアに入力されたテキストを取得することができました。

入力されたテキストの指定部分だけを取得する

テキストエリアに入力されたテキストの中で、指定した位置から指定した長さのテキストを取得することもできます。先ほどと同じ getText メソッドで引数の異なる次のメソッドを使用します。

public String getText(int offs, int len) throws BadLocationException

コンポーネントが表すテキストの一部を取り出します。 長さが0の場合は、空の文字列を返します。

パラメータ:
offs - オフセット>= 0
len - 長さ>= 0

戻り値:
テキスト

例外:
BadLocationException - オフセットまたは長さが無効な場合

1 番目の引数には取得する文字列の開始位置、 2 番目の引数には取得する文字の長さを指定します。文字数で指定し先頭は 0 から開始されます。戻り値はテキストエリアに入力されたテキストの中から指定した位置から指定した長さだけを String クラスの値として取得します。

例外として javax.swing.text.BadLocationException が発生する可能性がありますので、その処理を記述して下さい。

実際の使い方は次のようになります。

JTextArea textarea = new JTextArea();
try{
  String str = textarea.getText(0, 10);
}catch(BadLocationException e){
  System.out.println("Bad Location Error!");
}

上記の場合、先頭から10文字分の値を取得します。

サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample11_2.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JTextArea;
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;
import java.awt.Color;

class JSample11_2 extends JFrame implements ActionListener{
  JTextArea textarea_left;
  JTextArea textarea_right;

  public static void main(String args[]){
    JSample11_2 frame = new JSample11_2("MyTitle");
    frame.setVisible(true);
  }

  JSample11_2(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    textarea_left = new JTextArea(5, 20);
    textarea_right = new JTextArea(5, 20);
    textarea_right.setEditable(false);
    textarea_right.setBackground(Color.LIGHT_GRAY);

    JButton button = new JButton("Get");
    button.addActionListener(this);

    JPanel p = new JPanel();
    p.add(textarea_left);
    p.add(textarea_right);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    try{
      textarea_right.setText(textarea_left.getText(0, 10));
    }catch(BadLocationException err){
      System.out.println("Bad Location Error!");
    }
  }
}

次のようにコンパイルを行います。

javac JSample11_2.java

入力されたテキストの指定部分だけを取得する(1)

コンパイルが終わりましたら実行します。

java JSample11_2

テキストエリアを 2 つ、ボタンを を 1 つ追加しています。

入力されたテキストの指定部分だけを取得する(2)

左のテキストエリアにテキストを入力したあとでボタンをクリックすると、入力されたテキストの先頭から 10 文字分を取得し右のテキストエリアに表示します。

入力されたテキストの指定部分だけを取得する(3)

入力されたテキストの指定部分だけを取得する(4)

テキストエリアに入力されたテキストの中で指定した部分だけを取得することができました。

入力されたテキストの選択した部分だけを取得する

テキストエリアに入力されたテキストの中で、マウスやキーボードを使って選択した部分のテキストを取得することもできます。選択した部分を取得するには JTextArea クラスの親クラスである JTextComponent で用意されている getSelectedText メソッドを使います。

public String getSelectedText()

このTextComponentに格納された選択されているテキストを返します。 選択領域がnullであるか、ドキュメントが空の場合は、nullを返します。

戻り値:
テキスト

例外:
IllegalArgumentException - 選択領域が何らかの理由でドキュメントへの有効なマッピングを持たない場合

メソッドを実行するとテキストエリアに入力されているテキストの中で選択されている部分を String クラスの値として取得します。

実際の使い方は次のようになります。

JTextArea textarea = new JTextArea();
String str = textarea.getSelectedText();
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 JSample11_3.java という名前で保存します。

import javax.swing.JFrame;
import javax.swing.JTextArea;
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;
import java.awt.Color;

class JSample11_3 extends JFrame implements ActionListener{
  JTextArea textarea_left;
  JTextArea textarea_right;

  public static void main(String args[]){
    JSample11_3 frame = new JSample11_3("MyTitle");
    frame.setVisible(true);
  }

  JSample11_3(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    textarea_left = new JTextArea(5, 20);
    textarea_right = new JTextArea(5, 20);
    textarea_right.setEditable(false);
    textarea_right.setBackground(Color.LIGHT_GRAY);

    JButton button = new JButton("Get");
    button.addActionListener(this);

    JPanel p = new JPanel();
    p.add(textarea_left);
    p.add(textarea_right);
    p.add(button);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }

  public void actionPerformed(ActionEvent e){
    textarea_right.setText(textarea_left.getSelectedText());
  }
}

次のようにコンパイルを行います。

javac JSample11_3.java

入力されたテキストの選択した部分だけを取得する(1)

コンパイルが終わりましたら実行します。

java JSample11_3

テキストエリアを 2 つ、ボタンを を 1 つ追加しています。

入力されたテキストの選択した部分だけを取得する(2)

左のテキストエリアにテキストを入力したあとでテキストの一部を選択します。そのあとでボタンをクリックすると、入力されたテキストの選択された部分を取得し右のテキストエリアに表示します。

入力されたテキストの選択した部分だけを取得する(3)

入力されたテキストの選択した部分だけを取得する(4)

テキストエリアに入力されたテキストの中で選択された部分だけを取得することができました。

-- --

テキストエリアに利用者が入力したテキストを取得する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。