1

行の折り返しと改行をサポートするパネルを実装するには? このパネルには、テキスト ラベルと改行のみを追加します。ラベルは左から右に流れ、必要に応じて次の「行」に折り返されます。改行により、次の行にジャンプします。また、パネルを垂直方向にスクロール可能にしたいと思います。

このソリューションは Java 5 で動作するはずです。SwingX を使用できます。

明確化: テキスト ラベルは実際にはJXHyperlink(SwingX からの) です。つまり、パネルにはクリック可能なラベルが含まれています。これが私がただ使うことができない理由です JTextArea

4

4 に答える 4

2

更新: ハイパーリンク サポートのリクエストを見逃しました。EditorPane を使用せずにそれを行う方法がわかりません。

JTextArea は、まさにあなたが説明したことを行います。

JTextArea textArea = new JTextArea();
JScrollPanel sPane = new JScrollPane(textArea);
于 2009-01-20T12:38:07.467 に答える
1

JTextPane何故か見落としていた を発見。このクラスは私が必要とすることを行います。

でも助けてくれてありがとう。:)

于 2009-01-21T22:24:22.243 に答える
1

代替テキスト http://img187.imageshack.us/img187/3238/wraprn0.png

このサンプルは、コンテナであるパネルからのものではなく、コンテンツを表示するための JLabel からのものです。

コンテンツで HTML を使用し、休憩ごとに <br> を使用できます。コンポーネントのサイズ変更に関するルールに従って、ブレークをプログラムで計算する必要があります

コードは次のとおりです。

import javax.swing.*;
import java.awt.*;

public class Wrap {


    public static void main( String [] args ) { 

        JFrame frame = new JFrame("Wrap test");

        String text =  "<html>This<br>is<br>a<br>multiline<br>label</html>";


        frame.add( new JLabel( text ) );

        frame.pack();

        frame.setVisible( true );

    }
}
于 2009-01-20T19:52:43.923 に答える
0

それはあなたが求めている解決策ではないかもしれませんが、あなたが持っている要件から、カスタムLayoutManagerはあなたが求めているものを達成できるように思えます. 改行を許可するカスタム レイアウト マネージャーを設計してContainer( などPanel) に割り当てることで、改行を許可する を作成できるはずPanelです。

Java チュートリアルのコンテナ内でのコンポーネントのレイアウトに関する記事では、レイアウト マネージャーが Java でどのように機能するかについての一般的な情報が提供されます。特に、カスタム レイアウト マネージャーの作成では、カスタム レイアウト マネージャーを に適用する方法に関する情報が提供されます。Container

FlowLayout( のデフォルトの Layout Manager ) の動作はPanel、あなたが求めている動作にかなり近いようです。改行に機能を追加することは、欠けている部分のようです。

提案:おそらく、カスタム レイアウト マネージャーは、改行Componentを表す を使用して改行を追加する機能を持つことができます。これは、メソッドContainerを使用してに追加できます。add()

たとえばComponent、カスタム レイアウト マネージャーに (a hypothetical) などのクラス定数がありLineBreakLayout.LINE_BREAK、それを に追加するとContainer、カスタム レイアウト マネージャーに次の行に移動するように指示できます。おそらく、実装は次のようになります。

Panel p = new Panel(new LineBreakLayout());
p.add(new Label("First Line"));
p.add(LineBreakLayout.LINE_BREAK);
p.add(new Label("Second Line"));

上記の仮説 は、最初の行を 1 行に、2番目の行を 2 行目にLineBreakLayoutレンダリングします。LabelLabel

于 2009-01-20T14:01:58.733 に答える