2
private JPanel contentPane;
public Driver() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 867, 502);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    final JTextArea textArea = new JTextArea();
    textArea.setEditable(false);
    textArea.setBounds(10, 11, 831, 393);
    JScrollPane scroll = new JScrollPane(textArea);
    scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    textArea.setText("dfgf");
    contentPane.add(scroll);
}

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Driver frame = new Driver();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

textAreaこれがスクロールバーで表示されないのはなぜですか?

私の問題は、textArea さえ表示されないことです。しかし、contentPane.add(scroll);代わりに行うと、textArea は表示されますが、スクロールは表示されません。

4

3 に答える 3

4

「スクロールバー付きのテキストエリアが表示されないのはなぜですか?」

スクロールペインのビューポートには独自のレイアウト マネージャーがあり、必要に応じてテキスト領域内の位置を変更しているためです。

ビューポートは、テキスト領域の優先サイズ プロパティを使用してレイアウト方法を決定します。テキスト領域にテキストを追加したり、必要に応じて行/列のプロパティを設定したりすることで、この値を有効にすることができます。

例で更新

ここに画像の説明を入力

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestScrollPane03 {

    public static void main(String[] args) {
        new TestScrollPane03();
    }

    public TestScrollPane03() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }
            
                JTextArea textArea = new JTextArea(100, 50);
                JScrollPane scrollPane = new JScrollPane(textArea);
            
                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(scrollPane);
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }    
}

質問への変更に基づいて更新

camickr がすでに指摘しているように、あなたが抱えている問題は、コンポーネントのレイアウト方法に関連しています。

これcontentPane.setLayout(null);は、多くの問題の 1 つにすぎません。レイアウトの使用をやめ、null適切なレイアウト マネージャーの使用を開始します。

于 2013-03-16T20:43:08.563 に答える
2

スクロールバーでテキストエリアが表示されない理由

スクロールバーは実際には表示されますが、ビューポートJTextAreaのサイズを超えてサイズを拡張するのに十分なテキストを to に追加するまで、「サム グリップ」は表示されません。JScrollPane

nullのレイアウトを使用していますcontentPane JPanel。これは決して良い考えではありません。ここでJScrollPaneは、デフォルトのサイズが である0 x 0ため、表示されません。さまざまなサイズと配置の要件に対応できるレイアウト マネージャーが多数あります。

于 2013-03-16T20:42:14.443 に答える
2

スクロールペインに追加されたコンポーネントの優先サイズがスクロールペインのサイズよりも大きい場合、スクロールバーが自動的に表示されます。これを自動的に行うには、レイアウトマネージャーを使用する必要があります

final JTextArea textArea = new JTextArea();
textArea.setBounds(10, 11, 831, 393);
JScrollPane scroll = new JScrollPane(textArea);

setBounds() を使用しないでください。代わりに、次のようにします。

final JTextArea textArea = new JTextArea(5, 30);
JScrollPane scroll = new JScrollPane(textArea);

5 行以上のテキストを読み込むと、スクロールバーが表示されます。もちろん、これはすべて、適切なレイアウト管理者を使用していることを前提としています。

于 2013-03-16T20:45:12.753 に答える