Dies ist eine alte Version des Dokuments!


Java - SWT/JFace

AutoCompleteField

org.eclipse.jface.fieldassist.AutoCompleteField
Die JFace-Klasse AutoCompleteField(..) für ein einfaches Textfield kann beispielsweise so verwendet werden:

Text textField = new Text();
String[] str = {"Ananas", "Apfel", "Banane", "Birne", "Kiwi", "Pflaume" };
new AutoCompleteField(textField, new TextContentAdapter(), str);

Sollte das TextField über ein Binding verfügen, so muss das Binding nach Erstellung des AutoCompleteField's durchgeführt werden.

org.eclipse.jface.fieldassist.IContentProposal
org.eclipse.jface.fieldassist.IContentProposalProvider
Möchte man in der Auswahlliste einen anderen Text anzeigen, als hinterher übernommen wird, so muss eine eigene Klasse MyAutoCompleteField erstellt werden, welche eine eigene Klasse MyContentProposalProvider instanziert. Die Klasse MyContenteProposalProvider kann am Einfachsten durch eine Kopie von SimpleContentProposalProvider erzeugt werden. Dort muss dann die Methode makeContentProposal angepasst werden.
Dabei liefert die Methode getContent() den Wert, welcher im Textfeld erscheint. Die Methode getLabel() liefert den Text, welcher in der Auswahl-Liste unter dem Textfeld angezeigt wird und die Methode getDescriptionen() einen zusätzlichen ausführlichen Text, welcher für den jeweils ausgewählten Eintrag der Liste in einem seperaten Fenster daneben angezeigt werden kann.

Text textField = new Text();
String[] str = {"Ananas", "Apfel", "Banane", "Birne", "Kiwi", "Pflaume" };
String[] str = {"besonders lecker", "schön grün", "wunderbar gebogen", 
                "irgendwie nicht rund", "exotisch", "hmm" };
new MyAutoCompleteField(textField, new TextContentAdapter(), str);


package com.sowas.javawiki.autocomplete;
 
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IControlContentAdapter;
import org.eclipse.swt.widgets.Control;
 
public class MyAutoCompleteField {
   private ContentProposalProvider contentProposalProvider;
   private ContentProposalAdapter  contentProposalAdapter;
 
   public MyAutoCompleteField(final Control control,
                              final IControlContentAdapter controlContentAdapter,
                              final String[] literals,
                              final String[] labels) {
      contentProposalProvider = new ContentProposalProvider(literals, labels);
      contentProposalProvider.setFiltering(false);
      contentProposalAdapter = new ContentProposalAdapter(control, controlContentAdapter, contentProposalProvider, null, null);
      contentProposalAdapter.setPropagateKeys(true);
      contentProposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
   }
 
   public void setProposals(final String[] proposals) {
      contentProposalProvider.setProposals(proposals);
   }
 
   public ContentProposalProvider getContentProposalProvider() {
      return contentProposalProvider;
   }
 
   public ContentProposalAdapter getContentProposalAdapter() {
      return contentProposalAdapter;
   }
}


package com.sowas.javawiki.autocomplete;
 
import java.util.ArrayList;
 
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalProvider;
 
public class ContentProposalProvider implements IContentProposalProvider {
   private String[]		proposals;
   private String[]		labels;
   private IContentProposal[]	contentProposals;
   private boolean		filterProposals	= false;
 
   public ContentProposalProvider(String[] proposals, String[] labels) {
      super();
      this.proposals = proposals;
      this.labels = labels;
   }
 
   public IContentProposal[] getProposals(String contents, int position) {
      if (filterProposals) {
         ArrayList list = new ArrayList();
         for (int i = 0; i < proposals.length; i++) {
            if (proposals[i].length() >= contents.length() 
                && proposals[i].substring(0, contents.length()).equalsIgnoreCase(contents)) {
               list.add(makeContentProposal(proposals[i], labels[i]));
            }
         }
         return (IContentProposal[]) list.toArray(new IContentProposal[list.size()]);
      }
      if (contentProposals == null) {
         contentProposals = new IContentProposal[proposals.length];
         for (int i = 0; i < proposals.length; i++) {
            contentProposals[i] = makeContentProposal(proposals[i], labels[i]);
         }
      }
      return contentProposals;
   }
 
   public void setProposals(String[] items) {
      this.proposals = items;
      contentProposals = null;
   }
 
   public void setFiltering(boolean filterProposals) {
      this.filterProposals = filterProposals;
      contentProposals = null;
   }
 
   private IContentProposal makeContentProposal(final String proposal, final String label) {
      return new IContentProposal() {
 
         public String getContent() {
            return proposal;
         }
 
         public String getDescription() {
            // Wenn hier was zurückgegeben wird, dann erscheint dieser Text in einem seperatem Fenster
            return null;  
         }
 
         public String getLabel() {
            return proposal + " - " + label;
         }
 
         public int getCursorPosition() {
            return proposal.length();
         }
      };
   }
}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007