Java/SWT JFace Eclipse/List Viewer

Материал из Java эксперт
Перейти к: навигация, поиск

Demonstrates ListViewer

   <source lang="java">

import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.ApplicationWindow; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; /**

* This class demonstrates ListViewer.
*/

public class FoodList extends ApplicationWindow {

 // The healthy filter
 private HealthyFilter filter = new HealthyFilter();
 /**
  * FoodList constructor
  */
 public FoodList() {
   super(null);
 }
 /**
  * Runs the application
  */
 public void run() {
   // Don"t return from open() until window closes
   setBlockOnOpen(true);
   // Open the main window
   open();
   // Dispose the display
   Display.getCurrent().dispose();
 }
 /**
  * Configures the shell
  * 
  * @param shell
  *            the shell
  */
 protected void configureShell(Shell shell) {
   super.configureShell(shell);
   shell.setText("Food List");
 }
 /**
  * Creates the main window"s contents
  * 
  * @param parent
  *            the main window
  * @return Control
  */
 protected Control createContents(Composite parent) {
   Composite composite = new Composite(parent, SWT.NONE);
   composite.setLayout(new GridLayout(1, false));
   // Add a checkbox to toggle filter
   Button filterHealthy = new Button(composite, SWT.CHECK);
   filterHealthy.setText("&Show only healthy");
   final ListViewer lv = new ListViewer(composite);
   lv.setContentProvider(new FoodContentProvider());
   lv.setLabelProvider(new FoodLabelProvider());
   lv.setInput(new GroceryList());
   // When user checks the checkbox, toggle the filter
   filterHealthy.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent event) {
       if (((Button) event.widget).getSelection())
         lv.addFilter(filter);
       else
         lv.removeFilter(filter);
     }
   });
   parent.pack();
   return composite;
 }
 /**
  * The application entry point
  * 
  * @param args
  *            the command line arguments
  */
 public static void main(String[] args) {
   new FoodList().run();
 }

} /**

* This class filters only healthy items from the grocery list
*/

class HealthyFilter extends ViewerFilter {

 /**
  * Returns whether the specified element passes this filter
  * 
  * @param arg0
  *            the viewer
  * @param arg1
  *            the parent element
  * @param arg2
  *            the element
  * @return boolean
  */
 public boolean select(Viewer arg0, Object arg1, Object arg2) {
   return ((Food) arg2).isHealthy();
 }

} /**

* This class represents a type of food
*/

class Food {

 // The name of the food
 private String name;
 // Is it healthy?
 private boolean healthy;
 /**
  * Food constructor
  * 
  * @param name
  *            the name
  * @param healthy
  *            whether or not it"s healthy
  */
 public Food(String name, boolean healthy) {
   this.name = name;
   this.healthy = healthy;
 }
 /**
  * Gets whether this is healthy
  * 
  * @return boolean
  */
 public boolean isHealthy() {
   return healthy;
 }
 /**
  * Gets the name
  * 
  * @return String
  */
 public String getName() {
   return name;
 }

} /**

* This class provides the labels for the FoodList application
*/

class FoodLabelProvider implements ILabelProvider {

 /**
  * ListViewers don"t support images
  * 
  * @param arg0
  *            the element
  * @return Image
  */
 public Image getImage(Object arg0) {
   return null;
 }
 /**
  * Gets the text for an element
  * 
  * @param arg0
  *            the element
  * @return String
  */
 public String getText(Object arg0) {
   return ((Food) arg0).getName();
 }
 /**
  * Adds a listener
  * 
  * @param arg0
  *            the listener
  */
 public void addListener(ILabelProviderListener arg0) {
   // Throw it away
 }
 /**
  * Disposes any resources
  */
 public void dispose() {
   // Nothing to dispose
 }
 /**
  * Returns whether changing the specified property for the specified element
  * affect the label
  * 
  * @param arg0
  *            the element
  * @param arg1
  *            the property
  * @return boolean
  */
 public boolean isLabelProperty(Object arg0, String arg1) {
   return false;
 }
 /**
  * Removes a listener
  * 
  * @param arg0
  *            the listener
  */
 public void removeListener(ILabelProviderListener arg0) {
   // Ignore
 }

} /**

* This class contains all the foods on the "grocery list"
*/

