0

我的程序中有一个DefaultListCellRenderer,它可以很好地完成所有工作,但我想知道我是否可以将图像添加到最右边JList而不是把它放在左边。

JList是否可以在using中将图标呈现到右侧DefaultListCellRenderer

如果是,请帮助我在以下代码中使用它。

public class RCellRenderer extends DefaultListCellRenderer {

    String runm = "";

    public RCellRenderer(String runm) {
        this.runm = runm;

    }

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        Component c = super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        ImageIcon imageIcon = new ImageIcon("images/in.png");
        setIcon(imageIcon);
        if (value.equals(runm)) {
            Color fg = Color.BLACK;
            setForeground(fg);
        }


        return c;
    }

}
4

2 回答 2

1

渲染器中使用的默认组件是 a JLabel,因此调用JLabel.setHorizontalTextPosition(SwingConstants.WHATEVER).

于 2018-08-11T06:14:06.783 回答
0

希望文本在左边,图标在右边

JList 的默认渲染器是 JLabel。JLabel 不支持文本和图标之间的动态间隙(仅支持固定间隙)。

你有几个选择:

  1. 您可以尝试使差距动态化。您设置标签的文本/图标并获得其首选大小。您还知道 JList 的大小,您可以计算出文本和图标之间的差距。然后调用该setIconTextGap(...)方法来设置间隙。在调用 super.getCellRendererComponent(...) 方法之前,您还需要将此间隙设置为 0。您还需要使用 Andrew 的建议将图标与文本右侧对齐。

  2. 使用使用 JPanel 作为渲染器的自定义渲染器。然后,您将为面板使用 BorderLayout。您将向面板的 BorderLayout.LINESTART 添加一个“textLabel”,向面板的 BorderLayout.LINE_END 添加一个“iconLabel”。然后在渲染代码中,您只需设置两个标签的文本/图标。您还需要为列表的选定行实现突出显示代码。

于 2018-08-11T15:02:11.930 回答