質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

6384閲覧

TextArea内の文章の行数を取得する方法

TA-KEY

総合スコア21

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/01/29 08:29

JTextArea内に文章が記述されている時、その文章の行数を取得したいのですが、
getRowsやgetColumnsでは出来いみたいです。

おそらくメソッドでは用意されてないようなのですが、どうすれば行数を取得できますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

getLineCountでもだめでしょうか?
参考URL

投稿2018/01/29 09:03

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Element#getElementCount()メソッドで行数を取得可能です。

java

1import java.awt.*; 2import java.util.Collections; 3import javax.swing.*; 4import javax.swing.event.*; 5import javax.swing.text.*; 6public final class JTextAreaTest { 7 private Component makeUI() { 8 JTextArea textArea = new JTextArea( 9 String.join("\n", Collections.nCopies(2000, "aaaaa"))); 10 11 JButton button = new JButton("aaaa"); 12 button.addActionListener(e -> { 13 Document doc = textArea.getDocument(); 14 Element root = doc.getDefaultRootElement(); 15 int count = root.getElementCount(); 16 System.out.println("ElementCount: " + count); 17 }); 18 19 JPanel p = new JPanel(new BorderLayout()); 20 p.add(new JScrollPane(textArea)); 21 p.add(button, BorderLayout.SOUTH); 22 return p; 23 } 24 public static void main(String... args) { 25 EventQueue.invokeLater(() -> { 26 JFrame f = new JFrame(); 27 f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 28 f.getContentPane().add(new JTextAreaTest().makeUI()); 29 f.setSize(320, 240); 30 f.setLocationRelativeTo(null); 31 f.setVisible(true); 32 }); 33 } 34} 35

追記

  • JTextArea#getLineCount() (Java Platform SE 8)でも全体の行数を取得できます。
    • JTextArea#getLineCount()メソッド内でElement#getElementCount()を使用している。
    • ドキュメントが「領域内に収める行数を返します。」になっていて、意味が分かりづらいですが...

投稿2018/01/29 09:09

編集2018/01/29 09:21
aterai

総合スコア158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/01/29 09:19 編集

「子要素」と「行」は厳密には「違う概念」だと思います。「子要素」が行ではなく「色などの属性が他のテキストと異なる一部分」を意味する場合もあるのではないでしょうか? JTextAreaではテキストの構造を子要素に分割する基準が「行」と一致するのかも知れませんが・・・ そのあたりは如何でしょう?
aterai

2018/01/29 09:28 編集

JTextAreaの使用するドキュメントはPlainDocumentで、その説明には「文字の属性をまったく保持しないプレーンなドキュメントです。デフォルトでは、このドキュメントの要素の構造は、テキスト内の行をマップしたものになります。getDefaultRootElementメソッドが返すElementは行のマップを表し、各子要素は単一の行を表します。」とあるため、「行」と一致すると考えて良さそうです。
KSwordOfHaste

2018/01/29 09:38

なるほどドキュメントに行と要素構造が一致すると明記されているなら安心ですね。 まぁそれでも個人的にはgetLineCountがなぜ定義されているかを考えるに、そちらを用いた方が素直であるとは思います。
aterai

2018/01/29 09:59

確かに「JTextArea#getLineCount()が素直」ですね。言い訳すると最初getLineCountの説明には「領域内に収める行数を返します。」とあるので、JTextAreaの中身の行数ではなく、JScrollPane内でJTextAreaの高さを決めるためのデフォルト表示行数か何かだと勘違いしていましたw。getLineStartOffsetなどの例外の説明にある「ドキュメントに含まれる行数(getLineCountから報告される)」の方が意味が分かりやすい気がします。
KSwordOfHaste

2018/01/29 10:03

> デフォルト表示行数か何かだと勘違い 確かに。自分も迷って実装を調べそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問