1

Stringbuilder に含まれる改行を JLabel に表示するのに問題があります。

ここで解決された同様の問題がいくつか見つかりました。たとえば、[ここ] JLabel で int を使用して改行する問題と [ここ]最後の行を除くすべての行に改行文字を追加するにはどうすればよいですか? 、他にもいくつかありますが、どれも私にはうまくいかないようです。

System.out に出力すると問題なく動作し、毎回新しい行が表示されますが、JLabel に渡すとすべてが 1 行として表示されます。

これは、改行文字を追加しようとしたコードの現在のバージョンであり、メインの宣言にも含まれています。JLabel に渡された場合、どちらも効果がありません。

public void layoutCenter() {
    JPanel central = new JPanel();
    add(central, BorderLayout.CENTER);

    JTabbedPane tabs = new JTabbedPane();
    this.add(tabs);

    // memory tab
    StringBuilder mList = new StringBuilder();
    memLocList = new Memory[MEM_LOCATIONS]; //Memory is a separate class
    for (int i = 0; i < memLocList.length; i++) {
        mList.append("\n");
        memLocList[i] = null;
        mList.append("Memory location: " + i + " " + memLocList[i] + "\n");
    }
    System.out.println(mList.toString());

    JComponent memTab = makeTextPanel(mList.toString());
    tabs.addTab("Memory", memTab);

}

protected JComponent makeTextPanel(String text) {
    JPanel panel = new JPanel(false);
    JLabel filler = new JLabel(text);
    panel.add(filler);
    return panel;
}

System.getProperty(line.separator) を使用して同様の結果を得ることも試みましたが、他に試してみることができないので、ここで助けを求めたいと思いました。

ありがとう、ロバート。

-編集-

mKorbel のおかげで、JLabel を JTextPane に変更することで解決しました。問題の 2 行は次のとおりです。

JTextPane filler = new JTextPane();
    filler.setText(text);

皆さんに改めて感謝します。

4

5 に答える 5

2

テキストをHTMLタグでラップし、brタグを使用して新しい行を追加することにより、JLabelに複数の行を含めることができます。

自動ラッピングのニュースがある場合は、JTexrAreaを使用することをお勧めします。編集不可にして、ラベルのようにスタイルを設定できます。

于 2012-06-26T13:16:10.050 に答える
2

JLabel複数行のドキュメントを保持するように指定されていない場合、2つの選択肢があります(デフォルトで改行またはタブを受け入れることによる)

于 2012-06-26T13:17:30.003 に答える
2

JLabel Swing コンポーネントで改行を取得するには、<html> と <br> を使用する必要があります。

于 2012-06-26T13:13:34.683 に答える
2

絶対に使用する必要がある場合はJLabel、各行に 1 つ使用することをお勧めします。

于 2012-06-26T13:13:52.500 に答える
2

このチュートリアルを見ることができます: http://docs.oracle.com/javase/tutorial/uiswing/components/html.html

例の 1 つは、html を使用して JButton テキストを 2 行にすることです。それは非常に似ているはずです。

于 2012-06-26T13:27:03.757 に答える