Module  java.desktop
软件包  javax.swing

Class JList<E>

  • 参数类型
    E - 此列表的元素的类型
    All Implemented Interfaces:
    ImageObserverMenuContainerSerializableAccessibleScrollable


    @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

    使用为您自动构建只读ListModel实例的JList构造函数可以轻松显示数组或对象向量:

       // Create a JList that displays strings from an array String[] data = {"one", "two", "three", "four"}; JList<String> myList = new JList<String>(data); // Create a JList that displays the superclasses of JList.class, by // creating it with a Vector populated with this data 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); // The automatically created model is stored in JList's "model" // property, which you can retrieve ListModel<Class<?>> model = myList.getModel(); for(int i = 0; i < model.getSize(); i++) { System.out.println(model.getElementAt(i)); }  

    A ListModel可以通过构造函数或setModel方法直接提供给一个JList 200新X-45旗新新200新新200新200新200新新200新200新新200新200新200新新200新200新新200新200新新200新200新200新新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200 正确的ListModel实现通知已经添加到它的javax.swing.event.ListDataListener的集合,每次发生更改。 这些更改的特征是javax.swing.event.ListDataEvent ,它标识已修改,添加或删除的列表索引的范围。 JListListUI负责通过聆听模型来保持视觉表示与更改最新。

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

       // This list model has about 2^16 elements. Enjoy scrolling. ListModel<String> bigData = new AbstractListModel<String>() { public int getSize() { return Short.MAX_VALUE; } public String getElementAt(int index) { return "Index " + index; } };  

    JList的选择状态由另一个单独的模型( ListSelectionModel的实例) ListSelectionModel JList在构建中使用选择模型初始化,并且还包含查询或设置此选择模型的方法。 此外, JList提供了方便的方法来轻松管理选择。 这些方法,例如setSelectedIndexgetSelectedValue ,是涵盖与选择模型交互的细节的覆盖方法。 默认情况下, JList的选择模型被配置为允许一次选择项目的任意组合; 选择模式MULTIPLE_INTERVAL_SELECTION 选择模式可以直接在选型上更改,也可以通过JList的封面方式进行更改。 ListUI

    每当对选择进行更改时,正确的ListSelectionModel实现通知已添加到其中的一组javax.swing.event.ListSelectionListener 新新javax.swing.event.ListSelectionEvent

    侦听列表选择变化的首选方法是添加ListSelectionListener直接年代到JList JList

    听取选择变更的责任是为了使列表的视觉表示保持最新,这与列表的ListUI

    JList中的单元格JList由名为单元格渲染器的委托处理,该列表作为cellRenderer属性安装在列表中。 渲染器提供了一个java.awt.Component ,它像“橡皮图章”一样用来绘制单元格。 每次单元格需要绘制时,列表的ListUI询问单元格渲染器的组件,将其移动到位,并通过其paint方法绘制单元格的内容。 使用JLabel组件呈现的默认单元格渲染器由列表的ListUI安装。 您可以使用以下代码替换您自己的渲染器:

       // Display an icon and a string for each object in the list. class MyCellRenderer extends JLabel implements ListCellRenderer<Object> { static final ImageIcon longIcon = new ImageIcon("long.gif"); static final ImageIcon shortIcon = new ImageIcon("short.gif"); // This is the only method defined by ListCellRenderer. // We just reconfigure the JLabel each time we're called. public Component getListCellRendererComponent( JList<?> list, // the list Object value, // value to display int index, // cell index boolean isSelected, // is the cell selected boolean cellHasFocus) // does the cell have focus { 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); // We don't want the JList implementation to compute the width // or height of all of the list cells, so we give it a string // that's as big as we'll need for any cell. It uses this to // compute values for the fixedCellWidth and fixedCellHeight // properties. bigDataList.setPrototypeCellValue("Index 1234567890");  

    JList不直接实现滚动。 要创建一个滚动的列表,使其成为JScrollPane的视口视图。 例如:

      JScrollPane scrollPane = new JScrollPane(myList);
    
     // Or in two steps:
     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("Double clicked on Item " + index);
              }
         }
     };
     list.addMouseListener(mouseListener); 

    警告: Swing不是线程安全的。 欲了解更多信息,请参阅Swing's Threading Policy

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

    有关进一步的文件,请参见The Java Tutorial中的How to Use Lists

    从以下版本开始:
    1.2
    另请参见:
    ListModelAbstractListModelDefaultListModelListSelectionModelDefaultListSelectionModelListCellRendererDefaultListCellRendererSerialized Form
    • 构造方法详细信息

      • JList

        public JList​(ListModel<E> dataModel)
        构造一个JList ,显示来自指定的non-null型号的元素。 所有JList构造函数都委托给这个。

        该构造函数使用ToolTipManager注册该列表,允许由单元格渲染器提供工具提示。

        参数
        dataModel - 列表的模型
        异常
        IllegalArgumentException - 如果型号是 null
      • JList

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

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

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

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

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

        参数
        listData -的 Vector被加载到数据模型, non-null
      • JList

        public JList​()
        构造一个具有空的只读模型的 JList
    • 方法详细信息

      • getUI

        public ListUI getUI​()
        返回 ListUI ,呈现该组件的外观和感觉对象。
        重写:
        getUI中的 JComponent
        结果
        呈现此组件的 ListUI对象
      • getPrototypeCellValue

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

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

        当列表太长而不允许ListUI计算每个单元格的宽度/高度时,此方法很有用,并且存在已知占据与其他任何其他空间一样多的空间的单个单元格值,即所谓的原型。

        虽然所有三种的prototypeCellValuefixedCellHeightfixedCellWidth性质可通过该方法被修改, PropertyChangeEvent通知仅发送的时prototypeCellValue属性的变化。

        要查看设置此属性的示例,请参阅上面的class description

        此属性的默认值为null

        这是一个JavaBeans绑定属性。

        参数
        prototypeCellValue - 基于 fixedCellWidthfixedCellHeight
        另请参见:
        getPrototypeCellValue()setFixedCellWidth(int)setFixedCellHeight(int)Container.addPropertyChangeListener(java.beans.PropertyChangeListener)
      • getFixedCellWidth

        public int getFixedCellWidth​()
        返回 fixedCellWidth属性的值。
        结果
        固定单元宽度
        另请参见:
        setFixedCellWidth(int)
      • getFixedCellHeight

        public int getFixedCellHeight​()
        返回 fixedCellHeight属性的值。
        结果
        固定电池高度
        另请参见:
        setFixedCellHeight(int)
      • setCellRenderer

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

        如果prototypeCellValue属性为non-null ,则设置单元格渲染器也会导致重新计算fixedCellWidthfixedCellHeight属性。 仅生成一个PropertyChangeEvent - 对于cellRenderer属性。

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

        这是一个JavaBeans绑定属性。

        参数
        cellRenderer - 绘制列表单元格的 ListCellRenderer
        另请参见:
        getCellRenderer()
      • getSelectionForeground

        public Color getSelectionForeground​()
        返回用于绘制所选项目前景的颜色。 DefaultListCellRenderer使用此颜色来绘制处于选定状态的项目的前景,大多数ListUI实现中安装的渲染器也是ListUI
        结果
        绘制所选项目的前景的颜色
        另请参见:
        setSelectionForeground(java.awt.Color)DefaultListCellRenderer
      • getSelectionBackground

        public Color getSelectionBackground​()
        返回用于绘制所选项目背景的颜色。 DefaultListCellRenderer使用此颜色来绘制所选状态的项目的背景,大多数ListUI实现中安装的渲染器也是ListUI
        结果
        绘制所选项目的背景颜色
        另请参见:
        setSelectionBackground(java.awt.Color)DefaultListCellRenderer
      • getVisibleRowCount

        public int getVisibleRowCount​()
        返回visibleRowCount属性的值。 有关如何解释此值的详细信息,请参阅setVisibleRowCount(int)的文档。
        结果
        的价值 visibleRowCount属性。
        另请参见:
        setVisibleRowCount(int)
      • 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 - 一个整数,指定要显示的首选行数,而不需要滚动
        另请参见:
        getVisibleRowCount()getPreferredScrollableViewportSize()setLayoutOrientation(int)JComponent.getVisibleRect()JViewport
      • getLayoutOrientation

        public int getLayoutOrientation​()
        返回列表的布局方向属性: VERTICAL如果布局是单列单元格, VERTICAL_WRAP如果布局是“报纸样式”,内容垂直然后水平流动,如果布局为“报纸样式”,则内容为 HORIZONTAL_WRAP水平流动然后垂直。
        结果
        该值为 layoutOrientation属性
        从以下版本开始:
        1.4
        另请参见:
        setLayoutOrientation(int)
      • setLayoutOrientation

        @BeanProperty(visualUpdate=true,
                      enumerationValues={"JList.VERTICAL","JList.HORIZONTAL_WRAP","JList.VERTICAL_WRAP"},
                      description="Defines the way list cells are layed 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 

        这些布局的描述如下:

        Describes layouts VERTICAL,HORIZONTAL_WRAP, and VERTICAL_WRAP Value Description VERTICAL Cells are layed out vertically in a single column. HORIZONTAL_WRAP Cells are layed out horizontally, wrapping to a new row as necessary. If the visibleRowCount property is less than or equal to zero, wrapping is determined by the width of the list; otherwise wrapping is done in such a way as to ensure visibleRowCount rows in the list. VERTICAL_WRAP Cells are layed out vertically, wrapping to a new column as necessary. If the visibleRowCount property is less than or equal to zero, wrapping is determined by the height of the list; otherwise wrapping is done at visibleRowCount rows.

        此属性的默认值为VERTICAL

        参数
        layoutOrientation -新的布局方向,其一: VERTICALHORIZONTAL_WRAP或者 VERTICAL_WRAP
        异常
        IllegalArgumentException - 如果 layoutOrientation不是允许值之一
        从以下版本开始:
        1.4
        另请参见:
        getLayoutOrientation()setVisibleRowCount(int)getScrollableTracksViewportHeight()getScrollableTracksViewportWidth()
      • getFirstVisibleIndex

        @BeanProperty(bound=false)
        public int getFirstVisibleIndex​()
        返回当前可见的最小列表索引。 在从左到右的componentOrientation ,第一个可见单元格被发现最接近列表的左上角。 从右到左的方向,它被发现最靠近右上角。 如果没有可见或列表为空,则返回-1 请注意,返回的单元格只能部分可见。
        结果
        第一个可见单元格的索引
        另请参见:
        getLastVisibleIndex()JComponent.getVisibleRect()
      • getLastVisibleIndex

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

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

        如果给定的索引在列表的单元格范围之外,则此方法不会产生任何结果。

        参数
        index - 单元格的索引使其可见
        另请参见:
        JComponent.scrollRectToVisible(java.awt.Rectangle)JComponent.getVisibleRect()
      • setDragEnabled

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

        尊重这个属性的工作,并承认用户拖动手势,在于外观和感觉的实现,特别是列表的ListUI 当启用自动拖动处理时,大多数外观(包括BasicLookAndFeel子类)的外观和感觉都可以在用户按住鼠标按钮在某个项目上进行拖放操作,然后将鼠标移动几个像素。 因此,将此属性设置为true可以对选择行为如何产生微妙的影响。

        如果一个外观使用的是忽略这个属性,你仍然可以开始拖拽,并通过调用拖放操作exportAsDrag的列表中的TransferHandler

        参数
        b - 是否启用自动拖动处理
        异常
        HeadlessException - 如果 btrueGraphicsEnvironment.isHeadless()返回 true
        从以下版本开始:
        1.4
        另请参见:
        GraphicsEnvironment.isHeadless()getDragEnabled()JComponent.setTransferHandler(javax.swing.TransferHandler)TransferHandler
      • getDragEnabled

        public boolean getDragEnabled​()
        返回是否启用自动拖动处理。
        结果
        的价值 dragEnabled属性
        从以下版本开始:
        1.4
        另请参见:
        setDragEnabled(boolean)
      • 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()getDropLocation()JComponent.setTransferHandler(javax.swing.TransferHandler)TransferHandler
      • getDropLocation

        @BeanProperty(bound=false)
        public final JList.DropLocation getDropLocation​()
        返回在组件的DnD操作期间该组件应该可视地指示为放置位置的位置,如果没有显示当前位置,则返回null

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

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

        默认情况下, ListUI对此属性的更改的责任和视觉上指示放置位置的ListUI在于列表的ListUI ,它可以直接绘制和/或安装单元格渲染器。 希望实现自定义放置位置绘画和/或替换默认单元格渲染器的开发人员可能需要遵守此属性。

        结果
        下降位置
        从以下版本开始:
        1.6
        另请参见:
        setDropMode(javax.swing.DropMode)TransferHandler.canImport(TransferHandler.TransferSupport)
      • getNextMatch

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

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

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

        重写:
        getToolTipTextJComponent
        参数
        event - 获取工具提示文本的 MouseEvent
        结果
        一个包含工具提示的字符串
        另请参见:
        JComponent.setToolTipText(java.lang.String)JComponent.getToolTipText()
      • locationToIndex

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

        这是一种封面方法,委托给列表ListUI同名的方法。 -1 ListUI

        参数
        location - 点的坐标
        结果
        最接近给定位置的单元 -1 ,或 -1
      • indexToLocation

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

        这是一种封面方法,委托给列表ListUI相同名称的ListUI 新新null的新新ListUI

        参数
        index - 细胞指数
        结果
        细胞的起源,或 null
      • getCellBounds

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

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

        这是一种封面方法,委托给列表ListUI相同名称的ListUI 它返回null如果列表中没有ListUI

        参数
        index0 - 范围内的第一个索引
        index1 - 范围内的第二个索引
        结果
        单元格范围的边界矩形,或 null
      • setListData

        public void setListData​(E[] listData)
        从一个项目数组构造只读ListModel ,并使用此模型调用setModel

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

        参数
        listData - 包含要在列表中显示的项目的 E的数组
        另请参见:
        setModel(javax.swing.ListModel<E>)
      • setListData

        public void setListData​(Vector<? extends E> listData)
        Vector构造只读ListModel ,并使用此模型调用setModel

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

        参数
        listData - 一个包含要在列表中显示的项目的 Vector
        另请参见:
        setModel(javax.swing.ListModel<E>)
      • fireSelectionValueChanged

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

        该方法构造了一个ListSelectionEvent ,该列表作为源和指定的参数,并将其发送到注册的ListSelectionListeners

        参数
        firstIndex - 范围内的第一个索引, <= lastIndex
        lastIndex - 范围内的最后一个索引, >= firstIndex
        isAdjusting - 这是否是一系列多重事件,其中仍然发生变化
        另请参见:
        addListSelectionListener(javax.swing.event.ListSelectionListener)removeListSelectionListener(javax.swing.event.ListSelectionListener)ListSelectionEventEventListenerList
      • addListSelectionListener

        public void addListSelectionListener​(ListSelectionListener listener)
        将一个监听器添加到列表中,每次发生更改时都会被通知; 倾听选择状态变化的首选方式。 JList负责监听选择模型中的选择状态更改,并通知给定的监听者每次更改。 ListSelectionEvent发送给监听器有一个source属性设置为此列表。
        参数
        listener - 要添加的 ListSelectionListener
        另请参见:
        getSelectionModel()getListSelectionListeners()
      • setSelectionModel

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

        这是一个JavaBeans绑定属性。

        参数
        selectionModel - 执行选择的 ListSelectionModel
        异常
        IllegalArgumentException - 如果 selectionModelnull
        另请参见:
        getSelectionModel()
      • 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()
      • getSelectionMode

        public int getSelectionMode​()
        返回列表的当前选择模式。 这是一种覆盖方法,委托给列表选择模型上相同名称的方法。
        结果
        当前选择模式
        另请参见:
        setSelectionMode(int)
      • getMinSelectionIndex

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

        @BeanProperty(bound=false)
        public int getMaxSelectionIndex​()
        返回最大的所选单元-1引,如果选择为空,则返回-1 这是一种覆盖方法,委托给列表选择模型上相同名称的方法。
        结果
        最大的选择细胞指数
        另请参见:
        ListSelectionModel.getMaxSelectionIndex()
      • isSelectedIndex

        public boolean isSelectedIndex​(int index)
        如果选择了指定的索引,则返回true ,否则为false 这是一种覆盖方法,委托给列表选择模型上相同名称的方法。
        参数
        index - 要查询选择状态的索引
        结果
        true如果选择了指定的索引,否则 false
        另请参见:
        ListSelectionModel.isSelectedIndex(int)setSelectedIndex(int)
      • clearSelection

        public void clearSelection​()
        清除选择; 调用此方法后, isSelectionEmpty将返回true 这是一种覆盖方法,委托给列表选择模型上相同名称的方法。
        另请参见:
        ListSelectionModel.clearSelection()isSelectionEmpty()
      • setValueIsAdjusting

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

        如果进行一系列更改,那么您可能需要直接使用它,这些更改应被视为单个更改的一部分。

        这是一种覆盖方法,委托给列表选择模型上相同名称的方法。 有关详细信息,请参阅ListSelectionModel.setValueIsAdjusting(boolean)的文档。

        参数
        b - 该物业的新值
        另请参见:
        ListSelectionModel.setValueIsAdjusting(boolean)ListSelectionEvent.getValueIsAdjusting()getValueIsAdjusting()
      • getSelectedIndex

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

        这种方法是一个封面,委托给getMinSelectionIndex

        结果
        最小的选定单元索引
        另请参见:
        getMinSelectionIndex()addListSelectionListener(javax.swing.event.ListSelectionListener)
      • setSelectedValue

        public void setSelectedValue​(Object anObject,
                                     boolean shouldScroll)
        从列表中选择指定的对象。
        参数
        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

        如果模型不为空,则宽度是首选大小的宽度,通常是最宽列表元素的宽度。 高度是fixedCellHeight乘以visibleRowCount ,加上列表的垂直插图。

        VERTICAL_WRAPHORIZONTAL_WRAP
        该方法只是从getPreferredSize返回值。 该列表的ListUI预计将覆盖getPreferredSize以返回适当的值。

        Specified by:
        getPreferredScrollableViewportSize在接口 Scrollable
        结果
        包含显示 visibleRowCount行所需视口大小的维度
        另请参见:
        getPreferredScrollableViewportSize()setPrototypeCellValue(E)
      • getScrollableUnitIncrement

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

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

        Specified by:
        getScrollableUnitIncrement在接口 Scrollable
        参数
        visibleRect - 在视口内可见的视图区域
        orientation - SwingConstants.HORIZONTAL或者 SwingConstants.VERTICAL
        direction - 向上/向下滚动小于或等于零,向下/向前大于零
        结果
        在指定方向滚动的“单位”增量; 总是积极的
        异常
        IllegalArgumentException - 如果 visibleRectnull ,或 orientation不是 SwingConstants.VERTICALSwingConstants.HORIZONTAL
        另请参见:
        getScrollableBlockIncrement(java.awt.Rectangle, int, int)Scrollable.getScrollableUnitIncrement(java.awt.Rectangle, int, int)
      • getScrollableBlockIncrement

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

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

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

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

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

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

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

        Specified by:
        getScrollableBlockIncrement在接口 Scrollable
        参数
        visibleRect - 在视口内可见的视图区域
        orientation - SwingConstants.HORIZONTAL或者 SwingConstants.VERTICAL
        direction - 向上/向后滚动小于或等于零,大于零用于向下/向前
        结果
        在指定方向滚动的“块”增量; 总是积极的
        异常
        IllegalArgumentException - 如果 visibleRectnull ,或 orientation不是 SwingConstants.VERTICALSwingConstants.HORIZONTAL
        另请参见:
        getScrollableUnitIncrement(java.awt.Rectangle, int, int)Scrollable.getScrollableBlockIncrement(java.awt.Rectangle, int, int)
      • getScrollableTracksViewportWidth

        @BeanProperty(bound=false)
        public boolean getScrollableTracksViewportWidth​()
        返回true ,如果这JList显示在JViewport和视口比所述列表的优选宽度,或者如果布局方向为HORIZONTAL_WRAPvisibleRowCount <= 0 ; 否则返回false

        如果是false ,那么不要跟踪视口的宽度。 这允许水平滚动,如果JViewport本身嵌入在一个JScrollPane

        Specified by:
        getScrollableTracksViewportWidth在接口 Scrollable
        结果
        封闭的视口是否应强制列表的宽度与其自身匹配
        另请参见:
        Scrollable.getScrollableTracksViewportWidth()
      • getScrollableTracksViewportHeight

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

        如果是false ,那么不要跟踪视口的高度。 这允许垂直滚动,如果JViewport本身嵌入在一个JScrollPane

        Specified by:
        getScrollableTracksViewportHeight在接口 Scrollable
        结果
        封闭视口是否强制列表的高度与其自身匹配
        另请参见:
        Scrollable.getScrollableTracksViewportHeight()
      • paramString

        protected String paramString​()
        返回此JListString表示。 该方法仅用于调试目的,并且返回的String的内容和格式可能因实现而异。 返回的String可能为空,但可能不是null
        重写:
        paramStringJComponent
        结果
        一个 String代表 JList