Module java.desktop
Package javax.swing

Class JList<E>

类型参数:
E - 此列表元素的类型
所有实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

@JavaBean(defaultProperty="UI", description="A component which allows for the selection of one or more objects from a list.") public class JList<E> extends JComponent implements Scrollable, Accessible
显示对象列表并允许用户选择一个或多个项目的组件。一个单独的模型ListModel维护列表的内容。

使用JList构造函数很容易显示数组或对象的Vector,该构造函数会自动为您构建一个只读的ListModel实例:

 
 // 创建一个显示数组中字符串的JList

 String[] data = {"one", "two", "three", "four"};
 JList<String> myList = new JList<String>(data);

 // 创建一个显示JList.class的超类的JList,通过
 // 使用填充此数据的Vector创建它

 Vector<Class<?>> superClasses = new Vector<Class<?>>();
 Class<JList> rootClass = javax.swing.JList.class;
 for(Class<?> cls = rootClass; cls != null; cls = cls.getSuperclass()) {
     superClasses.addElement(cls);
 }
 JList<Class<?>> myList = new JList<Class<?>>(superClasses);

 // 自动创建的模型存储在JList的“model”属性中,您可以检索

 ListModel<Class<?>> model = myList.getModel();
 for(int i = 0; i < model.getSize(); i++) {
     System.out.println(model.getElementAt(i));
 }
 
 

ListModel可以直接通过构造函数或setModel方法提供给JList。内容不需要是静态的 - 项目的数量和值可以随时间改变。正确的ListModel实现在每次发生更改时通知已添加到其中的一组javax.swing.event.ListDataListener。这些更改由javax.swing.event.ListDataEvent标识,该事件标识已修改、添加或删除的列表索引范围。JListListUI负责通过监听模型来保持视觉表示与更改同步。

简单的动态内容JList应用程序可以使用DefaultListModel类来维护列表元素。该类实现了ListModel接口,并提供了类似于java.util.Vector的API。需要更自定义的ListModel实现的应用程序可能希望子类化AbstractListModel,该类提供了基本支持来管理和通知侦听器。例如,AbstractListModel的只读实现:

 
 // 此列表模型有大约2^16个元素。享受滚动吧。

 ListModel<String> bigData = new AbstractListModel<String>() {
     public int getSize() { return Short.MAX_VALUE; }
     public String getElementAt(int index) { return "Index " + index; }
 };
 
 

JList的选择状态由另一个单独的模型管理,即ListSelectionModel的实例。JList在构造时使用选择模型进行初始化,并且还包含查询或设置此选择模型的方法。此外,JList提供了方便的方法来轻松管理选择。这些方法,如setSelectedIndexgetSelectedValue,是负责处理与选择模型交互的细节的封装方法。默认情况下,JList的选择模型配置为允许同时选择任意组合的项目;选择模式MULTIPLE_INTERVAL_SELECTION。选择模式可以直接在选择模型上更改,或通过JList的封装方法更改。负责根据用户手势更新选择模型的责任属于列表的ListUI

正确的ListSelectionModel实现在每次选择更改时通知已添加到其中的一组javax.swing.event.ListSelectionListener。这些更改由javax.swing.event.ListSelectionEvent标识,该事件标识了选择更改的范围。

监听列表选择更改以保持列表的视觉表示更新的首选方法是直接向JList添加ListSelectionListenerJList然后负责监听选择模型并通知您的侦听器更改。

负责监听选择更改以保持列表的视觉表示更新的责任属于列表的ListUI

JList中单元格的绘制由称为单元格渲染器的委托处理,安装在列表上作为cellRenderer属性。渲染器提供一个java.awt.Component,类似于“橡皮图章”,用于绘制单元格。每次需要绘制单元格时,列表的ListUI会向单元格渲染器请求组件,将其放置到适当位置,并通过其paint方法绘制单元格的内容。默认的单元格渲染器使用JLabel组件进行渲染,由列表的ListUI安装。您可以使用以下代码替换自己的渲染器:

 
  // 为列表中的每个对象显示图标和字符串。

 class MyCellRenderer extends JLabel implements ListCellRenderer<Object> {
     static final ImageIcon longIcon = new ImageIcon("long.gif");
     static final ImageIcon shortIcon = new ImageIcon("short.gif");

     // 这是ListCellRenderer定义的唯一方法。
     // 每次调用时我们都重新配置JLabel。

     public Component getListCellRendererComponent(
       JList<?> list,           // 列表
       Object value,            // 要显示的值
       int index,               // 单元索引
       boolean isSelected,      // 单元是否被选中
       boolean cellHasFocus)    // 单元是否具有焦点
     {
         String s = value.toString();
         setText(s);
         setIcon((s.length() > 10) ? longIcon : shortIcon);
         if (isSelected) {
             setBackground(list.getSelectionBackground());
             setForeground(list.getSelectionForeground());
         } else {
             setBackground(list.getBackground());
             setForeground(list.getForeground());
         }
         setEnabled(list.isEnabled());
         setFont(list.getFont());
         setOpaque(true);
         return this;
     }
 }

 myList.setCellRenderer(new MyCellRenderer());
 
 

