Jlist 自定义渲染器

2024-05-26

我正在尝试添加一个我猜你会称其为列表中每个项目的子列表。我构建了一个自定义渲染器,它提供以下输出。正如你所看到的,有些东西不对劲,我没能找到问题的答案。我猜我需要更改面板布局中的某些内容才能获得正确的结果,但不知道是什么。

https://i.stack.imgur.com/jCKjJ.jpg https://i.stack.imgur.com/jCKjJ.jpg

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.Random;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.ListCellRenderer;
import javax.swing.border.EmptyBorder;

public class GAListRendererAdv extends Container implements ListCellRenderer {
private static final long serialVersionUID = 1L;
private JPanel pnl = new JPanel();
private Random rnd = new Random();

public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
        boolean cellHasFocus) {

    pnl.setLayout(new BorderLayout(0, 0));

    JCheckBox chckbxSomething = new JCheckBox("something");
    pnl.add(chckbxSomething, BorderLayout.NORTH);

    JSeparator separator = new JSeparator();
    pnl.add(separator, BorderLayout.CENTER);

    JPanel panel_1 = new JPanel();
    panel_1.setBorder(new EmptyBorder(0, 35, 0, 0));
    pnl.add(panel_1, BorderLayout.SOUTH);
    panel_1.setLayout(new GridLayout(0, 1, 0, 0));

    int rndNum = rnd.nextInt(5) + 1;

    for (int i = 0; i < rndNum; i ++) {
    JLabel lblNewLabel2 = new JLabel("New label");
    panel_1.add(lblNewLabel2);
    }

    return pnl;
}
}

首先,请记住,CellRenderers在 Swing 中用作“橡皮图章”。这样做是为了节省内存并帮助提高性能。这允许组件,例如JList,以维护对渲染器的单个引用,但仍绘制列表中的所有项目。

这意味着,无论何时getListCellRendererComponent被调用时,渲染器将处于与上次调用时相同的状态。

从我从你的代码中可以看出,这意味着每次调用渲染器时,你都会添加另一个复选框、另一个分隔符、另一个面板和更多标签......

其次,对于渲染器,尽量不要在渲染器中创建任何东西getListCellRendererComponent在可能的情况下,这只会增加您的内存使用量(您的部分代码可能没有选择)。

第三,JList不支持编辑器,渲染器不是编辑器,原因我之前已经说过。

第四。在将所有元素添加到其中之前,请尝试从面板的“主体”部分中删除内容。

// Don't use Container, use JPanel instead, mixing heavy and light weight components
// is never a good idea :P
public class GAListRendererAdv extends JPanel implements ListCellRenderer {
    private static final long serialVersionUID = 1L;
    private JPanel pnl = new JPanel();
    private Random rnd = new Random();

    private JCheckBox checkBox;

