问题标签 [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.
java - 如何为 JComboBox 定义一个通用的“POJO”ListCellRenderer
如果我有一个 JComboBox,根据平台,它呈现单元格的方式会有所不同。我对它呈现字符串的方式很满意。我想要实现的是定义一个从 Pojos 映射到 Strings 的 ListCellRenderer,这样我就可以用任何对象填充 JComboBox,但显示除了 toString 方法的内容之外的其他内容。
我的最佳尝试(在运行时有效,但在编译时有警告)如下
然后可以按如下方式使用:
这种方法很好,因为这意味着我可以获得 ComboBox 的默认 ListCellRenderer 的所有突出显示/选择/等,但我可以使用 ComboBox 作为域对象的规范持有者,并且仍然可以很好地显示它们。
不利的一面是,上述内容显然不是类型安全的。
所以我的问题是:
- 这甚至是解决这个问题的明智方法吗(在我看来是这样)
- 我是否错过了 Swing 库中的一些明显的东西(因为这似乎是非常明显的功能)
- 任何人都可以建议如何保留上述功能,同时消除编译器警告(并使上述类型安全)
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呢?
java - JList 项目中的可变高度
我有一个JList
并且我添加了一个 as 的实例ListCellRenderer
作为 as 的单元格渲染JList
器
这myList
是JList
带有类型的列表模型String
。实施ListItemPanel
如下。
使用上面的代码,我期望在JList
. 但只有颜色变化正在发生。项目的高度list
似乎是18
在开始。当我更改18
为其他值时,项目的高度会更改为该值。但是选择项目时不会发生任何更改。
nameLabel
是一个JLabel
即上JPanel
。
我尝试重新验证和重新绘制list
,JPanel
和nameLabel
. setPreferredSize
并在JPanel
和中都使用了该方法JLabel
。
但是选择时没有任何东西改变项目的高度list
。希望有人可以提供帮助..!
编辑
我需要的是在选择时更改项目的高度。在这里,它讨论的是根据其中的文本更改每个项目的高度。但是在那里,添加文本后,高度是固定的。那不是我需要的。。
谢谢大家的关注。。
SSCCE 问题
回答问题
在setFixedCellHeight()
方法上,据说,
...通过应用 getPreferredSize ...在 ListUI 中计算单元格高度。
所以,如果值可以在里面改变ListUI
,我的任务是可能的..
这些值存储在一个变量中cellHeights
,正如我在源代码中看到的那样,该变量只更新一次。因此,我更改了我的代码,以便cellHeights
每次选择一个项目时都会更改。
SSCCE 的答案
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:
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:
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
方法;
java - JList中所选项目的背景颜色不起作用
为什么我选择的项目背景没有改变?我当然知道我按下列表项,因为我的 System.out.println 说我的当前选择并显示所选项目的 id。没有错误没有什么只是不工作。为什么 ?
java - 在 JComboBox 中更改选择的颜色(选择后)
我正在使用 Swing 编写 GUI。我有一个JComboBox
使用 aListCellRenderer
和 a编写的自定义BasicComboBoxEditor
。
在我的getListCellRendererComponent()
方法中,我根据项目是否“选中”(鼠标悬停在上方)来更改列表的颜色,这很好,但我不希望一旦做出选择就改变背景颜色,它目前正在执行。
第一张图片显示了选择前界面的外观,第二张展示了选择后的外观。
问题
如何将“选择”的背景更改为“stockColor”?
MCVE
编辑
我添加了一个 MCVE,如您所见,JComboBox 所关注的“问题”与我的问题有关。我在 ComboBox 旁边放置了一个按钮,以帮助从 ComboBox 中移除焦点。
简单地做 asetFocusable(false)
会修复它,但也会带走程序其余部分的一些功能,所以这是不希望的。
java - Java ListCellRenderer 和 JList:处理选择
我被一个必须在学校做的项目困住了。
我试图JList
为“简单”用户界面创建一个自定义:用例应该显示一个订单列表,用户应该能够选择一个并通过按下两个按钮(读取和完成)来设置是否读取/完成也作为“unsetters”(我在 Order 类中使用 2 个布尔值,它继续通过 t,f,t,f...)。按下完成后,所选行应变为绿色(并永久保持该颜色),直到再次按下该行上的“完成”按钮(=未设置)。与“读取”按钮相同,该按钮应将与 Order 类中的“is_read”标志相关的选定行永久变为黄色。
在阅读了一些相关的帖子后,我写了这个自定义ListCellRenderer
:
我的问题是,一旦运行我的测试文件,一切都会正确弹出,但是当我选择一行并按下这两个按钮中的一个时,在我选择一个新行之前什么都没有发生:然后一直变绿或变黄(取决于我按下的按钮) 我选择的行的颜色。
我很确定这是与我的自定义单元格渲染器相关的问题,也是因为我仍在学习如何使用它,我开始变得很困惑。
这是我与 UI 相关的其余相关代码,也许它很有用。按钮及其侦听器在一个单独的类(自定义JPanel
)中,但它们工作正常,所以......
类InitGraphics
(由我的测试类直接调用):
java - 自定义 JList 单元格渲染器 - 单元格选择?
再会。我对CellRenderer
这些东西还很陌生,而且我还在读很多关于它的东西。现在,我遇到了一些我不确定如何工作的事情。通过将其设置为自定义,我可以将其JPanel
放入我的内部。但这是一个百万美元的问题:我如何与控件交互?JList
CellRenderer
我的意思是,我希望能够右键单击包含 my 的单元格jPanel
,右键单击以显示一些操作,然后突出显示选定的行。
我怎样才能做到这一点?
这是我的代码:
第二部分: