- PR -

テキストエリア(java.awt.TextArea)入力値の出力方法について

1
投稿者投稿内容
ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-11-20 17:21
テキストエリア(java.awt.TextArea)から値を取得する際には
"getText()"メソッドを使用しますが。
例えばテキストエリアに次のように入力した場合、"getText()"
メソッドで値を取得すると"ABC123abc"と取得されます。
********
ABC
123   (3行入力されています、各行の終わりには改行されています)
abc

********

やりたい事は上記のような入力値を改行単位で一行ずつ取得したいのです。
改行位置さえわかれば、"select()"メソッドで行の先頭から改行前までを
選択し、"getSelectedText()"メソッドで選択個所だけを取得すれば良いかな
とも考えたのですが、どうしたら改行位置を知る事ができるでしょうか?
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-11-20 18:14
javax.swing.JTextAreaは使えないんですよね。きっと。
JTextAreaだったら、getLineEndOffset()とgetLineStartOffset()使えば取得できるんですけどねぇ。

あまりよい方法ではかも知れないですが、TextListenerで改行の入力を監視し、入力のたびに、前回設定したオフセット(初期値は0)から現在の位置までの文字列を取得、次いでオフセット(現在のキャレット位置)の変更を行うことになるのかしら。

キャレット位置の監視はどうすればいいんだろう?
さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2003-11-21 14:10
こんにちは、さくらばです。

引用:

ボムさんの書き込み (2003-11-20 17:21) より:
テキストエリア(java.awt.TextArea)から値を取得する際には
"getText()"メソッドを使用しますが。
例えばテキストエリアに次のように入力した場合、"getText()"
メソッドで値を取得すると"ABC123abc"と取得されます。



たぶん勘違いされていると思いますが、TextArea#getText は改行文字も
含んでいますよ。とりあえず、サンプルをつけたので確かめてみてください。

コード:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TextAreaTest {
    private TextArea area;

    public TextAreaTest () throws Exception {
        Frame frame = new Frame("Test");
        frame.setBounds(100, 100, 400, 400);
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(1);
            }
        });

        area = new TextArea();
        frame.add(area);

        Button button = new Button("getText");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                byte[] b = area.getText().getBytes();
                for (int i = 0; i < b.length; i++) {
                    System.out.print(Integer.toHexString(b[i]) + " ");
                    if (b[i] == '\n') {
                        System.out.println();
                    }
                }
            }
        });
        frame.add(button, BorderLayout.SOUTH);

        frame.setVisible(true);
        
    }

    public static void main(String[] args) throws Exception {
        new TextAreaTest();
    }
}


ボム
ベテラン
会議室デビュー日: 2003/07/25
投稿数: 61
投稿日時: 2003-11-21 16:01
かずくんさん、さくらばさん、ありがとうございます。

>あまりよい方法ではかも知れないですが、TextListenerで改行の入力を監視し、入力のたび
>に、前回設定したオフセット(初期値は0)から現在の位置までの文字列を取得、次いでオフセ
>ット(現在のキャレット位置)の変更を行うことになるのかしら。
私も当初、この方法しか頭に浮かびませんでした・・・

さくらばさんから教えていただいた、サンプルをテストしてみました所、見事改行コード
の位置をつかむ事ができました!

本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)