使用 DefaultListCellRenderer 将图标渲染到 JList 的右侧
Render icon to the right side in the JList using DefaultListCellRenderer
我的程序中有一个 DefaultListCellRenderer
,它可以很好地完成所有工作,但我想知道我是否可以将图像添加到 JList
的最右侧,而不是将其添加到左侧.
是否可以使用 DefaultListCellRenderer
在 JList
中将图标渲染到右侧?
如果是,请帮助我在以下代码中使用它。
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;
}
}
渲染器中使用的默认组件是 JLabel
,因此调用 JLabel.setHorizontalTextPosition(SwingConstants.WHATEVER)
。
want the text to the left edge and the icon to the right edge
JList 的默认渲染器是 JLabel。 JLabel 不支持文本和图标之间的动态间隙(只有固定间隙)。
您有两个选择:
您可以尝试使差距动态化。您设置标签的 text/icon 并获得其首选大小。您还知道 JList 的大小,您可以计算出文本和图标之间的差距。然后调用 setIconTextGap(...)
方法来设置间隙。在调用 super.getCellRendererComponent(...) 方法之前,您还需要将此间隙设置为 0。您还需要使用 Andrew 的建议将图标对齐到文本的右侧。
使用使用 JPanel 作为渲染器的自定义渲染器。然后,您将为面板使用 BorderLayout。您可以将 "textLabel" 添加到面板的 BorderLayout.LINESTART 并将 "iconLabel" 添加到面板的 BorderLayout.LINE_END。然后在渲染代码中,您只需设置两个标签的 text/icon 即可。您还需要为列表的选定行实现突出显示代码。
我的程序中有一个 DefaultListCellRenderer
,它可以很好地完成所有工作,但我想知道我是否可以将图像添加到 JList
的最右侧,而不是将其添加到左侧.
是否可以使用 DefaultListCellRenderer
在 JList
中将图标渲染到右侧?
如果是,请帮助我在以下代码中使用它。
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;
}
}
渲染器中使用的默认组件是 JLabel
,因此调用 JLabel.setHorizontalTextPosition(SwingConstants.WHATEVER)
。
want the text to the left edge and the icon to the right edge
JList 的默认渲染器是 JLabel。 JLabel 不支持文本和图标之间的动态间隙(只有固定间隙)。
您有两个选择:
您可以尝试使差距动态化。您设置标签的 text/icon 并获得其首选大小。您还知道 JList 的大小,您可以计算出文本和图标之间的差距。然后调用
setIconTextGap(...)
方法来设置间隙。在调用 super.getCellRendererComponent(...) 方法之前,您还需要将此间隙设置为 0。您还需要使用 Andrew 的建议将图标对齐到文本的右侧。使用使用 JPanel 作为渲染器的自定义渲染器。然后,您将为面板使用 BorderLayout。您可以将 "textLabel" 添加到面板的 BorderLayout.LINESTART 并将 "iconLabel" 添加到面板的 BorderLayout.LINE_END。然后在渲染代码中,您只需设置两个标签的 text/icon 即可。您还需要为列表的选定行实现突出显示代码。