JList项目中的自动换行

我有一个具有很长项目名称的JList ,导致水平滚动条出现在滚动窗格中。

无论如何,我可以自我换行,以便整个项目名称出现在2行,但可以一键选择? IE它应该仍然表现为单个项目,但显示为两行。


这是我看到下面的例子后做的

我在我的项目MyCellRenderer中添加了一个新类,然后我添加了MyList.setCellRenderer(new MyCellRenderer(80)); 在我的列表的post创建代码中。 还有什么我需要做的吗?

是的,使用安德鲁的代码,我提出了这样的事情:

 import java.awt.Component; import javax.swing.*; public class JListLimitWidth { public static void main(String[] args) { String[] names = { "John Smith", "engelbert humperdinck", "john jacob jingleheimer schmidt" }; MyCellRenderer cellRenderer = new MyCellRenderer(80); JList list = new JList(names); list.setCellRenderer(cellRenderer); JScrollPane sPane = new JScrollPane(list); JPanel panel = new JPanel(); panel.add(sPane); JOptionPane.showMessageDialog(null, panel); } } class MyCellRenderer extends DefaultListCellRenderer { public static final String HTML_1 = ""; public static final String HTML_3 = ""; private int width; public MyCellRenderer(int width) { this.width = width; } @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { String text = HTML_1 + String.valueOf(width) + HTML_2 + value.toString() + HTML_3; return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus); } } 

它可以更容易地完成。 您可以使用ListModel通过consatructor创建JList。 在CustomListModel中扩展AbstractListModel,getElementAt()方法可以返回具有相同html格式文本的String。 所以这种方式在没有单元格渲染器修改的情况下也是如此。

您还可以动态计算宽度(而不是固定值):

 String text = HTML_1 + String.valueOf(**list.getWidth()**) + HTML_2 + value.toString() + HTML_3; 

因此,如果面板调整列表大小,则换行仍然正确。

更新

结果如下: 在此处输入图像描述