私の推測では、コンポーネント構造を再帰的にトラバースし、各ノード (存在する場合) のテキストを取得して追加するメソッドを作成します。擬似コードでは、次のようになります。
public void collectText(Container root) {
StringBuilder builder = new StringBuilder();
collectText(root, builder);
return builder.toString();
}
private void collectText(Container root, StringBuilder builder) {
builder.append(root.getText());
for (Component c : root.getComponents()) {
// Check whether this component has other components
if (c instanceof Container) {
collectText((Container) c, builder);
} else {
// Check whether this Component has text content, and append it to the builder
}
}
}
ご覧のとおり、それは 1 つのコンポーネント (あなたの ) から始まり、そのTextPane
下の要素をトラバースします。必要に応じて、テキストの内容をバッファーに追加する前に、子コンポーネントに実際にテキストがあるかどうかを確認できます。要素をトラバースした後、バッファの内容を返します。
編集
Container#getComponents()
JavaDoc はそれについて何も述べていませんが、常に同じ順序で子コンポーネントを返すと思います(内部的に使用されるため) 。List#toArray()