【问题标题】:Java : Why doesn't this scrollpane scroll?Java:为什么这个滚动窗格不滚动?
【发布时间】:2012-05-22 08:20:26
【问题描述】:

我有这个类作为我的问题的一个例子。滚动窗格不滚动,我看不出一个很好的理由:

    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

【问题讨论】:

    标签: java swing jscrollpane


    【解决方案1】:

    我在这里设置的问题是我调用的是messageArea.setPreferredSize() 而不是scroller.setPreferredSize()。一旦我取消了 messageArea 的调整方法调用并将它们添加到滚动条,滚动条就可见了。我不确定为什么会这样,但如果我弄清楚了,我会更新这个答案。如果有其他人知道,我们将不胜感激。

    【讨论】:

    • 这不是解决方案。看我的回答。
    【解决方案2】:

    我在这里设置的问题是我调用的是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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2019-11-14
      • 2019-08-10
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多