当 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。
我正在尝试使用 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。