有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JTextArea与JPanel内部的JScrollPane不兼容

我一直在尝试制作一个JTextArea,我可以像在Word文档中一样在其中书写;当文本太宽时,它会环绕,当文本太高时,它会向下滚动)
到目前为止,如果包裹太宽,效果很好。但是,滚动条不工作。它确实出现了,但它不会再出现了,这意味着无论发生什么情况,都无法查看JTextArea原始维度之外的任何内容
有人知道我做错了什么吗?下面是代码的样子;它是名为panel的JPanel,我稍后将它添加到另一个JPanel中,而另一个JPanel又被添加到JFrame中

JTextArea text = new JTextArea(rows, columns);
text.setLineWrap(true);
text.setWrapStyleWord(true);
text.setPreferredSize(new Dimension(text.getWidth(), text.getHeight()));
JScrollPane scroll = new JScrollPane(text);
scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
panel.add(scroll);

共 (1) 个答案

  1. # 1 楼答案

    当我删除-text.setPreferredSize时,效果很好

    import java.awt.Dimension;
    import java.awt.HeadlessException;
    
    import javax.swing.BoxLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    import javax.swing.ScrollPaneConstants;
    
    public class ScrollTest extends JFrame {
    
        public ScrollTest() throws HeadlessException {
            JTextArea text = new JTextArea(5, 20);
            text.setLineWrap(true);
            text.setWrapStyleWord(true);
    //      text.setPreferredSize(new Dimension(text.getWidth(), text.getHeight()));
    
            JScrollPane scroll = new JScrollPane(text);
            scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    
            JPanel panel = new JPanel();
            panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
            panel.add(scroll);
    
            this.add(panel);
    
            this.setVisible(true);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
    
        public static void main(String[] args) {
            new ScrollTest();
        }
    }