1

私の JScrollPane は JTextArea の周りにあります:

    ...
    errorText = new JTextArea();
    errorText.setLineWrap(true);
    errorText.setWrapStyleWord(true);
    errorText.setPreferredSize(new Dimension(300, 150));

    JScrollPane scrollPane = new JScrollPane(errorText);
    scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scrollPane.setBorder(BorderFactory.createTitledBorder("Info Area"));
    ...

そして、errorText にテキストを追加するコード:

public void setText(String mes) {
    e140TEST2.errorText.append(lineNum + ".   " + mes + "\n");
    lineNum++;
}

いくつかの行を追加した後 (JTextArea よりもテキストの高さが高い場合)、JScrollPane が機能しません (テキストがスクロールしていません)。それは何ですか??

4

2 に答える 2

0

理想的なソリューションではありませんが、JTextArea インスタンスの代わりにJTextPaneインスタンスを使用すれば、適切なサイズをピクセル単位で設定し、スクロール機能を維持することができます。さらに、JTextPane は自動的に行を折り返し、単語の境界で折り返します (これが目的のようです)。次の SSCCE を試してください。

import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.ScrollPaneConstants;

public class PaneWithScroll {
    public static void main (String[] args) {
        JTextPane errorText = new JTextPane();
        //errorText.setLineWrap(true);       
        //errorText.setWrapStyleWord(true);         
        errorText.setPreferredSize(new Dimension(300, 150));

        JScrollPane scrollPane = new JScrollPane (errorText);
        scrollPane.setVerticalScrollBarPolicy 
                          (ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

        scrollPane.setBorder (BorderFactory.createTitledBorder("Info Area"));

        JFrame frame = new JFrame();
        frame.add (scrollPane);
        frame.pack();
        frame.setVisible (true);
    }
}

これは簡単なパッチとして機能する可能性があることを付け加えておきます。ただし、ベスト プラクティスでは、プラットフォームに依存する可能性のある仕様を GUI 設計から分離するよう常に試みる必要があります。この場合、絶対次元です。

それが役立つことを願っています!

于 2013-11-05T18:24:23.897 に答える