使用 JScrollPane 和 JLayeredPane 进行 Swing GUI 设计

2024-05-07

我想要一个如下图所示的 GUI 设置。

The JLayeredPane应始终具有相同的大小,但是JPanelJScrollPane可以改变尺寸。我需要JScrollPane能够显示JLayedPane通过单击箭头,如果JPanel and JScrollPane不够大,无法显示整个JLayeredPane.

问题是,对于下面的代码,JLayeredPane总是扩展以适应大小JScrollPane并且如果JScrollPane小于JLayeredPane,它不提供滚动功能。

对发生的事情有什么想法吗?有没有更简单的代码来实现这一点?

Thanks


contentPanePanel = new javax.swing.JPanel();
contentPaneScollPane = new javax.swing.JScrollPane();
contentPane = new javax.swing.JLayeredPane();

contentPanePanel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 1, true));

contentPane.setRequestFocusEnabled(false);
contentPane.setVerifyInputWhenFocusTarget(false);

contentPaneScollPane.setViewportView(contentPane);

javax.swing.GroupLayout contentPanePanelLayout = new javax.swing.GroupLayout(contentPanePanel);

contentPanePanel.setLayout(contentPanePanelLayout);

contentPanePanelLayout.setHorizontalGroup(
    contentPanePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(contentPaneScollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 968, Short.MAX_VALUE)
);
contentPanePanelLayout.setVerticalGroup(
    contentPanePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addComponent(contentPaneScollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 628, Short.MAX_VALUE)
);

是的,诀窍是将分层窗格添加到使用布局管理器的面板中,这将使分层窗格保持居中。就像是:

import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;

