JList项目中的自动换行

koo*_*ool 9 java swing jscrollpane jlist

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

无论如何,我可以自动换行,以便整个项目名称出现在2行,但只需点击一下即可选择?IE它应该仍然表现为单个项目,但显示为两行.


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

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

Hov*_*els 19

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

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 = "<html><body style='width: ";
   public static final String HTML_2 = "px'>";
   public static final String HTML_3 = "</html>";
   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);
   }

}
Run Code Online (Sandbox Code Playgroud)

  • 这不是我的聪明才做到这一点,而是这一点:[安德鲁的帖子](http://stackoverflow.com/questions/7861724/is-there-some-word-wrap-property-of-jlabel-exist/7861833 #7861833).我不能不止一次地回答他的回答,但我鼓励任何认为我的回答有助于提升链接的人. (2认同)