    public GAListRendererAdv() {

        setLayout(new BorderLayout(0, 0));            
        checkBox = new JCheckBox();

        add(checkBox, BorderLayout.NORTH);
        add(new JSeparator(), BorderLayout.CENTER);

        pnl = new JPanel(new GridLayout(0, 1, 0, 0));
        pnl.setBorder(new EmptyBorder(0, 35, 0, 0));

        add(pnl BorderLayout.SOUTH); // Don't forget to add the panel :P

    }

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {

        pnl.removeAll();
        int rndNum = rnd.nextInt(5) + 1;

        for (int i = 0; i < rndNum; i ++) {
            JLabel lblNewLabel2 = new JLabel("New label");
            pnl.add(lblNewLabel2);
        }

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

Jlist 自定义渲染器 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • 为什么 i++ 不是原子的?

    Why is i Java 中不是原子的 为了更深入地了解 Java 我尝试计算线程中循环的执行频率 所以我用了一个 private static int total 0 在主课中 我有两个线程 主题 1 打印System out prin
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • 为什么 mov %ax, %ds 汇编+反汇编为 mov %eax,%ds,与原来不一致?

    test S text global start start xor ax ax mov ax ds mov ax ss mov ax es mov ax fs mov ax gs 我通过这样做得到了反汇编代码文件 x86 64 elf g
  • 部分 ASP.NET MVC 视图提交

    我是 ASP NET MVC 的新手 所以这个问题可能显得 愚蠢 抱歉 我的主视图中有一个部分视图 部分视图提交一个表单 调用 HomeController 内的操作方法 它与服务器验证配合得很好 问题是在发布后仅呈现部分视图 发布后如何呈
  • 将现有的 auth.User 数据迁移到新的 Django 1.5 自定义用户模型?

    我不想毁掉我网站上的所有用户 但我想利用 Django 1 5 的自定义可插入用户模型 这是我的新用户模型 class SiteUser AbstractUser site models ForeignKey Site null True
  • (typeof variable === "function") 和 jQuery.isFunction() 有什么区别?

    我一直用 typeof variable function 我偶然发现jQuery isFunction 我想知道 jQuery方法中的typeof方法有什么区别 不仅有什么区别 而且 什么时候适合使用typeof方法 什么时候适合使用jQ
  • AWS Lambda SNS 发送主题两次

    TL DR 编写 lambda 函数来执行一些数据库查询 然后向某些用户组发送电子邮件 为共享歌曲的每个群组发布 SNS 消息 每个组都有自己的成员 因此有自己的一组电子邮件 每个组的 SNS 主题都会发送两次 会员收到该电子邮件两次 该应
  • Django 视图中的原始 SQL 查询

    我将如何使用原始 SQL 执行以下操作views py from app models import Picture def results request all Picture objects all yes Picture objec
  • Android 设备中未显示背景图片?

    我将以下代码添加到main xml将图像设置为我的应用程序的背景图像 android background drawable bg So main xml看起来像这样
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • MySQL中的字符串分割函数

    谁能告诉我如何在 mysql 中实现 split 函数 其行为类似于 Javascript split 我想要一个这样的功能 SELECT Split a b c d AS splitted 结果如下 splitted a b c d 有谁
  • 如何在欧洲使用 Cloud Dataflow 区域终端节点?

    是否可以将 Google Cloud Platform Dataflow 作业的区域更改为欧洲 我已将管道区域设置为europe west1 d但我无法更改工作本身的区域 我尝试更改管道选项中的区域 但这会导致错误 并且只有默认区域有效 p
  • Flutter sqflite 插入列表

    我正在尝试将列表插入到 flutter 中的 sql 数据库中 但我不知道该怎么做 有人可以帮助我吗 当我初始化 mi 数据库时 我有这个 Directory documentsDirectory await getApplicationD
  • 使用其他非依赖构造函数参数进行构造函数注入

    我是 IOC 容器的新手 我正在开始使用 NInject 如果您希望您的构造函数具有非服务且不需要由 IOC 容器实例化的参数 您该怎么办 例如 public class Person private readonly string nam
  • 如何在 C++ 中对四元结构进行有效排序?

    我有一个包含 x y z 和 w 成员的结构 如何高效排序 在 C 中首先按 x 然后按 y 按 z 最后按 w 如果你想实现字典排序 那么最简单的方法是使用std tie实现小于或大于比较运算符或函子 然后使用std sort http
  • java.lang.ClassCastException:类 org.springframework.web.servlet.DispatcherServlet 无法转换为类 jakarta.servlet.Servlet

    我已经看到了与我类似的问题的答案 但我已经尝试了一切 错误并没有消失 据我所知 api servlet 类是由两个不同的类加载器加载的 因为 Web 部署程序集中有多个源 我尝试使用 servlet api 3 0 alpha 1 jar
  • 为什么 import numpy 不会自动包含 matlib

    我正在尝试使用水平重复 numpy array xa numpy matlib repmat x 1 3 但是 直接输入此内容会导致错误 我必须添加import numpy matlib为了a numpy matlib repmat x 1
  • “@required”注释作为错误而不是警告

    现在在我的 Flutter 项目中 当我用注释构造函数参数时 required当实例化构造函数时忘记它 我从 IDE 收到一条轻微警告 表明该参数是必需的 我希望这在 IDE 中显示为实际错误 有办法进去吗analysis options
  • 根据不同的列数据范围隐藏行

    我对使用 VBA 相当陌生 我正在尝试创建一个代码 该代码将查看具有不同数据范围的两个不同列 并隐藏最后一个数据点之外的行 引用两列 目前我有这个 Private Sub Worksheet PivotTableUpdate ByVal T
  • 正则表达式 - Python - 删除前导空格

    我使用正则表达式在文本文件中搜索 产品 一词 然后 我使用该搜索的起点和终点来查看该列并提取整数 有些实例 A 列 有我不想要的前导空格 我只想将数字 如 B 列中的数字 打印到文件中 没有前导空格 正则表达式中的正则表达式 有条件的 pr
  • 以小并发批量运行 Promise(一次不超过 X)

    Async 库具有类似的功能每个限制 https github com caolan async eachLimit它可用于将大量作业有效地分布在多个 CPU 核心上 如下所示 var numCPUs require os cpus len
  • Jlist 自定义渲染器

    我正在尝试添加一个我猜你会称其为列表中每个项目的子列表 我构建了一个自定义渲染器 它提供以下输出 正如你所看到的 有些东西不对劲 我没能找到问题的答案 我猜我需要更改面板布局中的某些内容才能获得正确的结果 但不知道是什么 https i s