如何在仅垂直滚动窗格中布局组件?

2024-01-07

我有一个复杂的问题,我无法在任何地方找到答案。

这是一个例子:

public static void main(final String[] args) {
    final JFrame frame = new JFrame("test");
    final JPanel bigPane = new JPanel(new GridLayout(0, 1));
    frame.setContentPane(new JScrollPane(bigPane, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
            ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
    bigPane.add(new JTextField("reterterter ertertrert erterter ert"));
    bigPane.add(new JTextField(" ertertrert erterter ert"));
    bigPane.add(new JTextField("reterterter ertertrert  ert"));
    bigPane.add(new JTextField("reterterter ertertrert erterter "));
    frame.pack();
    frame.setSize(frame.getSize().width/2, frame.getSize().height);
    frame.setVisible(true);
}

在这里,文本字段显然被剪切了。更准确地说,bigPane 被剪切。但我希望调整文本字段的大小而不是剪切文本字段,这样我们仍然可以使用它们。

由于禁止出现水平滚动条,我希望布局忘记视图(bigPane)的首选宽度,并始终强制视图的宽度与视口的宽度相匹配。就像水平方向没有虚拟视口,只有垂直方向一样。

我找不到解决方案,甚至没有破解,谢谢,如果你能提供帮助。

Nico.

PS:看起来 ViewportLayout 的代码不包含任何相关代码

PS2:这是上述代码结果的上限http://www.nraynaud.com/kilombo/testLayout.png http://www.nraynaud.com/kilombo/testLayout.png请参阅右侧。


我认为“正确”的方法是使用 Scrollable 接口:

public class ScrollPaneWidthTrackingPanel extends JPanel implements Scrollable {
    private static final long serialVersionUID = 1L;

    public ScrollPaneWidthTrackingPanel(LayoutManager layoutManager) {
        super(layoutManager);
    }

    public Dimension getPreferredScrollableViewportSize() {
        return getPreferredSize();
    }

    public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
        return Math.max(visibleRect.height * 9 / 10, 1);
    }

    public boolean getScrollableTracksViewportHeight() {
        return false;
    }

    public boolean getScrollableTracksViewportWidth() {
        return true;
    }

    public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
        return Math.max(visibleRect.height / 10, 1);
    }
}

然后你的两行代码必须更改为:

final ScrollPaneWidthTrackingPanel bigPane = new ScrollPaneWidthTrackingPanel(new GridLayout(0, 1));
frame.setContentPane(new JScrollPane(bigPane));

并且无论框架的大小如何,组件都应始终填充 JScrollPane 的整个宽度。此更改有一个副作用,即组件现在不会填充 JScrollPane 的高度。要解决此问题,请将以下代码添加到 getScrollableTracksViewportHeight 方法的顶部:

if (getParent() instanceof JViewport) {
    JViewport viewport = (JViewport) getParent();
    return component.getPreferredSize().height < viewport.getHeight();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在仅垂直滚动窗格中布局组件? 的相关文章

随机推荐

  • 错误:发送后无法设置标头。 - NodeJS 和 Express

    我有一个 NodeJS Rest API 其中有一个用户集合 此外我还进行用户短信验证 这是 POST 的控制器 id verification exports verification req res gt const id req pa
  • 在 MATLAB for Mac 中启用选项键快捷键

    自 R2009b 以来 MATLAB 通过其出色的可自定义键盘快捷键键盘快捷键首选项 http blogs mathworks com desktop 2009 09 28 configurable keyboard shortcuts h
  • 边框阴影问题

    我面临的问题是仅在多个 div 的左侧和右侧添加框阴影 我已经尝试过这个方法了 这是一 例子 http jsfiddle net Qq5tQ 我想要的 但它只适用于单个 div 并没有帮助我 我的代码有几个主要块 IE div div cl
  • 在 VS Code 中构建 SQL Server 项目

    我创建了一个 SQL Server 项目 sqlproj 在 Visual Studio 中并已将其加载到 VS Code 中 使用MS SQL 扩展 https github com microsoft vscode mssql 我可以连
  • JavaFX 应用程序中出现意外的 ArrayIndexOutOfBoundsException,未引用任何数组

    我有以下代码 public void setContent Importer3D importer if DEBUG System out println Initialization of Mesh s arrays coords imp
  • 如何在 iOS 中打开系统字体的高易读性替代?

    我想使用 Swift 3 1 在 UITextView 中激活 San Francisco 字体的高易读性替代样式集 我设法找到了一种在 UITextView 中激活高易读性替代项的解决方案 TextViewController swift
  • 序列化列表的好方法? - JavaScript/AJAX

    只是想问这个问题 因为 stackoverflow 上总是会出现珠宝 我所拥有的是以下列表 list1 command arg1 arg2 command2 arg1 您建议如何将其转换为字符串以便作为 ONE GET 参数传递 e g h
  • 在 Visual Studio 中,如何设置整个文件夹的构建操作?

    我在 Visual Studio 中有一个项目 我需要将一些第三方文件与我的代码一起部署 通常 我会将此文件放在 资源 目录中 并将每个文件的 生成操作 设置为 内容 将 复制到输出目录 设置为 如果较新则复制 无论如何 我可以在文件夹级别
  • Struts2:国际化 s:date?

  • Azure CosmosDB:文档 ID 中存在非法字符

    我遇到的问题是 基于某些输入生成的 ID 包含字符 这会导致更新插入操作期间出现错误 因为文档 ID 中不允许使用 除此之外还有哪些字符是不允许的 遇到这样的情况有什么方法可以处理呢 非法字符是 see https learn micros
  • 从异常中获取异常类型

    我有一个应用程序将 SAP 与 RFC 调用连接起来 并且在尝试与 SAP 建立 RFC 调用时 我需要在连接失败时向用户显示通知 我收到以下异常 SAP Middleware Connector RfcCommunicationExcep
  • Woocommerce API 获取所有产品

    我尝试从 API 获取带有一些参数的产品 我用了WooCommerce API Java 包装器 https github com icoderman wc api java 带有 OAuth 1 0 的 REST API 简单的 getA
  • Xcode 中的色调是什么?

    非常基本的问题 我找不到答案 Xcode 中的色调是什么 为什么所有视图的默认色调都是蓝色 它有什么影响 我注意到这些视图中某些图像的颜色看起来不太正确 除非我将色调设置为白色 并且仅仅因为我不明白它的作用而必须将每个新视图的色调设置为白色
  • Android Studio 3.6 中的 Gradle 同步失败导致无效类型代码:85

    我刚刚将 Android Studio 从版本 3 5 3 更新到 3 6 现在我打开任何项目 我都会看到此错误 并且 gradle 不同步 我也有同样的问题 我通过更改我使用的 JDK 版本 JDK 13 解决了这个问题 Go to 文件
  • dplyr 从any_vars()过滤条件创建新的布尔变量

    我想根据多个变量的条件创建一个布尔变量 如第二个答案所示这个问题 https stackoverflow com questions 28233561 finding rows containing a value or values in
  • Spring Integration Kafka 与 Spring Kafka

    我们正在尝试在工作者 Spring 应用程序和消费者 Spring 应用程序之间实现消息通道 同一消费者在多个 JVM 上会有副本 使用 Java 配置 Spring 集成的文档有限 我能够找到 Spring Kafka 的文档 我不太确定
  • P 与 NP 澄清

    引自维基百科 P vs NP 问题 关于算法的时间复杂度 询问是否每一个其解决方案可以被计算机快速验证的问题也可以被计算机快速解决 我希望有人能澄清 验证问题 和 解决问题 之间的区别 我希望有人能澄清 验证问题 和 解决问题 之间的区别
  • 从 gridview 对象获取父列表视图

    在 WPF 应用程序的代码隐藏中 我有一个包含 GridView 的变量 我确信这个 GridView 是 ListView 的视图 有什么方法可以获取 ListView 的引用吗 Thanks http www hardcodet net
  • 如何在 Apache httpd 中将特定 URL 路由到 http 和 https,将其他 URL 路由到 https

    我需要路由特定的网址 gapp via http and https和其他网址 例如 aapp bapp capp其余的通过https 我已成功将所有内容路由到 https 但无法路由 gapp到http 下面是我的配置
  • 如何在仅垂直滚动窗格中布局组件?

    我有一个复杂的问题 我无法在任何地方找到答案 这是一个例子 public static void main final String args final JFrame frame new JFrame test final JPanel