问题标签 [listcellrenderer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
383 浏览

java - 如何为 JComboBox 定义一个通用的“POJO”ListCellRenderer

如果我有一个 JComboBox,根据平台,它呈现单元格的方式会有所不同。我对它呈现字符串的方式很满意。我想要实现的是定义一个从 Pojos 映射到 Strings 的 ListCellRenderer,这样我就可以用任何对象填充 JComboBox,但显示除了 toString 方法的内容之外的其他内容。

我的最佳尝试(在运行时有效,但在编译时有警告)如下

然后可以按如下方式使用:

这种方法很好,因为这意味着我可以获得 ComboBox 的默认 ListCellRenderer 的所有突出显示/选择/等,但我可以使用 ComboBox 作为域对象的规范持有者,并且仍然可以很好地显示它们。

不利的一面是,上述内容显然不是类型安全的。

所以我的问题是:

  1. 这甚至是解决这个问题的明智方法吗(在我看来是这样)
  2. 我是否错过了 Swing 库中的一些明显的东西(因为这似乎是非常明显的功能)
  3. 任何人都可以建议如何保留上述功能,同时消除编译器警告(并使上述类型安全)
0 投票
1 回答
498 浏览

java - 使用自定义 DefaultListCellRenderer 作为 DefaultCellEditor 的 JCombobox:返回字符串值而不是自定义对象

我有一个JTable实现AbstractTableModel. 模型包含自定义对象,这些对象在其字段之一中RequisitionItem也有一个对象。Section向表中插入新记录时,我添加了一个新行,其中新行RequisitionItem初始化为非空但为空值。对于Section列,我有表格和组合框的自定义渲染器,如下所示

对于桌子;

对于组合框;

对于编辑,我有以下内容;

但是在单击Section单元格后,选择Section组合框中的一项并按 Enter 键后,我得到了java.lang.ClassCastException: java.lang.String cannot be cast to ***.model.domain.Section. 那么为什么返回的DefaultCellEditor不是section对象而是String呢?

0 投票
0 回答
183 浏览

java - JList 项目中的可变高度

我有一个JList并且我添加了一个 as 的实例ListCellRenderer作为 as 的单元格渲染JList

myListJList带有类型的列表模型String。实施ListItemPanel如下。

使用上面的代码,我期望在JList. 但只有颜色变化正在发生。项目的高度list似乎是18在开始。当我更改18为其他值时,项目的高度会更改为该值。但是选择项目时不会发生任何更改。

nameLabel是一个JLabel即上JPanel

我尝试重新验证和重新绘制list,JPanelnameLabel. setPreferredSize并在JPanel和中都使用了该方法JLabel
但是选择时没有任何东西改变项目的高度list。希望有人可以提供帮助..!

编辑

我需要的是在选择时更改项目的高度。

这里,它讨论的是根据其中的文本更改每个项目的高度。但是在那里,添加文本后,高度是固定的。那不是我需要的。。
谢谢大家的关注。。

SSCCE 问题



回答问题

setFixedCellHeight()方法上,据说,

...通过应用 getPreferredSize ...在 ListUI 中计算单元格高度。

所以,如果值可以在里面改变ListUI,我的任务是可能的..

这些值存储在一个变量中cellHeights,正如我在源代码中看到的那样,该变量只更新一次。因此,我更改了我的代码,以便cellHeights每次选择一个项目时都会更改。

SSCCE 的答案

0 投票
1 回答
589 浏览

java - JCombobox list background color is overriding selected background item color

I have a JComboBox that displays multiple text colors per line. I can't render it using HTML because the combo will contain large values (causing text wrapping). Instead, I created a custom renderer which extends JPanel (then I'm adding different JLabels to that panel which have different foreground/background colors).

In order to display the colors correctly, for each label I have to change setOpaque to true. This overrides the selected item's background color at the top as well:

enter image description here

Is there any way to prevent this behavior? Changing the JPanel's color doesn't change top's background color, but apparently its children JLabels do?

Renderer:

To set part of the text to red, a simple tag is used:

0 投票
1 回答
372 浏览

java - 在 getListCellRendererComponent 中切换“isSelected”的覆盖方法

我想制作自己的方法来控制组件何时为“isSelected”。

我有一个JList包含多个JPanel. 的构造类JPanel extends ListCellRenderer<>

为了显示选择了一个 JList 组件(JPanels),我使用;

我想要一种方法,即使我选择选择另一个,也可以保持选定的项目“选中”。我知道这可以通过按住 CTRL 来完成,但.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);并不完全奏效。我宁愿通过单击它们来选择多个,并通过单击它们来取消选择。

