Java 向JTextArea添加垂直滚动条
我正在制作一个简单的GUI,它有一个JTextArea,我可以在其中粘贴字符串。当字符串变得太长时,JTextArea将被填满,我可以看到单词低于我为文本区域设置的边界。我想在此文本区域添加一个垂直滚动条Java 向JTextArea添加垂直滚动条,java,swing,user-interface,jtextarea,Java,Swing,User Interface,Jtextarea,我正在制作一个简单的GUI,它有一个JTextArea,我可以在其中粘贴字符串。当字符串变得太长时,JTextArea将被填满,我可以看到单词低于我为文本区域设置的边界。我想在此文本区域添加一个垂直滚动条 public class GUI implements ActionListener { private static JTextArea fileContents; public static void main(String[] args) { JFrame
public class GUI implements ActionListener {
private static JTextArea fileContents;
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(700, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
panel.setLayout(null);
fileContents = new JTextArea();
fileContents.setBounds(175, 75, 275, 275);
panel.add(fileContents);
JScrollPane sp = new JScrollPane();
sp.add(fileContents, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
panel.add(sp);
当我进行此设置时,会出现错误
Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
at java.desktop/java.awt.Container.addImpl(Container.java:1111)
at java.desktop/java.awt.Container.add(Container.java:489)
at harness.GUI.main(HarnessGUI.java:60)
此代码适用于:
JFrame frame = new JFrame();
JPanel panel = new JPanel();
frame.setSize(700, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(panel);
frame.setVisible(true);
panel.setLayout(null);
fileContents = new JTextArea();
JScrollPane sp = new JScrollPane(fileContents);
sp.setBounds(175, 75, 300, 300);
panel.add(sp);
您有两个问题:
fileContents
添加到添加到panel
的sp
,则无需将fileContents
添加到panel
JScrollPane
时,应仅使用constractorJScrollPane(组件视图)
而不使用add()
方法添加组件
为什么要将文本区域同时添加到面板和滚动窗格?1)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作,在不同的地区使用不同的PLAF。因此,它们不利于像素完美布局。而是使用布局管理器,或与布局填充和边框一起使用。请注意,不使用布局管理器通常会停止滚动窗格的功能。2) 为了更快地获得更好的帮助,请添加一个或。。。。3) 看。如果您了解堆栈跟踪的工作原理,您就会意识到末尾的数字表示源代码中的行号。代码片段会更改行号,这意味着我们无法充分利用它们。4) @daniu说得很对。不要将组件单独添加到滚动窗格和GUI中。任何GUI组件/容器只能有一个父级。它应该是滚动窗格。另外,不要将内容添加到滚动窗格中,而是添加到其视口中。请参阅:。
TextDemo
是一个使用JTextField和JTextArea的工作示例。您得到的是IllegalArgumentException
,因为以下代码行与您认为的不同:sp.add(fileContents,JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS)代码>引用类java.awt.Container中的方法
您还可以在JScrollPane
构造函数中提供垂直滚动条
策略。像这样JScrollPane sp=newjscrollpane(fileContents,JScrollPane.VERTICAL\u SCROLLBAR\u总是,JScrollPane.HORIZONTAL\u SCROLLBAR\u根据需要)