public class ScrollPaneSSCCE
{
    private static void createAndShowUI()
    {
        JPanel center = new JPanel();
        center.setPreferredSize( new Dimension(300, 300) );
        center.setBackground( Color.RED );

        JPanel main = new JPanel( new GridBagLayout() );
        main.add(center, new GridBagConstraints());

        JFrame frame = new JFrame("Basic ScrollPaneSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new JScrollPane( main ) );
        frame.setSize(400, 400);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JScrollPane 和 JLayeredPane 进行 Swing GUI 设计 的相关文章

随机推荐

  • C# 访问冲突异常

    这是我的代码抛出异常 它今天随机开始 这是照片 这是整个页面代码和错误异常 public frmWFDocumentDetail InitializeComponent NavigationInTransition navigateInTr
  • 如何查找依赖于Python中特定模块的模块列表

    为了减少基于 Python 的 Web 应用程序的开发时间 我尝试对我最近修改的模块使用 reload reload 通过一个专用网页 Web 应用程序的开发版本的一部分 进行 该网页列出了最近修改的模块 并且 py 文件的修改时间戳晚于相
  • 如何在 Android Studio 中立即获取 LivaData 的值?

    savedRecordFileName是一个变量LivaData
  • 默认启动器图标大小应该是多少

    我参考了文档http developer android com guide practices ui guidelines icon design html icon sets http developer android com gui
  • 自定义 OpenLayers 控件

    如何轻松自定义 OpenLayers 地图控件 或者至少 如何最小化控件的高度 谢谢 附言 有 CSS 覆盖吗 您可以对任何 openLayers 控件进行子类化 我刚刚通过对 PanZoomBar panZoomBar js 进行子类化
  • 如何为多个 Android 商店支持我的 Android 应用程序?

    我最近开始在 Google Android Market 上销售我的 Android 应用程序 并实施他们的应用程序许可方案以防止未经授权使用我的应用程序 我现在正计划将其发布到 Amazon Android 应用商店 并且想知道维护我的应
  • C# 资源文件中的 Tab 键切换

    如何向字符串资源添加制表符 t text 不起作用 您必须显式添加制表符 最简单的方法可能是在记事本中键入字符串 显式设置制表符而不是使用转义字符 并将文本复制并粘贴到资源编辑器中 对于换行符 您也会遇到类似的问题 添加换行符的最简单方法是
  • 如何在ios中重置触摸、触摸移动的NSTimer

    我正在开发一个应用程序 其中我必须在 3 秒后隐藏控制按钮 所以我使用 NSTimer 编写代码 然后开始触摸 它可以工作 但问题是 当我再次触摸任何其他按钮时 我的计时器不会重置 即使我像拖动一样移动我的触摸示例 如果我拖动或移动触摸 它
  • 更改 RMarkdown 中的块背景颜色

    我希望某个代码块以不同的颜色 例如红色 突出显示 以表明这是不好的做法 如果我使用的是 Rnw 我可以添加块选项background red 并得到我想要的 但这似乎不起作用 Rmd 我的猜测是 我需要制作一个自定义 css 样式表 尽管我
  • 使用 javascript/jQuery 更改类的背景颜色属性

    这似乎是一个简单的问题 但没有任何解决办法 我正在尝试使用 javascript jQuery 动态更改某些文本的背景颜色 从白色或粉色到绿色 但由于某种原因它不起作用 文本使用名为 novice 的 CSS 类进行样式设置 这是CSS 这
  • 如何将 ng-repeat 与图像映射区域标签一起使用?

    我正在尝试使用 AngularJS 创建可点击的汽车配置文件 一旦我将区域标签属性移动到 auto parts json 并将它们与 ng repeat 中的适当属性绑定 那么它就无法工作 如何修复它 请在全页预览中测试元素 var app
  • 在设计电子邮件主题中添加动态价值

    好吧 我看过很多关于自定义设计电子邮件主题的讨论 但似乎没有一个能解决我想要的问题 目前我的确认电子邮件主题为 确认您的 Qitch com 帐户 我想自定义此电子邮件主题并在其中添加用户名的动态值 这样如果用户ALEX注册一个帐户 他应该
  • Opencv matchTemplate 和 np.where():仅保留唯一值

    继带有马里奥硬币的 opencv 教程 https opencv python tutroals readthedocs io en latest py tutorials py imgproc py template matching p
  • 配置Apache将SSL客户端证书发送到后端服务器

    我想配置 Apache 以便它接收客户端证书 并将其传递到另一台服务器 我在用着 Windows 上的 Apache 2 0 65 后端服务器是基于 apache 的解决方案 IBM HTTP Server 我尝试了这个配置
  • 使用 Bloomberg .Net API 的每小时数据

    我正在努力解决使用 Net API 3 0 从 Bloomberg 获取每小时开盘价 最高价 最低价和最后价格快照的逻辑 我已经用谷歌搜索了很多次 但没有运气 对此的任何帮助将不胜感激 我试图在 Bloomberg Net API C 中找
  • Google 测试中没有模拟的 EXPECT_CALL

    有没有办法通过 GoogleTest for c 测试函数调用而不创建模拟对象 例如我们有以下生产代码 if a method x 我想测试一下是否method在这种情况下将被调用a是真的并且a是假的 我想构建一个与 Google Test
  • 启动应用程序时,“npm start”和“node app.js”之间的区别?

    我已经使用命令安装了一个应用程序express new filename 我刚刚了解到您可以使用以下方式启动应用程序 npm start 到目前为止我已经使用过 node app js 启动我的服务器 有人知道两者有什么区别吗 谢谢 来自m
  • Highcharts 工具提示裁剪

    我正在使用高图表 但遇到了较大的工具提示在 SVG 外部元素处被裁剪的问题 如下图所示 选项useHTML工具提示和 xAxis 设置为 true 因为我正在应用一些自定义 CSS 这些元素 有没有办法让工具提示不被裁剪 我的 highch
  • AngularJS 货币过滤器:如果金额中没有美分,我可以删除 .00 吗?

    我正在关注这个 http docs angularjs org api ng filter currency http docs angularjs org api ng filter currency当我在字段中输入 1234 56 时
  • 使用 JScrollPane 和 JLayeredPane 进行 Swing GUI 设计

    我想要一个如下图所示的 GUI 设置 The JLayeredPane应始终具有相同的大小 但是JPanel和JScrollPane可以改变尺寸 我需要JScrollPane能够显示JLayedPane通过单击箭头 如果JPanel and