java—当jtextfield的大小超过其预定义的大小时,不会出现滚动条

ruarlubt  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(403)

我试图使用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"); 当我这样做时,滚动条出现时,我键入了很多字符
我的代码怎么了?为什么即使字符数量超过一定数量,滚动条也不会出现?

j8ag8udp

j8ag8udp1#

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不起作用,因为它需要对您的内容进行换行),并且文本总是溢出字段长度,而不调整其自身大小(不进行换行)。您应该使用jtextfield和jscrollbar以及y轴的boxlayout使内容垂直堆叠,或者使用jtextarea和jscrollpane代替。

相关问题