class GroceryList {

 // Holds the foods
 private List foods;
 /**
  * Constructs a grocery list
  */
 public GroceryList() {
   foods = new ArrayList();
   // Add some foods
   foods.add(new Food("Broccoli", true));
   foods.add(new Food("Bundt Cake", false));
   foods.add(new Food("Cabbage", true));
   foods.add(new Food("Candy Canes", false));
   foods.add(new Food("Eggs", true));
   foods.add(new Food("Potato Chips", false));
   foods.add(new Food("Milk", true));
   foods.add(new Food("Soda", false));
   foods.add(new Food("Chicken", true));
   foods.add(new Food("Cinnamon Rolls", false));
 }
 /**
  * Returns the foods in this grocery list
  * 
  * @return List
  */
 public List getFoods() {
   return Collections.unmodifiableList(foods);
 }

} /**

* This class provides the content for the FoodList application
*/

class FoodContentProvider implements IStructuredContentProvider {

 /**
  * Gets the food items for the list
  * 
  * @param arg0
  *            the data model
  * @return Object[]
  */
 public Object[] getElements(Object arg0) {
   return ((GroceryList) arg0).getFoods().toArray();
 }
 /**
  * Disposes any created resources
  */
 public void dispose() {
   // Do nothing
 }
 /**
  * Called when the input changes
  * 
  * @param arg0
  *            the viewer
  * @param arg1
  *            the old input
  * @param arg2
  *            the new input
  */
 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
   // Do nothing
 }

}


      </source>
   
  
 
  



Sample ListViewer

   <source lang="java">

/******************************************************************************

* All Right Reserved. 
* Copyright (c) 1998, 2004 Jackwind Li Guojie
* 
* Created on Feb 15, 2004 10:57:32 AM by JACK
* $Id$
* 
*****************************************************************************/

