- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 class GridPanel extends JPanel
, 带有静态内部类 ToolSelectComboBox extends JComboBox
,它又具有两个静态内部类 ToolSelectComboBoxModel implements ComboBoxModel
和 ToolSelectComboBoxRenderer implements ListCellRenderer
.面板显示 ToolSelectComboBox
(TSCB),其构造函数将其模型和渲染器设置为我创建的自定义模型。盒子创建正确,其模型和渲染器工作正常。
但是,渲染器的 getListCellRendererComponent(...)
方法使用 ImageIcon
在 JLabel
它返回。该图标已正确加载,但是,当我第一次单击组合框(每次运行时)时,图像的加载时间恰好(或至少非常接近)一秒多一点。我会假设这是加载文件的一些滞后,除了
System.out.println
result.setIcon(...)
之前和之后的命令命令,他们几乎立即跟随对方。 println
命令被触发两次,一次是在我单击框时,一次是在加载图标时。
getIcon
检索图标将各种大小的图标(16、32 和 64 像素平方)存储在
TreeMap<Tool.ImageSize, ImageIcon>
中的命令(其中
Tool
是我创建的具有
ImageIcon getIcon()
方法的接口(interface)。
*
”开头并具有类似注释文本的行都是折叠的 JavaDoc 标记,而不仅仅是困惑的代码):
public class GridPanel extends JPanel {
public static class ToolSelectComboBox extends JComboBox {
// Combo box model `ToolSelectComboBoxModel` snipped
* A renderer for the {@link ToolSelectComboBoxModel}. This may
public static class ToolSelectComboBoxRenderer implements
ListCellRenderer {
* The default renderer. Only the icon and text are modified.
protected DefaultListCellRenderer d = new DefaultListCellRenderer();
@Override
public Component getListCellRendererComponent(final JList list,
final Object value, final int index,
final boolean isSelected, final boolean cellHasFocus) {
if (!ToolSelectComboBoxModel.class.isInstance(list.getModel())) {
throw new IllegalStateException(
"Cannot use a ToolSelectComboBoxRenderer on any list model type other than ToolSelectComboBoxModel.");
}
final JLabel result = (JLabel) d.getListCellRendererComponent(
list, value, index, isSelected, cellHasFocus);
result.setText(null);
if (value != null) {
result.setIcon(((Tool) value)
.getIcon(Tool.IconSize.SIZE_32PX));
}
return result;
}
}
public ToolSelectComboBox() {
setModel(new ToolSelectComboBoxModel());
((ToolSelectComboBoxModel) getModel()).add(new CircleTool()); // shown below
setRenderer(new ToolSelectComboBoxRenderer());
}
}
* Create the panel.
public GridPanel() {
setLayout(new BorderLayout(0, 0));
final ToolSelectComboBox toolSelectComboBox = new ToolSelectComboBox();
add(toolSelectComboBox, BorderLayout.NORTH);
final SquareGrid squareGrid = new SquareGrid(); // another class; this works fine
add(squareGrid, BorderLayout.CENTER); // irrelevant to problem
}
}
CircleTool
类只有一个方法(覆盖
AbstractTool
的抽象方法来获取图像路径),并且由于该方法有效(它可以很好地获取路径,它只是加载缓慢的图标),我没有包含这个类。
AbstractTool
类(class):
public abstract class AbstractTool implements Tool {
/**
* A {@link TreeMap} to map the icon sizes to their icons.
*/
protected final TreeMap<Tool.IconSize, ImageIcon> map = new TreeMap<Tool.IconSize, ImageIcon>();
/**
* Constructs the tool and sets up the {@linkplain #map}.
*/
public AbstractTool() {
for (final Tool.IconSize size : Tool.IconSize.values()) {
System.out.println("Putting value for " + size);
map.put(size,
new ImageIcon(Tool.class.getResource(getImagePath(size))));
}
}
@Override
public ImageIcon getIcon(final IconSize size) {
return map.get(size);
}
/**
* Gets the image path for the given image size.
*
* @param size
* the size
* @return the image path
*/
protected abstract String getImagePath(Tool.IconSize size);
}
最佳答案
but, the first time I click the combo box (on each run), the image takes a little more than a second to load. I would assume that this is some lag in loading the file
except that when I add System.out.println commands before and after the result.setIcon(...) command, they follow each other almost instantly
import java.awt.*;
import javax.swing.*;
public class ComboBoxIcon extends JFrame
{
JComboBox comboBox;
public ComboBoxIcon()
{
Object[] items =
{
new ImageIcon("about16.gif"),
new ImageIcon("add16.gif"),
new ImageIcon("copy16.gif")
};
comboBox = new JComboBox( items );
getContentPane().add( comboBox, BorderLayout.NORTH );
}
public static void main(String[] args)
{
JFrame frame = new ComboBoxIcon();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible( true );
}
}
关于java - ListCellRenderer 中的 ImageIcon 缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7379914/
这是我在这里的第一篇文章,如果它太可怕了,请提前道歉...... 我正在尝试使用自定义 ListCellRenderer 将自定义类列表中的项目添加到 JList 中。每个都有各种我想添加到一行的东西
以下 ListCellRenderer 不接收嵌套 ComboBox 上的单击事件。我需要启用某些功能吗? class FilterCellRenderer implements ListCellRe
这是自定义渲染器的代码: private class FacilityElement extends javax.swing.JLabel implements javax.swing.ListCel
我想编写一个自定义 ListCellRenderer。 唯一需要与默认不同的是,它不显示 value.toString() 的返回值,而是显示 value.myOwnCustomMethodThatR
我正在使用 ListCellRenderer 来编辑 JList 中条目的外观。选择它们后(通过单击它们,此代码位于单击事件内),我调用 ListCellRenderer 来更改文本的颜色。如果再次选
我试图仅获取 ArrayList 元素中的第一项以显示在组合框中。有人建议使用 ListCellRenderer 可以帮助我实现这一目标。我已经尝试了很多次,但无法访问必要的 getCourseNum
我正在使用 ListCellRenderer,我需要显示绘制的项目略有不同,这取决于它们是作为下拉列表的一部分还是作为组合框内联的一部分绘制的图片(即非下拉模式下的选定项目)。 使用渲染器的 getL
我正在尝试创建一个包含三个文本区域的 ListCellRenderer。在构造函数中,我创建了一个空容器,设置其布局,为文本区域设置样式并将文本区域添加到容器中。此容器 ID 进一步添加到渲染器组件。
我编写了自己的 ListCellRenderer(下面的代码),它使我的单元格透明。现在,如果我运行它,每次我单击一个列表项时,它都会变得比以前更白。会不会是 JList 总是添加我创建的这个新 JL
要为任意对象自定义 JComboBox 中显示的文本,我知道正确的方法是创建自定义 ListCellRenderer 。但是,我不确定如何以模仿与普通组合框相同的外观和感觉的方式执行此操作。 考虑下面
关于 JavaDoc for javax.swing.ListCellRenderer 中示例代码的快速问题: 我有点惊讶,在示例中,ListCellRenderer由扩展 JLabel 的类实现并且
我想创建一个包含带有数据和 jCombobox 的项目的列表。我使用这个 listCellRenderer : public class DeliveryListCellRenderer extend
今天早些时候我发布了一个问题,并在 MadProgrammer 的指导下使用 ListCellRenderer 来实现所需的结果。我几乎可以正常工作,但它在组合框中显示相同的条目两次,我不知道为什么。
我正在尝试制作一个自定义 JList,它显示任务列表,其中每个任务表示如下 - 类型:由 3 个不同的图标表示,状态由 2 个图标表示,名称为简单的字符串。 我的问题是,首先自定义 CellRende
我试图在 Generic ListCellRenderer 上设置开关组件,但它会抛出内部应用程序错误 - NullPointer 异常。 我尝试过的代码如下。 Form hi = new Form(
我目前正在尝试为 JList 编写自定义 ListCellRenderer。不幸的是,几乎所有示例都简单地将 DefaultListCellRenderer 用作 JLabel 并完成它;但是,我需要
我有这门课: @SuppressWarnings("serial") private class DataCellRenderer extends JLabel implements ListC
我有一个 class GridPanel extends JPanel , 带有静态内部类 ToolSelectComboBox extends JComboBox ,它又具有两个静态内部类 Tool
这是我的代码:- public class MyRender extends JPanel implements ListCellRenderer { ImageIcon on_img;
我有一个 JList ,为此我创建了自定义 ListCellRenderer .此列表包含在 JScrollPane 中. 为避免在运行时 调整框架大小,我希望滚动 Pane 始终具有适合显示的大小
我是一名优秀的程序员,十分优秀!