当前位置: 首页 > 知识库问答 >
问题:

Java swing Jlist创建

杜烨伟
2023-03-14

你好,我想在java swing中创建一个Jlist,但是我不知道在哪里可以显示它。到目前为止,我看到的所有教程都在一个新窗口中创建列表,这不是我想要的。我想使用一个工具或其他东西来给出我当前所在的框架的具体坐标和位置。我是java swing新手,所以我可能需要一些帮助。我使用windows builder pro作为eclipse的插件。有没有什么工具可以让我用来“画”出列表的显示位置?

Thx提前

我试过了,但是没用。

JPanel panel = new JPanel();
panel.setBounds(36, 109, 619, 202);
MainFrame.getContentPane().add(panel);

final JScrollPane scrollPane = new JScrollPane();
panel.add(scrollPane);


/*on a click listener of a button*/
    scrollPane.setLayout( new BorderLayout() );
                getContentPane().add( scrollPane );

                // Create some items to add to the list
                String  listData[] =
                {
                    "Item 1",
                    "Item 2",
                    "Item 3",
                    "Item 4"
                };
                JList listbox = new JList( listData );
                scrollPane.add( listbox, BorderLayout.CENTER );

但是当我运行程序时,我得到了如下错误:

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:JScrollPane的布局必须是javax.swing.JScrollPane中的ScrollPaneLayout。Main$3.mouseclick(Main.java:122)上的setLayout(未知源)位于java.awt.AWTEventMulticaster。在java.awt.Component上单击鼠标(未知源)。javax.swing.JComponent上的processMouseEvent(未知源)。java.awt.Component上的processMouseEvent(未知源)。java.awt.Container中的processEvent(未知源)。java.awt.Component上的processEvent(未知源)。dispatchEventImpl(未知源)位于java.awt.Container。dispatchEventImpl(未知源)位于java.awt.Component。dispatchEvent(未知源)位于java.awt.LightweightDispatcher。在java.awt.LightweightDispatcher上重新定位MouseEvent(未知源)。processMouseEvent(未知源)位于java.awt.LightweightDispatcher。java.awt.Container上的dispatchEvent(未知源)。dispatchEventImpl(未知源)位于java.awt.Window。dispatchEventImpl(未知源)位于java.awt.Component。java.awt.EventQueue上的dispatchEvent(未知源)。dispatchEventImpl(未知源)位于java.awt.EventQueue。访问java.awt.EventQueue中的$200(未知源)和java.awt.EventQueue中的$3.run(未知源),以及java.security.AccessController中的$3.run(未知源)。doPrivileged(本机方法)位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源),位于java.saurity.ProtectionDomain$1.dointersectionPrivate(未知来源),位于java.awt.EventQueue$4.run(未知源)位于java.awt.EventQueue$4.run(未知源)。doPrivileged(本机方法)位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)位于java.awt.EventQueue。dispatchEvent(未知源)位于java.awt.EventDispatchThread。pumpOneEventForFilters(未知源)位于java.awt.EventDispatchThread。pumpEventsForFilter(未知源)位于java.awt.EventDispatchThread。pumpEventsForHierarchy(未知源)位于java.awt.EventDispatchThread。pumpEvents(未知源)位于java.awt.EventDispatchThread。pumpEvents(未知源)位于java.awt.EventDispatchThread。运行(未知源)

共有1个答案

夏法
2023-03-14

你想要做的本质上是将一个组件(这里是由JScrollPane持有的JList - 相信我,你希望它在JScrollPane中)放入容器(通常是JPanel)中,并且有三种通用方法可以做到这一点:

  1. 给JPanel一个<code>null</code>布局,然后设置添加到其中的任何和所有组件的大小和位置,包括通过<code>setBounds(…)
  2. 使用GUI生成器以绝对方式为您放置组件,或在布局管理器的帮助下,或…
  3. 使用嵌套的JPanel创建GUI,每个JPanel都使用自己的布局管理器,以智能方式(取决于布局管理器)将包含JScrollPane的JList添加到其中一个JPanel,并让布局和组件首选大小设置所有适当的大小

在很短的时间内,第一条路径是最快和最简单的,但在中长期内,它有严重的问题,因为它会导致非常不灵活的GUI,虽然它们在一个平台上看起来很好,但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护。相反,您将需要学习和学习布局管理器,然后嵌套JPanels,每个都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦和复杂的GUI。