单元格渲染器的另一个作用是帮助确定列表的大小信息。默认情况下,列表的ListUI通过询问单元格渲染器每个列表项的首选大小来确定单元格的大小。对于大量项目的大列表,这可能很昂贵。为了避免这些计算,您可以在列表上设置fixedCellWidthfixedCellHeight,或者根据单个原型值自动计算这些值:

 
 JList<String> bigDataList = new JList<String>(bigData);

 // 我们不希望JList实现计算所有列表单元格的宽度
 // 或高度,因此我们给它一个我们将需要的任何单元格大小的字符串
 // 它使用此字符串来计算fixedCellWidth和fixedCellHeight属性的值。

 bigDataList.setPrototypeCellValue("Index 1234567890");
 
 

JList不直接实现滚动。要创建一个可滚动的列表,请将其设置为JScrollPane的视口视图。例如:

 JScrollPane scrollPane = new JScrollPane(myList);

 // 或分两步:
 JScrollPane scrollPane = new JScrollPane();
 scrollPane.getViewport().setView(myList);
 

JList不提供任何特殊处理双击或三击(或N次点击)鼠标的功能,但如果希望对这些事件采取操作,则可以轻松添加MouseListener。使用locationToIndex方法确定单击了哪个单元格。例如:

 MouseListener mouseListener = new MouseAdapter() {
     public void mouseClicked(MouseEvent e) {
         if (e.getClickCount() == 2) {
             int index = list.locationToIndex(e.getPoint());
             System.out.println("双击了项目 " + index);
          }
     }
 };
 list.addMouseListener(mouseListener);
 

警告: Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略

警告: 此类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于在运行相同版本的Swing的应用程序之间进行短期存储或RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans包中。请参阅XMLEncoder

有关更多文档,请参阅如何使用列表The Java Tutorial

