2011-01-06 6 views
3

Gibt es eine Möglichkeit, Ergebnisse in JList paginieren, ich habe 100 Ergebnisse gezeigt, ich möchte nur 20 jedes Mal zeigen .. Ich dachte an die Verwendung von Tabellen, um mein Ergebnis anzuzeigen, aber ich zeige Tweets, so es ist ein JPanel, das Bild und Text hat ... etc, so dass es eine JList istKann ich eine JList paginieren

+0

Dies wird helfen, http://stackoverflow.com/questions/1481138/how-to-make-pagination-in- Swing-Java –

Antwort

2

Werfen Sie einen Blick auf diese link, die eine paginierte jlist anzeigt. Hier

ist die Klasse:

/** 
* A paginated list. Only displays a specific number of rows 
* and allows you to page backwards and forwards through the list 
* with the help of a toolbar. 
*/ 
public class PaginatedList extends JPanel { 

    private final int pageSize; 
    private final JList list; 
    private final ListModel model; 

    private final int lastPageNum; 
    private int currPageNum;  
    private JLabel countLabel ; 
    private JButton first, prev, next, last; 

    /** 
    * @param list the jlist 
    * @param pageSize the number of rows visible in the jlist 
    */ 
    public PaginatedList(JList list, int pageSize) { 
     super(); 
     this.pageSize = pageSize; 
     this.list = list; 
     this.model = list.getModel(); 

     //work out how many pages there are 
     this.lastPageNum = model.getSize()/pageSize + (model.getSize() % pageSize != 0 ? 1 : 0); 
     this.currPageNum = 1; 

     setLayout(new BorderLayout()); 
     countLabel = new JLabel() ; 
     add(countLabel, BorderLayout.NORTH); 
     add(list, BorderLayout.CENTER); 
     add(createControls(), BorderLayout.SOUTH); 
     updatePage(); 
    } 

    private JPanel createControls() { 
     first = new JButton(new AbstractAction("<<") { 
      public void actionPerformed(ActionEvent e) { 
       currPageNum = 1; 
       updatePage(); 
      } 
     }); 

     prev = new JButton(new AbstractAction("<") { 
      public void actionPerformed(ActionEvent e) { 
       if (--currPageNum <= 0) 
        currPageNum = 1;     
       updatePage(); 
      } 
     }); 

     next = new JButton(new AbstractAction(">") { 
      public void actionPerformed(ActionEvent e) { 
       if (++currPageNum > lastPageNum) 
        currPageNum = lastPageNum; 
       updatePage(); 

      } 
     }); 

     last = new JButton(new AbstractAction(">>") { 
      public void actionPerformed(ActionEvent e) { 
       currPageNum = lastPageNum; 
       updatePage(); 
      } 
     }); 

     JPanel bar = new JPanel(new GridLayout(1, 4)); 
     bar.add(first); 
     bar.add(prev); 
     bar.add(next); 
     bar.add(last); 
     return bar; 
    } 

    private void updatePage() { 

     //replace the list's model with a new model containing 
     //only the entries in the current page. 
     final DefaultListModel page = new DefaultListModel(); 
     final int start = (currPageNum - 1) * pageSize; 
     int end = start + pageSize; 
     if (end >= model.getSize()) { 
      end = model.getSize(); 
     } 
     for (int i = start; i < end; i++) { 
      page.addElement(model.getElementAt(i)); 
     } 
     list.setModel(page); 

     //update the label 
     countLabel.setText("Page " + currPageNum + "/" + lastPageNum); 

     // update buttons 
     final boolean canGoBack = currPageNum != 1; 
     final boolean canGoFwd = currPageNum != lastPageNum; 
     first.setEnabled(canGoBack); 
     prev.setEnabled(canGoBack); 
     next.setEnabled(canGoFwd); 
     last.setEnabled(canGoFwd); 
    }  
} 

Beispiel Nutzung:

public static void main(String args[]) throws Exception { 

    // create 100 elements of dummy data. 
    Integer[] data = new Integer[100]; 
    for (int i = 0; i < data.length; i++) { 
     data[i] = i + 1; 
    } 

    // create a paginated list with page size 20 
    PaginatedList list = new PaginatedList(new JList(data), 20); 

    // add it to a frame 
    JFrame f = new JFrame(); 
    f.add(list); 
    f.setSize(100, 100); 
    f.pack(); 
    f.setVisible(true); 
} 
+0

vielen Dank .. das ist einfach toll .. werde es jetzt versuchen – AhmadAssaf