第二条路径将允许您创建快速简便的GUI,但是如果您还不熟悉 Swing 库并且相当熟练地使用布局管理器,那么如果您需要在以后修改代码,您可能会陷入困境,因为您将被严格地绑定到代码生成实用程序。不过,不要误会我的意思,如果你对Swing编码非常擅长,这是一个可行的解决方案,只要GUI构建器软件不会失效(过去已经发生过)。

在我看来,对你的问题最好的回答是学习如何使用布局管理器,然后使用它们。要学习它们,请看这里:布局管理教程。

编辑<br>关于您编辑的问题和您发布的代码:

  • 永远不要设置JScrollPane的布局,因为这会阻止JScrollPane运行。
  • 相反,一次又一次地将您的JList放在JScrollPane中(实际上是在它的视口中,但如果您将JList传递到JScrollPane的构造函数中,您将这样做)。
  • 然后使用适当的布局将JScrollPane添加到容器中,即JGroup。
  • 不要使用setBound(...)
  • 使用自己的布局嵌套您的JPanels,每个都包含其他组件和JPanels。
  • 通过pack()方法添加所有组件后打包您的GUI,然后在顶层窗口上调用setViable(true)

编辑2
您在评论中声明

你能给我提供一个简单的教程吗?我会马上编辑问题给你看问题

我说我做了。

我的意思是Jpanel而不是布局!

请理解,我们了解您的问题的唯一来源是您具体告诉我们的内容。您的问题中的相关信息越多,我们就越能理解它们,我们就越能提供帮助 这是一个很好的链接,可以让您进入最重要的Swing教程。您可以在与问题一起使用的 swing 标签中找到此链接:

  • 摇摆信息
 类似资料:
  • mkdir 可以创建新的目录,touch 可以创建空白的文件。 先进入到某个地方,比如当前登录用户的桌面上: cd ~ mkdir mkdir(make directory),可以创建新的目录。 mkdir 要创建的目录 练习:创建目录 创建一个名字是 awesome-project 的目录,执行: mkdir awesome-project 查看一下: ls 你会看到创建的目录 awes

  • 说明 支付宝境外到店支付-创建商户二维码 官方文档:https://global.alipay.com/service/merchant_QR_Code/15 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\Request 属性 名称 类型 说明 $service string 接口名称 $times

  • 请求地址 https://api.es.xiaojukeji.com/river/Approval/create 返回数据格式 JSON 请求类型 POST 请求参数 参数名称 数据类型 必选 说明 member_type int no 唯一标识类型(0-手机号,1-工号,2-邮箱,默认为0) client_id string yes 申请应用时分配的AppKey access_token str

  • 创建操作符 这些运算符几乎允许你基于任何东西来创建一个 observable 。从一般用例到特殊用例,你都可以做到, 并且鼓励将一切转换成流。 内容 create empty from :star: fromEvent fromPromise :star: interval of :star: range throw timer :star: - 常用 其他资源 从零开始创建 Observable

  • 下面包含一个本机查询,我需要在其中设置一个参数,但是由于没有设置参数,所以该查询是错误的 所以返回所有行。怎么了

  • 目录 可以创建多个 store 吗,应该这么做吗?能在组件中直接引用 store 并使用吗? 在 store enhancer 中可以存在多个 middleware 链吗? 在 middleware 方法中,next 和 dispatch 之间区别是什么? 怎样只订阅 state 的一部分变更?如何将分发的 action 作为订阅的一部分? 创建 Store 可以创建多个 store 吗,应该这么

  • 根据输入的不同,plot函数有不同的窗体。如果y是向量的形式,plot(y)则在y对应的轴上作出一个分段线状图。如果指定要求含两个向量时,则plot(x,y)作出一个y相对于x的图表。 例如:下面这些语句了用colon(冒号)算子来创建一个定义值取从0到2的向量x,计算出这些值的正弦函数值,然后画出结果。 x = 0:pi/100:2*pi; y = sin(x); plot(x,y) 现在给轴

  • 本文向大家介绍neo4j 创建,包括了neo4j 创建的使用技巧和注意事项,需要的朋友参考一下 示例 创建一个节点 建立关系 查询模板 在浏览器GUI(默认值:http:// localhost:7474 / browser /)中本地运行neo4j,可以运行以下命令来获取查询选项板。 :play query template 这可以帮助您开始通过键入查询来创建和合并节点和关系。