自版本:
1.2
参见:
  • Field Details

  • Constructor Details

    • JList

      public JList(ListModel<E> dataModel)
      构造一个显示指定模型中元素的JList,该模型为非空。所有JList构造函数都委托给此构造函数。

      此构造函数将列表注册到ToolTipManager,允许单元格渲染器提供工具提示。

      参数:
      dataModel - 列表的模型
      抛出:
      IllegalArgumentException - 如果模型为null
    • JList

      public JList(E[] listData)
      构造一个显示指定数组中元素的JList。此构造函数为给定数组创建一个只读模型,然后委托给接受ListModel的构造函数。

      尝试将null值传递给此方法会导致未定义的行为,很可能会引发异常。创建的模型直接引用给定的数组。在构建列表后尝试修改数组会导致未定义的行为。

      参数:
      listData - 要加载到数据模型中的对象数组,非null
    • JList

      public JList(Vector<? extends E> listData)
      构造一个显示指定Vector中元素的JList。此构造函数为给定Vector创建一个只读模型,然后委托给接受ListModel的构造函数。

      尝试将null值传递给此方法会导致未定义的行为,很可能会引发异常。创建的模型直接引用给定的Vector。在构建列表后尝试修改Vector会导致未定义的行为。

      参数:
      listData - 要加载到数据模型中的Vector非null
    • JList

      public JList()
      构造一个带有空的只读模型的JList
  • Method Details

    • getUI

      public ListUI getUI()
      返回ListUI,用于渲染此组件的外观对象。
      覆盖:
      getUI 在类 JComponent
      返回:
      渲染此组件的ListUI对象
    • setUI

      @BeanProperty(hidden=true, visualUpdate=true, description="The UI object that implements the Component\'s LookAndFeel.") public void setUI(ListUI ui)
      设置ListUI,用于渲染此组件的外观对象。
      参数:
      ui - ListUI对象
      参见:
    • updateUI

      public void updateUI()
      通过将其设置为当前外观提供的值重置ListUI属性。如果当前的单元格渲染器是由开发人员安装的(而不是外观本身),这还会导致单元格渲染器及其子级被更新,通过在其上调用SwingUtilities.updateComponentTreeUI
      覆盖:
      updateUI 在类 JComponent
      参见:
    • getUIClassID

      @BeanProperty(bound=false) public String getUIClassID()
      返回"ListUI",用于查找定义此组件外观的javax.swing.plaf.ListUI类名称的UIDefaults键。
      覆盖:
      getUIClassID 在类 JComponent
      返回:
      字符串"ListUI"
      参见:
    • getPrototypeCellValue

      public E getPrototypeCellValue()
      返回“原型”单元格值,用于计算单元格的固定宽度和高度。如果没有这样的值,则可以为null
      返回:
      prototypeCellValue属性的值
      参见:
    • setPrototypeCellValue

      @BeanProperty(visualUpdate=true, description="The cell prototype value, used to compute cell width and height.") public void setPrototypeCellValue(E prototypeCellValue)
      设置prototypeCellValue属性,然后(如果新值为非null),通过从单元格渲染器组件(索引为0)请求给定值的单元格渲染器组件,并使用该组件的首选大小来计算fixedCellWidthfixedCellHeight属性。

      当此方法可能修改prototypeCellValuefixedCellHeightfixedCellWidth三个属性时,只有在prototypeCellValue属性更改时才会发送PropertyChangeEvent通知。

      要查看设置此属性的示例,请参阅上面的类描述

      此属性的默认值为null

      这是一个JavaBeans绑定属性。

      参数:
      prototypeCellValue - 用于基于fixedCellWidthfixedCellHeight的值
      参见:
    • getFixedCellWidth

      public int getFixedCellWidth()
      返回fixedCellWidth属性的值。
      返回:
      固定单元格宽度
      参见:
    • setFixedCellWidth

      @BeanProperty(visualUpdate=true, description="Defines a fixed cell width when greater than zero.") public void setFixedCellWidth(int width)
      设置用于列表中每个单元格宽度的固定值。如果width为-1,则在ListUI中通过将getPreferredSize应用于每个列表元素的单元格渲染器组件来计算单元格宽度。

      此属性的默认值为-1

      这是一个JavaBeans绑定属性。

      参数:
      width - 列表中所有单元格使用的宽度
      参见:
    • getFixedCellHeight

      public int getFixedCellHeight()
      返回fixedCellHeight属性的值。
      返回:
      固定单元格高度
      参见:
    • setFixedCellHeight

      @BeanProperty(visualUpdate=true, description="Defines a fixed cell height when greater than zero.") public void setFixedCellHeight(int height)
      设置用于列表中每个单元格高度的固定值。如果height为-1,则在ListUI中通过将getPreferredSize应用于每个列表元素的单元格渲染器组件来计算单元格高度。

      此属性的默认值为-1

      这是一个JavaBeans绑定属性。

      参数:
      height - 列表中所有单元格使用的高度
      参见:
    • getCellRenderer

      public ListCellRenderer<? super E> getCellRenderer()
      返回负责绘制列表项的对象。
      返回:
      cellRenderer属性的值
      参见:
    • setCellRenderer

      @BeanProperty(visualUpdate=true, description="The component used to draw the cells.") public void setCellRenderer(ListCellRenderer<? super E> cellRenderer)
      设置用于绘制列表中每个单元格的委托。单元格渲染器的工作在类级别文档中有详细讨论。

      如果prototypeCellValue属性为非null,设置单元格渲染器还会导致重新计算fixedCellWidthfixedCellHeight属性。但是,只生成一个PropertyChangeEvent - 用于cellRenderer属性。

      此属性的默认值由ListUI委托提供,即由外观实现提供。

      这是一个JavaBeans绑定属性。

      参数:
      cellRenderer - 用于绘制列表单元格的ListCellRenderer
      参见:
    • getSelectionForeground

      public Color getSelectionForeground()
      返回用于绘制选定项前景的颜色。DefaultListCellRenderer使用此颜色来绘制处于选定状态的项目的前景,大多数ListUI实现安装的渲染器也是如此。
      返回:
      用于绘制选定项前景的颜色
      参见:
    • setSelectionForeground

      @BeanProperty(visualUpdate=true, description="The foreground color of selected cells.") public void setSelectionForeground(Color selectionForeground)
      设置用于绘制选定项前景的颜色,单元格渲染器可以使用此颜色来渲染文本和图形。 DefaultListCellRenderer使用此颜色来绘制处于选定状态的项目的前景,大多数ListUI实现安装的渲染器也是如此。

      此属性的默认值由外观实现定义。

      这是一个JavaBeans绑定属性。

      参数:
      selectionForeground - 用于选定列表项前景色的Color
      参见:
    • getSelectionBackground

      public Color getSelectionBackground()
      返回用于绘制选定项背景的颜色。 DefaultListCellRenderer 使用此颜色来绘制处于选定状态的项目的背景,大多数ListUI实现安装的渲染器也是如此。
      返回:
      用于绘制选定项背景的颜色
      参见:
    • setSelectionBackground

      @BeanProperty(visualUpdate=true, description="The background color of selected cells.") public void setSelectionBackground(Color selectionBackground)
      设置用于绘制选定项背景的颜色,单元格渲染器可以使用它填充选定的单元格。 DefaultListCellRenderer 使用此颜色来填充处于选定状态的项目的背景,大多数ListUI实现安装的渲染器也是如此。

      此属性的默认值由外观实现定义。

      这是一个JavaBeans绑定属性。

      参数:
      selectionBackground - 用于选定单元格背景的Color
      参见:
    • getVisibleRowCount

      public int getVisibleRowCount()
      返回visibleRowCount属性的值。有关如何解释此值的详细信息,请参阅setVisibleRowCount(int)的文档。
      返回:
      visibleRowCount属性的值。
      参见:
    • setVisibleRowCount

      @BeanProperty(visualUpdate=true, description="The preferred number of rows to display without requiring scrolling") public void setVisibleRowCount(int visibleRowCount)
      设置visibleRowCount属性,具体含义取决于布局方向:对于VERTICAL布局方向,这将设置在不需要滚动的情况下显示的首选行数;对于其他方向,它会影响单元格的换行。

      VERTICAL方向:
      设置此属性会影响getPreferredScrollableViewportSize()方法的返回值,该方法用于计算封闭视口的首选大小。有关更多详细信息,请参阅该方法的文档。

      HORIZONTAL_WRAPVERTICAL_WRAP方向:
      这会影响单元格的换行方式。有关更多详细信息,请参阅setLayoutOrientation(int)的文档。

      此属性的默认值为8

      使用负值调用此方法会将属性设置为0

      这是一个JavaBeans绑定属性。

      参数:
      visibleRowCount - 指定在不需要滚动的情况下显示的首选行数的整数
      参见:
    • getLayoutOrientation

      public int getLayoutOrientation()
      返回列表的布局方向属性:VERTICAL表示布局为单列单元格,VERTICAL_WRAP表示布局为"报纸风格",内容垂直流动然后水平流动,HORIZONTAL_WRAP表示布局为"报纸风格",内容水平流动然后垂直流动。
      返回:
      layoutOrientation属性的值
      自从:
      1.4
      参见:
    • setLayoutOrientation

      @BeanProperty(visualUpdate=true, enumerationValues={"JList.VERTICAL","JList.HORIZONTAL_WRAP","JList.VERTICAL_WRAP"}, description="Defines the way list cells are laid out.") public void setLayoutOrientation(int layoutOrientation)
      定义列表单元格的布局方式。考虑一个具有五个单元格的JList。单元格可以以以下方式之一布局:
       VERTICAL:          0
                          1
                          2
                          3
                          4
      
       HORIZONTAL_WRAP:   0  1  2
                          3  4
      
       VERTICAL_WRAP:     0  3
                          1  4
                          2
       

      以下是这些布局的描述:

      描述VERTICAL、HORIZONTAL_WRAP和VERTICAL_WRAP布局
      描述
      VERTICAL 单元格在单列中垂直布局。
      HORIZONTAL_WRAP 单元格水平布局,根据需要换行到新行。如果visibleRowCount属性小于或等于零,则根据列表的宽度确定换行;否则,以确保列表中有visibleRowCount行的方式进行换行。
      VERTICAL_WRAP 单元格垂直布局,根据需要换行到新列。如果visibleRowCount属性小于或等于零,则根据列表的高度确定换行;否则,以visibleRowCount行进行换行。
      此属性的默认值为VERTICAL
      参数:
      layoutOrientation - 新的布局方向,其中之一:VERTICALHORIZONTAL_WRAPVERTICAL_WRAP
      抛出:
      IllegalArgumentException - 如果layoutOrientation不是允许的值之一
      自从:
      1.4
      参见:
    • getFirstVisibleIndex

      @BeanProperty(bound=false) public int getFirstVisibleIndex()
      返回当前可见的最小列表索引。在从左到右的componentOrientation中,第一个可见单元格位于列表的左上角附近。在从右到左的方向中,它位于右上角附近。如果没有可见的内容或列表为空,则返回-1。请注意,返回的单元格可能只是部分可见。
      返回:
      第一个可见单元格的索引
      参见:
    • getLastVisibleIndex

      @BeanProperty(bound=false) public int getLastVisibleIndex()
      返回当前可见的最大列表索引。如果没有可见的内容或列表为空,则返回-1。请注意,返回的单元格可能只是部分可见。
      返回:
      最后一个可见单元格的索引
      参见:
    • ensureIndexIsVisible

      public void ensureIndexIsVisible(int index)
      将列表在封闭视口内滚动,使指定的单元格完全可见。这会使用指定单元格的边界调用scrollRectToVisible。为使此方法起作用,JList必须在JViewport内。

      如果给定的索引超出列表的单元格范围,则此方法不会产生任何效果。

      参数:
      index - 要使其可见的单元格的索引
      参见:
    • setDragEnabled

      @BeanProperty(bound=false, description="determines whether automatic drag handling is enabled") public void setDragEnabled(boolean b)
      开启或关闭自动拖拽处理。为了启用自动拖拽处理,该属性应设置为true,并且列表的TransferHandler需要是non-null。默认值为false

      尊重此属性并识别用户拖拽手势的工作由外观实现负责,特别是列表的ListUI。当启用自动拖拽处理时,大多数外观(包括那些子类化BasicLookAndFeel的外观)在用户按下鼠标按钮并将鼠标移动几个像素时开始拖放操作。因此,将此属性设置为true可能会对选择行为产生微妙影响。

      如果使用忽略此属性的外观,仍然可以通过在列表的TransferHandler上调用exportAsDrag来开始拖放操作。

      参数:
      b - 是否启用自动拖拽处理
      抛出:
      HeadlessException - 如果btrueGraphicsEnvironment.isHeadless()返回true
      自版本:
      1.4
      参见:
    • getDragEnabled

      public boolean getDragEnabled()
      返回是否启用自动拖拽处理。
      返回:
      dragEnabled属性的值
      自版本:
      1.4
      参见:
    • setDropMode

      public final void setDropMode(DropMode dropMode)
      设置此组件的拖放模式。为了向后兼容,此属性的默认值为DropMode.USE_SELECTION。然而,建议使用其他模式以获得更好的用户体验。例如,DropMode.ON提供类似的行为,显示项目为选定状态,但不会影响列表中的实际选择。

      JList支持以下拖放模式:

      • DropMode.USE_SELECTION
      • DropMode.ON
      • DropMode.INSERT
      • DropMode.ON_OR_INSERT
      如果此组件具有接受拖放的TransferHandler,则拖放模式才有意义。
      参数:
      dropMode - 要使用的拖放模式
      抛出:
      IllegalArgumentException - 如果不支持拖放模式或为null
      自版本:
      1.6
      参见:
    • getDropMode

      public final DropMode getDropMode()
      返回此组件的拖放模式。
      返回:
      此组件的拖放模式
      自版本:
      1.6
      参见:
    • getDropLocation

      @BeanProperty(bound=false) public final JList.DropLocation getDropLocation()
      返回此组件在DnD操作期间应在其中指示为放置位置的位置,如果当前不需要显示位置,则返回null

      此方法不适用于从TransferHandler查询放置位置,因为放置位置仅在TransferHandlercanImport返回并允许显示位置后设置。

      当此属性更改时,组件将触发名称为“dropLocation”的属性更改事件。

      默认情况下,监听此属性的更改并在视觉上指示放置位置的责任由列表的ListUI负责,它可以直接绘制它,和/或安装一个单元格渲染器来执行此操作。希望实现自定义放置位置绘制和/或替换默认单元格渲染器的开发人员可能需要尊重此属性。

      返回:
      放置位置
      自版本:
      1.6
      参见:
    • getNextMatch

      public int getNextMatch(String prefix, int startIndex, Position.Bias bias)
      返回下一个以给定前缀开头的列表元素。
      参数:
      prefix - 要匹配的字符串
      startIndex - 开始搜索的索引
      bias - 搜索方向,可以是Position.Bias.Forward或Position.Bias.Backward。
      返回:
      以前缀开头的下一个列表元素的索引;否则为-1
      抛出:
      IllegalArgumentException - 如果前缀为null或startIndex超出范围
      自版本:
      1.4
    • getToolTipText

      public String getToolTipText(MouseEvent event)
      返回用于给定事件的工具提示文本。这将覆盖JComponentgetToolTipText,首先检查事件发生的单元格渲染器组件,返回其工具提示文本(如果有)。此实现允许您通过在单元格渲染器组件上使用setToolTipText来指定单元格级别的工具提示文本。

      注意:为了使JList以此方式正确显示其渲染器的工具提示,JList必须是ToolTipManager的注册组件。此注册在构造函数中自动完成。但是,如果稍后取消注册JList,通过调用setToolTipText(null),则不再显示来自渲染器的提示。

      覆盖:
      getToolTipText 在类 JComponent
      参数:
      event - 要获取工具提示文本的MouseEvent
      返回:
      包含工具提示的字符串
      参见:
    • locationToIndex

      public int locationToIndex(Point location)
      返回列表坐标系中最接近给定位置的单元格索引。要确定单元格是否实际包含指定位置,请将该点与由getCellBounds提供的单元格边界进行比较。如果模型为空,则此方法返回-1

      这是一个代理方法,委托给列表的ListUI中同名方法。如果列表没有ListUI,则返回-1

      参数:
      location - 点的坐标
      返回:
      最接近给定位置的单元格索引,或-1
    • indexToLocation

      public Point indexToLocation(int index)
      返回列表坐标系中指定项目的原点。如果索引无效,则此方法返回null

      这是一个代理方法,委托给列表的ListUI中同名方法。如果列表没有ListUI,则返回null

      参数:
      index - 单元格索引
      返回:
      单元格的原点,或null
    • getCellBounds

      public Rectangle getCellBounds(int index0, int index1)
      返回由两个索引指定的单元格范围的边界矩形,在列表的坐标系中。这些索引可以以任何顺序提供。

      如果较小的索引在列表的单元格范围之外,则此方法返回null。如果较小的索引有效,但较大的索引在列表的范围之外,则仅返回第一个索引的边界。否则,返回有效范围的边界。

      这是一个代理方法,委托给列表的ListUI中同名方法。如果列表没有ListUI,则返回null

      参数:
      index0 - 范围中的第一个索引
      index1 - 范围中的第二个索引
      返回:
      单元格范围的边界矩形,或null
    • getModel

      public ListModel<E> getModel()
      返回保存由JList组件显示的项目列表的数据模型。
      返回:
      提供显示项目列表的ListModel
      参见:
    • setModel

      @BeanProperty(visualUpdate=true, description="The object that contains the data to be drawn by this JList.") public void setModel(ListModel<E> model)
      设置表示列表内容或“值”的模型,通知属性更改侦听器,然后清除列表的选择。

      这是一个JavaBeans绑定属性。

      参数:
      model - 提供要显示的项目列表的ListModel
      抛出:
      IllegalArgumentException - 如果modelnull
      参见:
    • setListData

      public void setListData(E[] listData)
      从项目数组构造一个只读的ListModel,并调用setModel方法设置该模型。

      尝试将null值传递给此方法会导致未定义的行为,很可能会引发异常。创建的模型直接引用给定的数组。在调用此方法后尝试修改数组会导致未定义的行为。

      参数:
      listData - 包含要在列表中显示的项目的E数组
      参见:
    • setListData

      public void setListData(Vector<? extends E> listData)
      Vector构造一个只读的ListModel,并调用setModel方法设置该模型。

      尝试将null值传递给此方法会导致未定义的行为,很可能会引发异常。创建的模型直接引用给定的Vector。在调用此方法后尝试修改Vector会导致未定义的行为。

      参数:
      listData - 包含要在列表中显示的项目的Vector
      参见:
    • createSelectionModel

      protected ListSelectionModel createSelectionModel()
      返回一个DefaultListSelectionModel实例;在构造期间调用以初始化列表的选择模型属性。
      返回:
      一个DefaultListSelecitonModel,用于在构造期间初始化列表的选择模型属性
      参见:
    • getSelectionModel

      public ListSelectionModel getSelectionModel()
      返回当前的选择模型。选择模型维护列表的选择状态。更多详情请参阅类级别文档。
      返回:
      维护列表选择的ListSelectionModel
      参见:
    • fireSelectionValueChanged

      protected void fireSelectionValueChanged(int firstIndex, int lastIndex, boolean isAdjusting)
      通知直接添加到选择模型的ListSelectionListener列表的选择更改。JList监听选择模型中的选择更改,并通过调用此方法将更改通知给直接添加到列表的侦听器。

      此方法使用此列表作为源构造一个带有指定参数的ListSelectionEvent,并将其发送到注册的ListSelectionListeners

      参数:
      firstIndex - 范围内的第一个索引,<= lastIndex
      lastIndex - 范围内的最后一个索引,>= firstIndex
      isAdjusting - 是否为一系列多个事件中的一个,其中仍在进行更改
      参见:
    • addListSelectionListener

      public void addListSelectionListener(ListSelectionListener listener)
      向列表添加一个侦听器,以便在每次选择更改时得到通知;监听选择状态更改的首选方式。JList负责监听选择模型中的选择状态更改,并通知给定的侦听器每次更改。发送到侦听器的ListSelectionEvent具有将source属性设置为此列表的值。
      参数:
      listener - 要添加的ListSelectionListener
      参见:
    • removeListSelectionListener

      public void removeListSelectionListener(ListSelectionListener listener)
      从列表中删除一个选择侦听器。
      参数:
      listener - 要移除的ListSelectionListener
      参见:
    • getListSelectionListeners

      @BeanProperty(bound=false) public ListSelectionListener[] getListSelectionListeners()
      返回通过addListSelectionListener方式添加到此JList的所有ListSelectionListener的数组。
      返回:
      此列表上的所有ListSelectionListener,如果未添加任何侦听器,则返回空数组
      自:
      1.4
      参见:
    • setSelectionModel

      @BeanProperty(description="The selection model, recording which cells are selected.") public void setSelectionModel(ListSelectionModel selectionModel)
      将列表的selectionModel设置为非nullListSelectionModel实现。选择模型处理进行单个选择、连续范围选择和非连续选择的任务。

      这是一个JavaBeans绑定属性。

      参数:
      selectionModel - 实现选择的ListSelectionModel
      抛出:
      IllegalArgumentException - 如果selectionModelnull
      参见:
    • setSelectionMode

      @BeanProperty(bound=false, enumerationValues={"ListSelectionModel.SINGLE_SELECTION","ListSelectionModel.SINGLE_INTERVAL_SELECTION","ListSelectionModel.MULTIPLE_INTERVAL_SELECTION"}, description="The selection mode.") public void setSelectionMode(int selectionMode)
      设置列表的选择模式。这是一个覆盖方法,直接在选择模型上设置选择模式。

      以下列表描述了接受的选择模式:

      • ListSelectionModel.SINGLE_SELECTION - 一次只能选择一个列表索引。在此模式下,setSelectionIntervaladdSelectionInterval是等效的,两者都用第二个参数("lead")表示的索引替换当前选择。
      • ListSelectionModel.SINGLE_INTERVAL_SELECTION - 一次只能选择一个连续区间。在此模式下,addSelectionInterval的行为类似于setSelectionInterval(替换当前选择),除非给定的区间紧邻或重叠现有选择,并可用于扩展选择。
      • ListSelectionModel.MULTIPLE_INTERVAL_SELECTION - 在此模式下,可以选择任何内容。这是默认模式。
      参数:
      selectionMode - 选择模式
      抛出:
      IllegalArgumentException - 如果选择模式不是允许的模式之一
      参见:
    • getSelectionMode

      public int getSelectionMode()
      返回列表的当前选择模式。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      返回:
      当前选择模式
      参见:
    • getAnchorSelectionIndex

      @BeanProperty(bound=false) public int getAnchorSelectionIndex()
      返回锚定选择索引。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      返回:
      锚定选择索引
      参见:
    • getLeadSelectionIndex

      @BeanProperty(bound=false, description="The lead selection index.") public int getLeadSelectionIndex()
      返回主导选择索引。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      返回:
      主导选择索引
      参见:
    • getMinSelectionIndex

      @BeanProperty(bound=false) public int getMinSelectionIndex()
      返回最小选定的单元格索引,如果选择为空则返回-1。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      返回:
      最小选定的单元格索引,或-1
      参见:
    • getMaxSelectionIndex

      @BeanProperty(bound=false) public int getMaxSelectionIndex()
      返回最大选定的单元格索引,如果选择为空则返回-1。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      返回:
      最大选定的单元格索引
      参见:
    • isSelectedIndex

      public boolean isSelectedIndex(int index)
      如果指定的索引被选中,则返回true,否则返回false。这是一个覆盖方法,委托给列表的选择模型上同名方法。
      参数:
      index - 要查询选择状态的索引
      返回:
      true 如果指定的索引被选中,否则为 false
      参见:
    • isSelectionEmpty

      @BeanProperty(bound=false) public boolean isSelectionEmpty()
      如果没有选中任何内容,则返回 true,否则返回 false。这是一个代理方法,委托给列表的选择模型上同名的方法。
      返回:
      true 如果没有选中任何内容,否则为 false
      参见:
    • clearSelection

      public void clearSelection()
      清除选择;调用此方法后,isSelectionEmpty 将返回 true。这是一个代理方法,委托给列表的选择模型上同名的方法。
      参见:
    • setSelectionInterval

      public void setSelectionInterval(int anchor, int lead)
      选择指定的区间。包括 anchorlead 索引。 anchor 不必小于或等于 lead。这是一个代理方法,委托给列表的选择模型上同名的方法。

      有关小于 0 的值如何处理的详细信息,请参阅所使用的选择模型类的文档。

      参数:
      anchor - 要选择的第一个索引
      lead - 要选择的最后一个索引
      参见:
    • addSelectionInterval

      public void addSelectionInterval(int anchor, int lead)
      将选择设置为指定区间与当前选择的并集。包括 anchorlead 索引。 anchor 不必小于或等于 lead。这是一个代理方法,委托给列表的选择模型上同名的方法。

      有关小于 0 的值如何处理的详细信息,请参阅所使用的选择模型类的文档。

      参数:
      anchor - 要添加到选择中的第一个索引
      lead - 要添加到选择中的最后一个索引
      参见:
    • removeSelectionInterval

      public void removeSelectionInterval(int index0, int index1)
      将选择设置为指定区间与当前选择的差集。移除 index0index1 索引。 index0 不必小于或等于 index1。这是一个代理方法,委托给列表的选择模型上同名的方法。

      有关小于 0 的值如何处理的详细信息,请参阅所使用的选择模型类的文档。

      参数:
      index0 - 要从选择中移除的第一个索引
      index1 - 要从选择中移除的最后一个索引
      参见:
    • setValueIsAdjusting

      public void setValueIsAdjusting(boolean b)
      设置选择模型的 valueIsAdjusting 属性。当为 true 时,即将发生的选择更改应被视为单个更改的一部分。此属性在内部使用,通常开发人员不需要调用此方法。例如,在响应用户拖动时更新模型时,当拖动开始时,该属性的值设置为 true,当拖动完成时设置为 false。这允许侦听器仅在更改已经完成时更新,而不是处理所有中间值。

      如果要进行一系列应被视为单个更改的更改,可能需要直接使用此方法。

      这是一个代理方法,委托给列表的选择模型上同名的方法。有关更多详细信息,请参阅 ListSelectionModel.setValueIsAdjusting(boolean) 的文档。

      参数:
      b - 属性的新值
      参见:
    • getValueIsAdjusting

      public boolean getValueIsAdjusting()
      返回选择模型的 isAdjusting 属性的值。

      这是一个代理方法,委托给列表的选择模型上同名的方法。

      返回:
      选择模型的 isAdjusting 属性的值。
      参见:
    • getSelectedIndices

      public int[] getSelectedIndices()
      返回所有选定的索引数组,按照递增顺序排列。
      返回:
      所有选定的索引数组,按照递增顺序排列,如果没有选中任何内容则返回空数组
      参见:
    • setSelectedIndex

      @BeanProperty(bound=false, description="The index of the selected cell.") public void setSelectedIndex(int index)
      选择单个单元格。如果给定的索引大于或等于模型大小,则不执行任何操作。这是一个使用选择模型上的 setSelectionInterval 的便利方法。有关小于 0 的值如何处理的详细信息,请参阅所使用的选择模型类的文档。
      参数:
      index - 要选择的单元格的索引
      参见:
    • setSelectedIndices

      public void setSelectedIndices(int[] indices)
      将选择更改为给定数组指定的索引集。忽略大于或等于模型大小的索引。这是一个清除选择然后使用选择模型上的 addSelectionInterval 的便利方法来添加索引。有关小于 0 的值如何处理的详细信息,请参阅所使用的选择模型类的文档。
      参数:
      indices - 要选择的单元格索引数组,非空
      抛出:
      NullPointerException - 如果给定的数组为 null
      参见:
    • getSelectedValues

      @Deprecated @BeanProperty(bound=false) public Object[] getSelectedValues()
      Deprecated.
      As of JDK 1.7, replaced by getSelectedValuesList()
      返回所有选定值的数组,根据它们在列表中的索引按递增顺序排列。
      返回:
      选定的值数组,如果没有选中任何内容则返回空数组
      参见:
    • getSelectedValuesList

      @BeanProperty(bound=false) public List<E> getSelectedValuesList()
      返回所有选定项的列表,根据它们在列表中的索引按递增顺序排列。
      返回:
      所选项目,如果没有选中任何内容则返回空列表
      自:
      1.7
      参见:
    • getSelectedIndex

      public int getSelectedIndex()
      返回最小的选定单元格索引;当列表中只选择了一个项目时,返回该选择。当选择了多个项目时,返回最小的选定索引。如果没有选择,则返回-1

      此方法是一个代理,委托给getMinSelectionIndex

      返回:
      最小的选定单元格索引
      参见:
    • getSelectedValue

      @BeanProperty(bound=false) public E getSelectedValue()
      返回最小选定单元格索引的值;当列表中只选择了一个项目时,返回所选值。当选择了多个项目时,返回最小选定索引的值。如果没有选择,则返回null

      这是一个便利方法,简单地返回getMinSelectionIndex的模型值。

      返回:
      第一个选定值
      参见:
    • setSelectedValue

      public void setSelectedValue(Object anObject, boolean shouldScroll)
      从列表中选择指定的对象。如果传递的对象为null,则清除选择。
      参数:
      anObject - 要选择的对象
      shouldScroll - 如果列表应滚动以显示所选对象,则为true;否则为false
    • getPreferredScrollableViewportSize

      @BeanProperty(bound=false) public Dimension getPreferredScrollableViewportSize()
      计算显示visibleRowCount行所需的视口大小。此方法返回的值取决于布局方向:

      VERTICAL
      如果已设置fixedCellWidthfixedCellHeight(显式设置或通过指定原型单元格值),则这很简单。宽度只是fixedCellWidth加上列表的水平插入。高度是fixedCellHeight乘以visibleRowCount,再加上列表的垂直插入。

      如果fixedCellWidthfixedCellHeight没有指定,则使用启发式方法。如果模型为空,则宽度为fixedCellWidth,如果大于0,否则为256的硬编码值。高度是fixedCellHeight乘以visibleRowCount,如果fixedCellHeight大于0,否则为16乘以visibleRowCount的硬编码值。

      如果模型不为空,则宽度为首选大小的宽度,通常是最宽列表元素的宽度。高度是索引为0的单元格的高度乘以visibleRowCount,再加上列表的垂直插入。

      VERTICAL_WRAPHORIZONTAL_WRAP
      此方法简单地返回getPreferredSize的值。列表的ListUI应该重写getPreferredSize以返回适当的值。

      指定者:
      getPreferredScrollableViewportSize 在接口 Scrollable
      返回:
      包含显示visibleRowCount行所需的视口大小的尺寸
      参见:
    • getScrollableUnitIncrement

      public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction)
      返回滚动以显示下一个或上一个行(用于垂直滚动)或列(用于水平滚动)所需的距离。

      对于水平滚动,如果布局方向为VERTICAL,则返回列表的字体大小(如果字体为null则返回1)。

      指定者:
      getScrollableUnitIncrement 在接口 Scrollable
      参数:
      visibleRect - 视口内可见的视图区域
      orientation - SwingConstants.HORIZONTALSwingConstants.VERTICAL
      direction - 小于或等于零向上/后滚动,大于零向下/前滚动
      返回:
      指定方向滚动的“单位”增量;始终为正数
      抛出:
      IllegalArgumentException - 如果visibleRectnull,或orientation不是SwingConstants.VERTICALSwingConstants.HORIZONTAL之一
      参见:
    • getScrollableBlockIncrement

      public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction)
      返回滚动以显示下一个或上一个块所需的距离。

      对于垂直滚动,使用以下规则:

      • 向下滚动时,返回滚动的距离,使最后可见的元素成为第一个完全可见的元素
      • 向上滚动时,返回滚动的距离,使第一个可见的元素成为最后一个完全可见的元素
      • 如果列表为空,则返回visibleRect.height

      对于水平滚动,当布局方向为VERTICAL_WRAPHORIZONTAL_WRAP时:

      • 向右滚动时,返回滚动的距离,使最后可见的元素成为第一个完全可见的元素
      • 向左滚动时,返回滚动的距离,使第一个可见的元素成为最后一个完全可见的元素
      • 如果列表为空,则返回visibleRect.width

      对于水平滚动和VERTICAL方向,返回visibleRect.width

      请注意,visibleRect的值必须等于this.getVisibleRect()的值。

      指定者:
      getScrollableBlockIncrement 在接口 Scrollable
      参数:
      visibleRect - 视口内可见的视图区域
      orientation - SwingConstants.HORIZONTALSwingConstants.VERTICAL
      direction - 小于或等于零向上/后滚动,大于零向下/前滚动
      返回:
      指定方向滚动的“块”增量;始终为正数
      抛出:
      IllegalArgumentException - 如果visibleRectnull,或orientation不是SwingConstants.VERTICALSwingConstants.HORIZONTAL之一
      参见:
    • getScrollableTracksViewportWidth

      @BeanProperty(bound=false) public boolean getScrollableTracksViewportWidth()
      如果此JList显示在JViewport中且视口宽度大于列表的首选宽度,或者布局方向为HORIZONTAL_WRAPvisibleRowCount <= 0,则返回true;否则返回false

      如果返回false,则不跟踪视口的宽度。这允许如果JViewport本身嵌入在JScrollPane中,则进行水平滚动。

      指定者:
      getScrollableTracksViewportWidth 在接口 Scrollable
      返回:
      是否应强制包含视口的宽度与列表的宽度相匹配
      参见:
    • getScrollableTracksViewportHeight

      @BeanProperty(bound=false) public boolean getScrollableTracksViewportHeight()
      如果此JList显示在JViewport中且视口高度大于列表的首选高度,或者布局方向为VERTICAL_WRAPvisibleRowCount <= 0,则返回true;否则返回false

      如果返回false,则不跟踪视口的高度。这允许如果JViewport本身嵌入在JScrollPane中,则进行垂直滚动。

      指定者:
      getScrollableTracksViewportHeight 在接口 Scrollable
      返回:
      是否应强制包含视口的高度与列表的高度相匹配
      参见:
    • paramString

      protected String paramString()
      返回此 JListString 表示形式。此方法仅用于调试目的,返回的 String 的内容和格式可能因实现而异。返回的 String 可能为空,但不会是 null
      覆盖:
      paramString 在类 JComponent
      返回:
      JListString 表示形式。
    • getAccessibleContext

      @BeanProperty(bound=false) public AccessibleContext getAccessibleContext()
      获取与此 JList 关联的 AccessibleContext。对于 JListAccessibleContext 采用 AccessibleJList 的形式。

      如有必要,将创建一个新的 AccessibleJList 实例。

      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 Component
      返回:
      作为此 JListAccessibleContextAccessibleJList