CardLayout 中的可滚动 JPanel?

2024-03-21

我一直在寻找一种方法来添加垂直滚动条JPanel依次添加到CardLayout控制板。我查找了这里所有与实现可滚动相关的帖子JPanel但我不知道如何用这个特定的方法来实现它CardLayout。 Oracle 也没有给出我可以使用的示例。

也许我没有使用正确的配置JWindow或我使用的任何其他组件。

我在下面放置了我的程序的精简版本,我想为其实现垂直滚动条。

我的问题是如何实施JPanelScrollable类位于代码底部,以便它可以滚动?

import javax.swing.*;

import java.awt.*;

import java.net.URL ;


public class Program2 extends JFrame
{
    public Program2()
    {
        super("Flash CC");
        Container2 container = new Container2();
        setSize(700, 800);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setFocusable( true ) ;
        add(container);

        setVisible(true) ; 
    }


    public static void main(String[] args)
    {
        Program2 prog = new Program2();
    }
}

class Container2 extends JPanel
{
    private CardLayout          cardLayout   = new CardLayout() ;
    private JPanel1             jPanelFirst  = new JPanel1() ;
    private JPanel2             jPanelSecond = new JPanel2() ;
    private JPanelScrollable    jPanelThird  = new JPanelScrollable() ;

    //Constructor
    Container2()
    {
        this.setLayout( cardLayout )   ;
        this.setFocusable( true ) ;

        JScrollPane scrollFrame = new JScrollPane(jPanelThird);

        this.add( jPanelFirst,  "first card" )  ;
        this.add( jPanelSecond, "second card" ) ;
        this.add( scrollFrame , "third card" ) ;

        cardLayout.show( this, "third card" ) ;
    }
}

class JPanel1 extends JPanel
{

}

class JPanel2 extends JPanel
{

}

class JPanelScrollable extends JPanel
{
    // here many, many, many elemnts will go 
    // and a vertical scroll barr is needed to   view'm all.
    JPanelScrollable()
    {
        this.setOpaque( true ) ;
        this.setLayout( null ) ;
        for(int i=0; i<30; i++)
        {
            JButton b = new JButton("Button" + i) ;
            b.setBounds(0, (i * 100), 100, 50) ;
            this.add(b) ;
        }

    }
}

将面板添加到 JScrollPane

JScrollPane scrollPane = new JScrollPane(jPanelThird);

将滚动窗格添加到 CardLayout

this.add(scrollPane, "third card");

See 如何使用滚动窗格 http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html更多细节

