0

私の問題の例としてこのクラスがあります。スクロールペインがスクロールしないので、次の理由がわかりません。

    import java.awt.Dimension;

import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;


public class DoesNotScroll{ 

    public static void main(String[] args){
        String str = "this\n\nshould\n\n\n\nscroll\n\n\nthis is the bottom";
        message("test", str, JOptionPane.INFORMATION_MESSAGE);
    }

    public final static void message(String title, String message, int messageType){
        JTextArea messageArea = new JTextArea();
        messageArea.setMinimumSize(new Dimension(300, 100));
        messageArea.setMaximumSize(new Dimension(300, 100));
        messageArea.setPreferredSize(new Dimension(300, 100));
        messageArea.setEditable(false);
        JScrollPane scroller = new JScrollPane(messageArea);
        scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        messageArea.setText(message);
        messageArea.revalidate();
        messageArea.repaint();
        JOptionPane.showMessageDialog(null, scroller, title, messageType);
    }
}

どんな助けでもありがたいです、

-C

4

2 に答える 2

4

ここでのセットアップの問題は、messageArea.setPreferredSize()代わりに電話をかけていたことでしたscroller.setPreferredSize()

この場合、どちらかを呼び出す必要がある場合は問題があることを示しています。コンストラクターで列/行のサイズを指定して、テキスト領域の「推奨サイズ」を設定します。スクロールペインを追加します。仕事は終わりました。

import javax.swing.*;

public class DoesScroll {

    public static void main(String[] args){
        String str = "this\n\nshould\n\n\n\nscroll\n\n\nthis is the bottom";
        message("test", str, JOptionPane.INFORMATION_MESSAGE);
    }

    public final static void message(String title, String message, int messageType){
        JTextArea messageArea = new JTextArea(3,20);
        messageArea.setEditable(false);
        JScrollPane scroller = new JScrollPane(messageArea,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
        messageArea.setText(message);
        JOptionPane.showMessageDialog(null, scroller, title, messageType);
    }
}
于 2012-05-14T20:29:48.133 に答える
3

ここでのセットアップの問題は、のmessageArea.setPreferredSize()代わりに呼び出していたということでしscroller.setPreferredSize()た。messageAreaからサイジングメソッドの呼び出しを取り除いてスクローラーに追加すると、スクロールバーが表示されました。なぜこれがそのように機能するのかはわかりませんが、理解できたら、この回答を更新します。他の誰かが知っているなら、ここにコメントをいただければ幸いです。

于 2012-05-14T20:22:57.393 に答える