为此,我使用了 ListSelectionMode,但我找不到方法。

完成上述操作后,我想实现一种方法,该方法仅在单击某个区域时选择列表中的一个组件(而不是预设的整个组件)。我已经制作了这个方法,如果单击正确的区域,则返回 true,否则返回 false。但是由于我不知道如何覆盖使组件“isSelected”的mouseevent,所以这很棘手。

这是我想覆盖“isSelected”方法的方法的代码;

这段代码在我的构造函数中JList

以及mouseClickedPrebuild方法;

0 投票
1 回答
1309 浏览

java - JList中所选项目的背景颜色不起作用

为什么我选择的项目背景没有改变?我当然知道我按下列表项,因为我的 System.out.println 说我的当前选择并显示所选项目的 id。没有错误没有什么只是不工作。为什么 ?

0 投票
2 回答
5739 浏览

java - 在 JComboBox 中更改选择的颜色(选择后)

我正在使用 Swing 编写 GUI。我有一个JComboBox使用 aListCellRenderer和 a编写的自定义BasicComboBoxEditor

在我的getListCellRendererComponent()方法中,我根据项目是否“选中”(鼠标悬停在上方)来更改列表的颜色,这很好,但我不希望一旦做出选择就改变背景颜色,它目前正在执行。

第一张图片显示了选择前界面的外观,第二张展示了选择后的外观。

在进行选择之前 选择完成后

问题

如何将“选择”的背景更改为“stockColor”?

MCVE

编辑

我添加了一个 MCVE,如您所见,JComboBox 所关注的“问题”与我的问题有关。我在 ComboBox 旁边放置了一个按钮,以帮助从 ComboBox 中移除焦点。

简单地做 asetFocusable(false)会修复它,但也会带走程序其余部分的一些功能,所以这是不希望的。

0 投票
1 回答
111 浏览

java - 自定义单元格渲染器可以定义像表单这样的对象的属性吗?

自定义单元格渲染器可以定义像表单这样的对象的属性吗?

我一直在寻找一种方法来定义 a 的元素JList以反映对象的当前状态,而不是简单地使用一串信息。即使用单选按钮、文本框和标签代替文本。以像模板一样的预格式化方式。

我需要在列表中显示的项目是轮班时间段,每个时间段代表开始和结束时间以及各种布尔属性。如果我可以使用组件来显示每个对象的状态,以便有人可以选择它,那就更好了。当它被选中时,编辑将在列表下完成,而不是在列表中。只是为了展示。

像这样的东西:

http://i.stack.imgur.com/3MoeQ.png

0 投票
1 回答
1306 浏览

java - Java ListCellRenderer 和 JList:处理选择

我被一个必须在学校做的项目困住了。

我试图JList为“简单”用户界面创建一个自定义:用例应该显示一个订单列表,用户应该能够选择一个并通过按下两个按钮(读取和完成)来设置是否读取/完成也作为“unsetters”(我在 Order 类中使用 2 个布尔值,它继续通过 t,f,t,f...)。按下完成后,所选行应变为绿色(并永久保持该颜色),直到再次按下该行上的“完成”按钮(=未设置)。与“读取”按钮相同,该按钮应将与 Order 类中的“is_read”标志相关的选定行永久变为黄色。

在阅读了一些相关的帖子后,我写了这个自定义ListCellRenderer

我的问题是,一旦运行我的测试文件,一切都会正确弹出,但是当我选择一行并按下这两个按钮中的一个时,在我选择一个新行之前什么都没有发生:然后一直变绿或变黄(取决于我按下的按钮) 我选择的行的颜色。

我很确定这是与我的自定义单元格渲染器相关的问题,也是因为我仍在学习如何使用它,我开始变得很困惑。

这是我与 UI 相关的其余相关代码,也许它很有用。按钮及其侦听器在一个单独的类(自定义JPanel)中,但它们工作正常,所以......

InitGraphics(由我的测试类直接调用):

0 投票
0 回答
1013 浏览

java - 自定义 JList 单元格渲染器 - 单元格选择?

再会。我对CellRenderer这些东西还很陌生,而且我还在读很多关于它的东西。现在,我遇到了一些我不确定如何工作的事情。通过将其设置为自定义,我可以将其JPanel放入我的内部。但这是一个百万美元的问题:我如何与控件交互?JListCellRenderer

我的意思是,我希望能够右键单击包含 my 的单元格jPanel,右键单击以显示一些操作,然后突出显示选定的行。

我怎样才能做到这一点?

这是我的代码:

第二部分: