当 JTextField 的大小超过其预定义大小时滚动条不出现

Scrollbar not appearing when size of JTextField goes over its predefined size

我正在尝试使用 JScrollPane 在 JTextField 中实现滚动条。

这是我的:

    import javax.swing.*;
    import java.awt.*;
    
    public class WordList extends JFrame {
        public static void main(String[] args) {
            WordList list = new WordList();
            list.buildFrame();
        }
        
        public void buildFrame() {
            JTextField wordField = new JTextField(20);
            JScrollPane wordScroll = new JScrollPane(wordField);
            wordScroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
            wordScroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
            wordScroll.setMaximumSize(wordScroll.getPreferredSize());
            
            this.getContentPane().add(wordScroll);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.pack();
            this.setVisible(true);
        }
    }

但是,当我 运行 程序的文本长度超过一定长度时,我看不到滚动条...

除非我这样做:

我把JTextField wordField = new JTextField(20);改成了JTextField wordField = new JTextField("ABCDEFG");

当我这样做时,当我输入很多字符时会出现滚动条

我的代码有什么问题?为什么超过一定字符数后滚动条不出现?

public class WordList extends JFrame {

    public static void main(String[] args) {
        WordList list = new WordList();
        list.buildFrame();
    }

    public void buildFrame() {

        JPanel contentPane = new JPanel();
        contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS));
        setContentPane(contentPane);

        JTextField wordField = new JTextField(20);

        JScrollBar wordScroll = new JScrollBar(JScrollBar.HORIZONTAL);
        wordScroll.setModel(wordField.getHorizontalVisibility());

        contentPane.add(wordField);
        contentPane.add(wordScroll);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

您的代码不起作用,因为整个内容窗格只是一个不支持自动换行的文本字段(因此 JScrollPane 不起作用的原因,因为它需要您的内容被换行)并且文本总是会溢出在不调整自身大小的情况下超出字段长度(未包装)。您应该使用带有 Y 轴的 BoxLayout 的 JTextField 和 JScrollBar 来使内容垂直堆叠,或者使用带有 JScrollPane 的 JTextArea。