Is there a lazy JList download?

Is there a way to implement lazy loading using Swing JList?

+3
source share
4 answers

In a way, yes. You can create a custom ListModelone that uses getElementAt(int index)to load the correct value if it is not already loaded. See an example in Javadocs for JList:

// This list model has about 2^16 elements.  Enjoy scrolling.

ListModel bigData = new AbstractListModel() {
    public int getSize() { return Short.MAX_VALUE; }
    public Object getElementAt(int index) { return "Index " + index; }
};
+11
source

I solved it. I skipped the solution discussed at the top of the JList API documentation.

In the source code of the example that I posted in another answer to this question, add this line (and comment) after creating the JList:

  // Tell JList to test rendered size using this one value rather
  // than every item in ListModel. (Much faster initialization)
  myList.setPrototypeCellValue("Index " + Short.MAX_VALUE); 

, JList ListModel, . , , JList , . () JList.

:

http://java.sun.com/javase/6/docs/api/javax/swing/JList.html#prototype_example

+5

, ListModel, , :

fireIntervalAdded(Object source,int index0, int index1)

, . , JList .

. Javadoc fireIntervalAdded

+2

. JList .

Swing ListModel, . , Swing , ( , ).

"TestJList", . println , "getElementAt". , Swing ListModel.

MacBook unibody, Mac OS X 10.6.2 Java:

"1.6.0_17" Java (TM) SE Runtime ( 1.6.0_17-b04-248-10M3025) Java HotSpot (TM) 64- VM ( 14.3-b01-101, )

import javax.swing.*;

/**
 *  This example proves that a JList is NOT lazily-loaded.
 */
public class TestJList {
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("HelloWorldSwing");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create an artificial ListModel. 
        ListModel bigData =
            new AbstractListModel() {
                public int getSize() {
                    // return Short.MAX_VALUE;  // Try this if you have a long while to waste.
                    return 10;
                }

                public Object getElementAt(int index) {
                    System.out.println("Executing 'getElementAt' # " + index);
                    return "Index " + index;
                }
            };

        // Create a JList.
        JList myList = new JList(bigData);

        // Add the JList to the frame.
        frame.getContentPane().add(myList);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application GUI.
        javax.swing.SwingUtilities.invokeLater(
            new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
    }
}

, :

Executing 'getElementAt' # 0
Executing 'getElementAt' # 1
Executing 'getElementAt' # 2
Executing 'getElementAt' # 3
Executing 'getElementAt' # 4
Executing 'getElementAt' # 5
Executing 'getElementAt' # 6
Executing 'getElementAt' # 7
Executing 'getElementAt' # 8
Executing 'getElementAt' # 9
Executing 'getElementAt' # 0
Executing 'getElementAt' # 1
Executing 'getElementAt' # 2
Executing 'getElementAt' # 3
Executing 'getElementAt' # 4
Executing 'getElementAt' # 5
Executing 'getElementAt' # 6
Executing 'getElementAt' # 7
Executing 'getElementAt' # 8
Executing 'getElementAt' # 9

-fin -

+1
source

Source: https://habr.com/ru/post/1708190/


All Articles