问题描述
我正在制作一个简单的 GUI,它有一个 JTextArea,我可以在其中粘贴一个字符串。当字符串太长时,JTextArea 会填满,我可以看到文字低于我为文本区域设置的边界。我想在这个文本区域添加一个垂直滚动条。
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
添加到添加到sp
的panel
,您不需要将fileContents
添加到panel
。 - 使用
JScrollPane
时,您应该仅使用构造函数Component
而不是JScrollPane(Component view)
方法添加add()
。