我的程序中有一个DefaultListCellRenderer
,它可以很好地完成所有工作,但是我想知道是否可以在JList
的最右边添加图像,而不是将其放在左边。 / p>
是否可以使用JList
在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;
}
}
答案 0 :(得分:1)
渲染器中使用的默认组件是JLabel
,因此调用JLabel.setHorizontalTextPosition(SwingConstants.WHATEVER)
。
答案 1 :(得分:0)
想要在文本的左边缘和图标在右边缘
JList的默认渲染器是JLabel。 JLabel不支持文本和图标之间的动态间隔(仅固定间隔)。
您有两种选择:
您可以尝试使差距动态化。您设置标签的文本/图标并获得其首选大小。您还知道可以将JList的大小计算为文本和图标之间的差异。然后,调用setIconTextGap(...)
方法来设置间隙。您还需要在调用super.getCellRendererComponent(...)方法之前将此间隙设置为0。您还需要使用安德鲁(Andrew)的建议来将图标对准文本的右侧。
使用将JPanel用作呈现器的自定义呈现器。然后,您将为面板使用BorderLayout。您将在面板的BorderLayout.LINESTART中添加“ textLabel”,并在面板的BorderLayout.LINE_END中添加“ iconLabel”。然后,在渲染代码中,您可以简单地设置两个标签的文本/图标。您还需要为列表的选定行实现突出显示代码。