Java 限制JScrollPane';s滚动范围

Java 限制JScrollPane';s滚动范围,java,swing,jscrollpane,jtextarea,jscrollbar,Java,Swing,Jscrollpane,Jtextarea,Jscrollbar,我有一个JTextArea包装在JScrollPane中,用于记录应用程序的输出。我使用默认的纯字体,文本区域的大小为9,滚动窗格的高度为48像素。这会导致滚动窗格视图中的行分布均匀,但存在一个问题:如果一直向上或向下滚动,则会发生以下情况: 如您所见,顶行被截断,这就是为什么我想知道是否有办法限制滚动窗格的滚动范围,使其无法达到顶部或底部6像素。也欢迎其他解决方案。您可以通过使用继承自JComponent的方法设置自定义边框来更改JTextArea的边距(上/下)。委员会建议如下: 虽然从技

我有一个
JTextArea
包装在
JScrollPane
中,用于记录应用程序的输出。我使用默认的纯字体,文本区域的大小为9,滚动窗格的高度为48像素。这会导致滚动窗格视图中的行分布均匀,但存在一个问题:如果一直向上或向下滚动,则会发生以下情况:


如您所见,顶行被截断,这就是为什么我想知道是否有办法限制滚动窗格的滚动范围,使其无法达到顶部或底部6像素。也欢迎其他解决方案。

您可以通过使用继承自
JComponent
的方法设置自定义边框来更改JTextArea的边距(上/下)。委员会建议如下:

虽然从技术上讲,您可以在任何 继承了JComponent,许多 标准Swing组件不能很好地与用户设置的边框配合使用。在里面 常规,当您要在标准Swing组件上设置边框时 除了JPanel或JLabel之外,我们建议您放置组件 在JPanel中,并在JPanel上设置边界

这将产生与限制滚动范围相同的结果,同时更直接

编辑:

OP报告说,以下解决方案对他有效:

textAreaLog.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6));

您可以通过使用继承自
JComponent
的方法设置自定义边框来更改JTextArea的边距(上/下)。委员会建议如下:

虽然从技术上讲,您可以在任何 继承了JComponent,许多 标准Swing组件不能很好地与用户设置的边框配合使用。在里面 常规,当您要在标准Swing组件上设置边框时 除了JPanel或JLabel之外,我们建议您放置组件 在JPanel中,并在JPanel上设置边界

这将产生与限制滚动范围相同的结果,同时更直接

编辑:

OP报告说,以下解决方案对他有效:

textAreaLog.setBorder(BorderFactory.createEmptyBorder(0, 6, 0, 6));


JTextArea
放在一个
JPanel
有空边框的地方,上面和下面的插入是6像素?

JTextArea
放在一个
JPanel
有空边框的地方,上面和下面的插入是6像素?

@StanislavL叫我Luke pewpew;)这就成功了-使用
textAreaLog.setboorder(BorderFactory.createEmptyByOrder(0,6,0,6))将顶部和底部插入设置为0工作起来很有魅力。谢谢你们两位@斯坦尼斯拉夫太粗鲁了。。在区域本身或包含父对象的区域上,边界大小始终为硬编码像素。除了开发环境(LAF、font、dpi…)@KonstantinĐ:我刚刚将您的解决方案添加到我的answer@kleopatra我最好使用JTextComponent的公共插图getMargin(),并使用上/下边距。让他们0@StanislavL叫我Lucky Luke pewpew;)这就成功了-使用
textAreaLog.setboorder(BorderFactory.createEmptyByOrder(0,6,0,6))将顶部和底部插入设置为0工作起来很有魅力。谢谢你们两位@斯坦尼斯拉夫太粗鲁了。。在区域本身或包含父对象的区域上,边界大小始终为硬编码像素。除了开发环境(LAF、font、dpi…)@KonstantinĐ:我刚刚将您的解决方案添加到我的answer@kleopatra我最好使用JTextComponent的公共插图getMargin(),并使用上/下边距。将他们设置为0怀疑你的布局有问题(从来没有想过“px”)@kleopatra为什么会这样?我的应用程序无法调整大小,因此使用硬编码的值而不是从JFrame的大小算出它们要容易得多。因为如果您使用合适的LayoutManager而不是硬编码,您(很可能只是猜测而没有看到任何代码)就不会出现问题:-)而且它会因微小的更改而中断(f.i.字体、LAF、屏幕分辨率…)请记住,我硬编码的不是组件位置,而是它们的尺寸。即使我使用了更合适的布局管理器(我使用的是普通的
FlowLayout
),组件大小和/或偏移也必须在某个地方定义。对于简单紧凑的应用程序(500×250)这无法调整大小,我权衡了硬编码组件的尺寸,知道这意味着什么。话虽如此,我很想听听你的想法:有没有更好/更简单的方法,我应该使用什么,我应该怎么做?怀疑你的布局有问题(永远不要想“px”)@kleopatra为什么会这样?我的应用程序无法调整大小,因此使用硬编码的值而不是从JFrame的大小算出它们要容易得多。因为如果使用合适的LayoutManager而不是硬编码,您(很可能只是猜测而没有看到任何代码)就不会出现问题:-)另外,它会因微小的变化而中断(f.i.字体、LAF、屏幕分辨率…),请记住,我硬编码的不是组件位置;这是他们的尺寸。即使我确实使用了一个更合适的布局管理器(我使用的是普通的
FlowLayout
),组件尺寸和/或偏移也必须在某个地方定义。对于一个无法调整大小的简单、紧凑的应用程序(500×250),我权衡了硬编码组件的尺寸,知道这需要什么。说到这里,我很想听听你的想法:有没有更好/更简单的方法,我应该用什么,我应该怎么做?