Java JList不需要toString()转换

2 java string swing drag-and-drop jlist

我扩展的JList让用户拖放重新排序它(使用拖放重新排序JList使用拖放重新排序列表)但它给了我一个奇怪的结果.它没有给我我的习惯JComponent,而是给了我它的.toString()价值.我我自定义的模型设置JListDefaultListModel<JComponent>思考它会工作,但事实并非如此.

Jef*_*rey 5

您需要为CellRenderer要渲染的对象创建自定义.默认情况下,JList将显示组件的toString值(因为DefaultListCellRenderer扩展了JLabel).

class MyRenderer extends DefaultListCellRenderer {
   public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      Component c = super.getListCellRendererComponent(...);
      setText(getValue(value)); // where getValue is some method you implement that gets the text you want to render for the component
      return c;
}
Run Code Online (Sandbox Code Playgroud)

如果您实际上不想呈现字符串,请创建CellRenderer的实现,该实现返回要呈现的组件.