import java.util.Iterator; import java.util.Vector; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.ruposite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class SampleListViewer {

 Display display = new Display();
 Shell shell = new Shell(display);
 
 ListViewer listViewer;
 /**
  * Represents programming languages. 
  *
  */
 public static class Language {
   public String genre;
   public boolean isObjectOriented;
   
   public Language() { }
   public Language(String genre, boolean isObjectOriented) {
     this.genre = genre;
     this.isObjectOriented = isObjectOriented;
   }
   
   public String toString() {
     return "Lang: " + genre + " [" + (isObjectOriented ? "Object-oriented" : "Procedural") + "]";
   }
 }
 
 Vector languages = new Vector();
 
 private void init() {
   languages.add(new Language("Java", true));
   languages.add(new Language("C", false));
   languages.add(new Language("C++", true));
   languages.add(new Language("SmallTalk", true));
   
   listViewer = new ListViewer(shell);
   
   
   listViewer.setContentProvider(new IStructuredContentProvider() {
     public Object[] getElements(Object inputElement) {
       Vector v = (Vector)inputElement;
       return v.toArray();
     }
     
     public void dispose() {
       System.out.println("Disposing ...");
     }
     public void inputChanged(
       Viewer viewer,
       Object oldInput,
       Object newInput) {
       System.out.println("Input changed: old=" + oldInput + ", new=" + newInput);
     }
   });
   
   //listViewer.setContentProvider(new ArrayContentProvider());
   
   listViewer.setInput(languages);
   
   listViewer.setLabelProvider(new LabelProvider() {
     public Image getImage(Object element) {
       return null;
     }
     public String getText(Object element) {
       return ((Language)element).genre;
     }
   });
   
   listViewer.addSelectionChangedListener(new ISelectionChangedListener() {
     public void selectionChanged(SelectionChangedEvent event) {
       IStructuredSelection selection = (IStructuredSelection)event.getSelection();
       StringBuffer sb = new StringBuffer("Selection - ");
       sb.append("tatal " + selection.size() + " items selected: ");
       for(Iterator iterator = selection.iterator(); iterator.hasNext(); ) {
         sb.append(iterator.next() + ", ");
       }
       System.out.println(sb);
     }
   });
   
   listViewer.addFilter(new ViewerFilter() {
     public boolean select(
       Viewer viewer,
       Object parentElement,
       Object element) {
       
       if(((Language)element).isObjectOriented)      
         return true;
       else
         return false;
     }
   });
   
   listViewer.setSorter(new ViewerSorter(){
     public int compare(Viewer viewer, Object e1, Object e2) {
       return ((Language)e1).genre.rupareTo(((Language)e2).genre);
     }
   });
   

// Object[] toBeSelectedItems = new Object[2]; // toBeSelectedItems[0] = languages.elementAt(languages.size()-1); // toBeSelectedItems[1] = languages.elementAt(languages.size()-2); // IStructuredSelection selection = new StructuredSelection(toBeSelectedItems); // // listViewer.setSelection(selection);


// // Vector v = new Vector(); // v.addElement(new Language("VB", true)); // // listViewer.setInput(v); // // listViewer.add(new Language("C#", true));

 }
 
 Button buttonAdd;
 Button buttonRemove;
 Button buttonModify;
 
 private void addButtons() {
   Composite composite = new Composite(shell, SWT.NULL);
   FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
   fillLayout.spacing = 2;
   
   composite.setLayout(fillLayout);
   
   buttonAdd = new Button(composite, SWT.PUSH);
   buttonAdd.setText("Add");
   
   buttonModify = new Button(composite, SWT.PUSH);
   buttonModify.setText("Modify");
   
   buttonRemove = new Button(composite, SWT.PUSH);
   buttonRemove.setText("Remove");
   
   buttonAdd.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {

// String text = OptionPane.showInputDialog(shell, "New language genre: ", "Add new element", null);

 //      if(text != null) {
   //      languages.add(new Language(text, true));
     //  }
       
       listViewer.refresh(false);
     }
   });
   buttonModify.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       IStructuredSelection selection = (IStructuredSelection)listViewer.getSelection();
       Language language = (Language)selection.getFirstElement();
       if(language == null) {
         System.out.println("Please select a language first.");
         return;
       }
       

// String text = OptionPane.showInputDialog(shell, "Rename: ", "Modify genre", language.genre);

 //      if(text != null) {
   //      language.genre = text;
     //  }
       listViewer.update(language, null);
     }
   });    
   
   buttonRemove.addSelectionListener(new SelectionAdapter() {
     public void widgetSelected(SelectionEvent e) {
       IStructuredSelection selection = (IStructuredSelection)listViewer.getSelection();
       Language language = (Language)selection.getFirstElement();
       if(language == null) {
         System.out.println("Please select a language first.");
         return;
       }
       
       languages.remove(language);
       System.out.println("Removed: " + language);
       
       listViewer.refresh(false);
     }
   });
 }
   
 
 public SampleListViewer() {
   RowLayout rowLayout = new RowLayout();
   shell.setLayout(rowLayout);
   
   (new Label(shell, SWT.NULL)).setText("What programming languages are you proficient in? ");
   
   init();
   
   addButtons();
   shell.pack();
   shell.open();
   //textUser.forceFocus();
   // Set up the event loop.
   while (!shell.isDisposed()) {
     if (!display.readAndDispatch()) {
       // If no more entries in event queue
       display.sleep();
     }
   }
   display.dispose();
 }
 public static void main(String[] args) {
   new SampleListViewer();
 }

}

      </source>