Java JScrollPane和GridBagLayout

Java JScrollPane和GridBagLayout,java,swing,user-interface,layout-manager,gridbaglayout,Java,Swing,User Interface,Layout Manager,Gridbaglayout,我想创建两个不可编辑的文本框,每个文本框只包含一行固定大小的文本,但我希望它们可以水平滚动,因为我知道它们包含的文本将非常长。我希望它们位于我在下面定义的两个按钮下方,并且我希望每个文本框位于它们自己的行中 问题是,所有内容都显示出来,按钮按预期工作,但文本框不会滚动,尽管我可以通过某种方式拖动并选择框中其他不可见的文本。我不知道标签是否可以滚动,它们是更好的选择吗 代码: 永远不要使用setPreferredSize!这将覆盖JScrollPane需要的信息,以便决定如何滚动组件。有关更多详细

我想创建两个不可编辑的文本框,每个文本框只包含一行固定大小的文本,但我希望它们可以水平滚动,因为我知道它们包含的文本将非常长。我希望它们位于我在下面定义的两个按钮下方,并且我希望每个文本框位于它们自己的行中

问题是,所有内容都显示出来,按钮按预期工作,但文本框不会滚动,尽管我可以通过某种方式拖动并选择框中其他不可见的文本。我不知道标签是否可以滚动,它们是更好的选择吗

代码:

永远不要使用setPreferredSize!这将覆盖JScrollPane需要的信息,以便决定如何滚动组件。有关更多详细信息,请参阅。相反,使用JTextAreaint,int构造函数向JScrollPane提供提示,例如JTextArea master=new JTextArea1,20;。任何超过20个字符的文本都会导致JScrollPane显示水平滚动条。。。 不要将JTextArea和JScrollPane都添加到容器中。添加JTextArea会自动将其从JScrollPane中删除,这不是您想要的。 使用GridBagConstantsGridWidth控制组件可能展开的列数,以帮助修复布局。。。 例如

    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = GridBagConstraints.REMAINDER;
    win.add(mPane, c);

    c.gridx = 0;
    c.gridy = 2;
    win.add(vPane, c);

我希望这是一个非常简单的示例,如果不是,您应该始终确保您的UI是在EDT的上下文中创建和修改的。有关更多详细信息,请参见

永远不要使用setPreferredSize!非常感谢你!工作完全符合我的预期,感谢您明确说明JTextArea的构造函数是如何工作的,以及它如何与JScrollPane一起工作的,这篇文章本身让我有点困惑,哈哈。
    c.gridx = 0;
    c.gridy = 1;
    c.gridwidth = GridBagConstraints.REMAINDER;
    win.add(mPane, c);

    c.gridx = 0;
    c.gridy = 2;
    win.add(vPane, c);