更新了工作示例

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class TestCardLayout {

    public static void main(String[] args) {
        new TestCardLayout();
    }

    private int index = 0;

    public TestCardLayout() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                final CardLayout cl = new CardLayout();
                final JPanel cardPane = new JPanel(cl);
                cardPane.add(new JLabel("Hello"), "1");
                cardPane.add(new JScrollPane(createForm()), "2");

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(cardPane);
                frame.setSize(200, 200);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

                JButton next = new JButton("Next");
                next.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        index++;
                        if (index > 1) {
                            index = 0;
                        }
                        if (index == 0) {
                            cl.show(cardPane, "1");
                        } else { 
                            cl.show(cardPane, "2");
                        }
                    }
                });
                frame.add(next, BorderLayout.SOUTH);
            }

        });
    }

    public JPanel createForm() {
        JPanel form = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridwidth = GridBagConstraints.REMAINDER;
        for (int index = 0; index < 100; index++) {
            form.add(new JTextField(10), gbc);
        }
        return form;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CardLayout 中的可滚动 JPanel? 的相关文章

  • 在 Java 1.7.0 下运行的 SQL-Server (MSSQL-JDBC 3.0) 中的日期列检索为过去 2 天

    当使用 SQLServer2008 从 SQLServer2008 检索 DATE 类型的列时 出现奇怪的效果在官方 Oracle JDK 1 7 0 下运行时 主机操作系统是Windows Server 2003 所有日期列均检索为two
  • 为什么源码中的根包叫“com”? [复制]

    这个问题在这里已经有答案了 在大多数源代码中 根包 文件夹被命名为 com 为什么会这样 它只是约定俗成还是代表着什么 The 习俗 http download oracle com javase tutorial java package
  • 从字符串编译Java源代码? [复制]

    这个问题在这里已经有答案了 有没有办法让正在运行的Java程序编译Java源代码 作为字符串传递 Class newClass Compiler compile class ABC void xyz etc etc 理想情况下 传入源代码引
  • Spring 3、Jersey (JSR-311) 和 Maven 依赖项

    我目前正在努力集成基于 Jersey 和 Spring 的 REST 服务 我正在使用 Spring 3 0 2 RELEASE 和 jersey spring 1 2 但是 jersey spring 在我的项目中添加了对 Spring
  • 改变 H2 中的序列

    我在生产中使用 Postgres 数据库 在测试中使用 H2 我想为现有表创建一个新序列 所以在 Liquibase 中我写了这个
  • Jackson @JsonRawValue 获取地图的值

    我有以下 Java bean 类 使用 Jackson 将其转换为 JSON public class Thing public String name JsonRawValue public Map content new HashMap
  • Apache Poi 无法读取工作表名称

    我们在通过 Apache Poi 读取 Excel 工作表时遇到了一个奇怪的错误 我们使用的是5 0版本 该代码以前可以工作 但现在已停止在我们所有的生产环境中工作 它在本地测试时仍然有效 因此事实证明这很难调试 问题是我们返回了空工作表名
  • 将密钥添加到选定的密钥集中

    我正在编写一个 NIO 服务器 并希望响应用户请求 即将一些数据写入通道 Selector selector if selector selectNow 0 if key isReadable SocketChannel channel k
  • Java 方法存根

    这就是我必须做的 为下面的 main 调用的方法定义存根 每个存根应打印 FIXME Finish methodName 后跟换行符 并应返回 1 输出示例 FIXME Finish getUserNum FIXME Finish getU
  • 我应该使用 Facelets“jsfc”属性吗?

    Facelets 使用jsfc属性将 HTML 元素转换为其关联的JSF成分 这对于快速原型设计非常有帮助 因为它允许您使用可视化设计工具创建视图 然而我最近发现this http weblogs java net blog 2008 12
  • Wicket setResponsePage() 方法如何工作?

    在学习 JSP 和 servlet 时 我听说了重定向和调度 他们中的哪一个做 Wicket 的setResponsePage 履行 What setResponsePage确实取决于几个因素 您调用 setResponsePage 的次数
  • 根据使用频率随机生成字母?

    如何根据常用语音中的使用频率随机生成字母 任何伪代码都值得赞赏 但如果用 Java 实现就更棒了 否则 只需朝正确的方向戳一下就会有所帮助 注意 我不需要生成使用频率 我确信我可以很容易地查找到它 我假设您将频率存储为 0 到 1 之间的浮
  • 单击 libGDX 中的 Actor

    我的游戏中有一个覆盖层 其中包含屏幕图像和屏幕 上 的一组按钮 截屏 My Screen有一个Stage The Stage有一组Group对象 我将其视为图层 第一组具有背景 中间的组具有游戏元素 最前面的组具有屏幕覆盖 覆盖层由一个Im
  • Dao 和服务接口的需求

    我是Spring Mvc的新手 在很多教程中 我发现有一个像这样的Dao接口 public interface StudentDAO public List
  • 在 Apache POI 4.0 中为 XSSFWorkbook 创建自定义颜色样式

    要在 Apache POI 3 7 及更低版本中为 XSSFWorkbook 应用自定义颜色 可以执行以下操作 java awt Color c new java awt Color 1 2 3 XSSFCellStyle xcs xssf
  • java 对字母数字字符串进行排序

    我有这个数组存储用户添加的一些 URL 的后缀 U2 U3 U1 U5 U8 U4 U7 U6 当我这样做时 for Map
  • Java 泛型和数字

    为了看看我是否可以清理一些数学代码 主要是矩阵代码 我尝试使用一些 Java 泛型 我有以下方法 private
  • 在idea ide中出现钻石运算符的编译错误

    我在尝试在idea ide中编译一些简单的源代码时收到此错误 java diamond operator is not supported in source 1 6 use source 7 or higher to enable dia
  • 自定义 lint 规则,确保不调用特定方法

    我想确保在我的 Android 应用程序 Java 和 Kotlin 代码中 中不会调用特定类的特定方法 假设 我有一个名为Bar有两种方法 allowed and disallowed 这是代码 package com public cl
  • 添加 2 个 BigDecimal 值 [重复]

    这个问题在这里已经有答案了 class Point BigDecimal x BigDecimal y Point double px double py x new BigDecimal px y new BigDecimal py vo

随机推荐

  • 使用命名空间两次

    在 C 中可以两次包含相同的名称空间吗 编译器不会给出任何错误 但无论如何它仍然会产生影响 Thanks EDIT I meant using namespace std STUFF using namespace std 这取决于您所说的
  • 在 Symfony 1.4.8 中显示图像时出错

    注意 很难决定这是否属于此处或 ServerFault 但这似乎是一个编程问题 因此如果它不合适 请随意迁移它 我下载了 Symfony 1 4 8 的沙箱并将文件复制到我的网络服务器 不幸的是 当我尝试访问时 symfony sf san
  • 如何使节点child_process连续执行

    How to exec连续地 例如ls after cd I tried exec require child process exec exec cd function exec ls function err stdout stderr
  • 安全页面上 iframe 中的不安全内容

    我正在为客户端开发一个应用程序 该应用程序将具有 SSL 证书并在 https 下提供服务 然而 为了与现有网站集成 他们希望在 iframe 内提供导航 我可以看到这会造成麻烦 因为我希望浏览器会抱怨页面上混合了安全和不安全的内容 我在这
  • array_combine 只返回最后一个值

    我有两个不同的array for foreach loop所以我决定将它们结合起来并运行到foreach loop在一起 但它只返回数组的最后一个值 数组1 FileType Array 0 gt image png 1 gt image
  • 依赖于失败的 Gradle 任务

    一个 Gradle 任务可以依赖于另一个任务的失败吗 例如 我有一个辅助任务 在浏览器中打开测试报告 我希望报告仅在任务 测试 失败时出现 而不是像现在一样在所有测试都通过时出现 task viewTestReport dependsOn
  • ShadowProperties 在创建之前由 foreach 访问

    我是实体框架新手 正在通过 Julie Lerman 的 Pluralsight 课程学习 ATM 我正在看第二课 实体框架核心 2 映射 https app pluralsight com library courses e f core
  • Python:解析 XML 文档同时保留实体

    我想问有哪些已知的现有 Python 2 x 库可用于使用内置 DTD 解析 XML 文档without自动扩展实体 对于那些好奇的人来说有问题的文件 JMdict ftp ftp monash edu au pub nihongo JMd
  • 将画布对象保存为 json

    我将如何序列化画布对象 如下所示 context beginPath context rect 188 50 200 100 context fillStyle yellow context fill context lineWidth 7
  • ConditionalAttribute 和其他特殊类

    The ConditionalAttribute可用于根据定义的编译器符号删除对标记方法的调用 我假设我们无法自己创建此类 因为编译器必须专门寻找它 我想知道编译器或语言使用的其他类是我们无法自己编写的 除了提到的那些之外 Attribut
  • puppeteer 通过启用 cookie 和 Javascript 绕过 cloudflare

    仅在 NodeJs gt 服务器端 我正在做一些网页抓取 一些页面受到 cloudflare anti ddos 页面的保护 我正在尝试绕过此页面 通过搜索 我发现了很多关于隐身方法或 reCapcha 的文章 但问题是 cloudflar
  • 如何从根 Angular 对象获取 $rootElement

    我的目标是找到任意 Angular 项目中的根元素 如果我所拥有的只是angular目的 这显然不太合规 所以一个破解的解决方案就可以了 我的第一个方法是find ng app 但这在引导应用程序上失败 我一直在尝试各种角度模块 但陷入了僵
  • MongoDB 如何查找哪个多边形包含指定点?

    我将许多多边形插入MongoDB 2 4 8 并希望找到指定点所在的多边形 这似乎是一个常见问题 但在阅读了谷歌的所有文档后 我没有得到结果 所以提出这个问题 e g db addr poly insert loc type Polygon
  • 我们可以在 标签内添加

    当我在锚标记内编写 html 代码时 我的 Dreamweaver 编辑器在锚标记中显示错误 不应该使用内部标签吗 编写 使用标签有什么规则吗 我正在使用 Html 5 这是我的代码 http jsfiddle net CfPnj http
  • 如何根据Json反序列化JArray数据创建DataTable?

    我有以下 JArray 数据 我需要根据 Jarray 中的列名动态创建一个数据表 然后我需要插入数据 你能帮我做这个手术吗 pre PID 3 FirstName parveen LastName a Gender male PID 8
  • 尝试升级到 1.22 时 MediaWiki DB 连接错误

    我在共享主机服务器上安装了 MediaWiki 它的版本是 1 19 1 我正在尝试更新到 1 22 2 文档表明一步更新应该可以解决此问题 我已经在过去的更新中成功完成了几次此操作 并且正在遵循以前的注释 我建立了一个新目录 其中包含1
  • 将 .keystore 转换为 .jks 以签署 apk

    我有一个 Android 应用程序 我试图使用 quixxi com 来保护它 但它要求我再次签署该应用程序 但要做到这一点 它必须使用 jks 文件 但我的密钥库是 keystore 我在 C 中使用 Xamarin Android 和
  • 想要隐藏 Jackson 映射到 JSON 的对象的某些字段

    我有一个 User 类 我想使用 Jackson 将其映射到 JSON public class User private String name private int age private int securityCode gette
  • 如何阻止链接在 Gmail 的集成迷你浏览器中打开

    在 Android 上 当用户使用 Gmail 打开邮件并单击邮件中包含的链接时 该 URL 会在某种 迷你浏览器 中打开 顶部有一个特殊的栏 就我而言 URL 是可移植 Web 应用程序 PWA 应在 Chrome 浏览器本身中打开 使用
  • CardLayout 中的可滚动 JPanel?

    我一直在寻找一种方法来添加垂直滚动条JPanel依次添加到CardLayout控制板 我查找了这里所有与实现可滚动相关的帖子JPanel但我不知道如何用这个特定的方法来实现它CardLayout Oracle 也没有给出我可以使用的示例 也