Tag: listcellrenderer

调用getListCellRendererComponent多少次?

我试图理解getListCellRendererComponent方法是如何工作的,但我不明白。 我创建了一个扩展BasicComboBoxRenderer的独立类,我添加了一个计数器,每次调用getListCellRendererComponent时都会打印一个。 然后我运行一个带有main方法的测试类,该方法显示一个框架,其中只有一个使用我的自定义渲染器类的JComboBox。 这个combobox共有3个项目,我设置了setMaximumRowCount(2),因此它只显示其中的2个。 当我第一次运行程序并出现带有combobox的帧时,计数器会通知getListCellRendererComponent被调用6次。 当框架失去焦点时(例如,当我点击我的桌面时),该方法执行1次。 当帧重新获得焦点时(单击我的帧),该方法执行1次。 当我单击箭头按钮并且第一次出现下拉列表时,计数器表示该方法执行了8次。 当我再次单击箭头按钮并且列表消失时,该方法被调用一次(这总是发生)。 当我第一次点击箭头按钮后,该方法被调用5次。 当我单击滚动条按钮上下移动时,该方法执行1次。 当我将光标移动到列表中未选择的项目上时,该方法执行2次,然后再执行1次(这是最荒谬的) 当我单击列表中的项目时,该方法执行4次。 起初我认为这个方法将被执行的次数与列表中的项目数量相同(再加上combobox显示区域中显示的一个项目)。 但是我只能理解上面的一两种情况,例如当我单击滚动条按钮并且该方法执行一次时,可能是因为渲染了一个新项目。 其余的人似乎疯了……

将ListCellRenderer应用于JList上的各个单元格

是否可以将listcellrenderer应用于listcellrenderer中的纯listcellrenderer单元格? 我的代码目前在应用渲染器时工作正常,但我想为每个条目设置不同的动态变量。 抱歉,如果这有点模糊.. 总结一下 – 我想将listcellrenderer只应用于列表中的一个单元格,我该怎么做?

在hover时更改JList项目背景颜色

我正在尝试更改JList单元格的背景颜色,但是我不知道该怎么做。 这是我目前拥有的: package cats.youtube.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.util.LinkedList; import javax.swing.AbstractListModel; import javax.swing.DefaultListCellRenderer; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ListSelectionModel; import javax.swing.border.EmptyBorder; import cats.youtube.search.YoutubeSearchResult; public class SearchResultsList extends JPanel{ private class Renderer extends DefaultListCellRenderer{ public Component getListCellRendererComponent(JList list, Object value, int index, boolean selected, boolean […]

如何设置字体的颜色?

我有一个JList并在该列表中,我想更改以下单词的字体颜色。 有人说我必须使用CellRenderer,但我还不熟悉。 现在,我的问题是如何设置此渲染器来更改字体的颜色? 对此事有何看法? 谢谢…

显示JComboBox的不可选默认值

我有一个JComboBox ,其中包含三个项目{“Personel”, “Magasinier”, “Fournisseur”} 。 我希望这个JComboBox显示值”Choisir une option :” ,这是一个不可选择的值。 我在initComponents();之后尝试了这段代码initComponents(); : this.jComboBox1.setSelectedItem(“Choisir une option :”); 但它不起作用。 我怎样才能做到这一点 ?

自定义ListCellRenderer不会更改背景颜色

我有这堂课: @SuppressWarnings(“serial”) private class DataCellRenderer extends JLabel implements ListCellRenderer { public DataCellRenderer() { setHorizontalAlignment(SwingConstants.RIGHT); } @Override public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { if(isSelected) setBackground(Color.red); setText(” ” + value.toString()); return this; } } 问题是当我在JList中选择一个单元格时,我的背景不会变为红色。 setText部分工作,但我无法弄清楚为什么它不会改变我的单元格的背景颜色。 任何人有任何想法,谢谢!

如何在使用自定义ListCellRenderer时防止JComboBox无响应

我正在使用JComboBox和自定义ListCellRenderer制作字体选择器。 我希望JComboBox显示所有可用的字体,每个字体名称都以自己的字体显示。 我目前使用大约500种字体。 提供此function的ListCellRenerer示例: private class ComboBoxRenderer extends JLabel implements ListCellRenderer { private JLabel label = new JLabel(“Test”); @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { Font tempFont = label.getFont(); setFont(new Font((String) value, tempFont.getStyle(), tempFont.getSize())); setText((String) value); return this; } } 问题是,在使用此渲染器时, JComboBox在程序执行期间变得无响应。 第一次单击combobox以显示列表时,列表加载需要几秒钟。 第二次单击,立即显示列表。 如果有人评论该行 setFont(new Font((String) value, […]

Swing JList具有多行文本和动态高度

我已经阅读/试过这些post,但这没有帮助: 在Jlist单元格中显示多行 如何获取Jlist文本的多行? 显示JList组件的问题 我需要的是一个ListCellRenderer ,它返回一个左侧带有图标的面板和右侧的动态长度文本(就像在任何论坛中一样:左边是用户头像,右边是post文本)。 这些文本不为我所知,所以我无法设置固定的单元格高度。 此外,文本长度不同于列表单元格到列表单元格。 因此,每个列表单元格都需要自己的高度,具体取决于文本的长度。 实际上是一个非常常见的布局……但不适用于Swing。 单元格高度不会根据文本长度扩展。 我已经阅读了几乎所有有关JList动态单元格高度和多行文本的post,但找不到解决方案。 所以我决定给一个小型的SSCCE。 请告诉我如何实现我所描述的内容,或者如果您认为这很容易,请修改我的代码。 谢谢 这是SSCCE: public class MultiLineList extends JFrame { private static final long serialVersionUID = 1L; public static void main(final String[] args) { new MultiLineList(); } private MultiLineList() { setTitle(“MultiLineList”); setSize(800, 450); setResizable(true); setVisible(true); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); this.getContentPane().setLayout(new BorderLayout()); final DefaultListModel model = new […]