Tips for using JFace Viewer

Maybe you have problem showing your query in JFace Viewer. The principles to use JFace Viewer is
1. Create the Viewer
Specify what kind of Viewer do u want to implement. (Ex: List, Table, Combo, Tree Viewer)
2. Create the Label Provider for specific Viewer
3. Create the Content Provider for specific Viewer
4. Create root of input (It is very important)
To set an input in Viewer, it is better if u make class which implements all the required methods in the Label and Content Provider interface. And add 2 members which are model class and vector of the input class. And before u set input in the viewer make sure to instance the input class and add query class as input’s child
Example:
I used TableViewer and the implements class is like this

public class JournalView implements ITableView {

    private Journal j;
    private Vector<JournalView> jvList;
    private int viewType;

    public JournalView(Journal j) {
        super();
        this.j = j;
    }

    /**
     * Default Constructor
     * It will initialize the General Ledger List Vector
     */
    public JournalView() {
        super();
        this.jvList = new Vector<JournalView>(0,1);
    }

    /**
     * Add transaction to the view
     * The view will be shown Table
     * @param General Ledger
     */
    public void addJournalView(JournalView glView) {
        jvList.add(glView);
    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
     */
    public void addListener(ILabelProviderListener listener) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#dispose()
     */
    public void dispose() {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#getColumnImage(int)
     */
    public Image getColumnImage(int columnIndex) {
        // TODO Auto-generated method stub
        return null;
    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#getColumnText(int)
     */
    public String getColumnText(int columnIndex) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

        switch (viewType) {
        case ConstantView.LIST_TRANSACTION:

            if (j.getId().getNumber()==1) {
                switch (columnIndex) {
                case 0:
                    return j.getId().getId();
                case 1:
                    return sdf.format(j.getId().getTransactiondate());
                case 2:
                    return j.getTransaction().getReceiptid();
                }
            }
            else {
                switch (columnIndex) {
                case 0:
                    return "";
                case 1:
                    return "";
                case 2:
                    return "";
                }
            }
            switch (columnIndex) {
            case 3:
                return j.getAccount().getCode()+" "+j.getAccount().getName();
            case 4:
                return j.getDebit().toString();
            case 5:
                return j.getCredit().toString();
            }
            break;

        case ConstantView.START_TRANSACTION:
            switch (columnIndex) {
            case 3:
                return "Saldo sebelum";
            case 4:
                return j.getDebit().toString();
            case 5:
                return j.getCredit().toString();
            }
        case ConstantView.END_TRANSACTION:
            switch (columnIndex) {
            case 3:
                return "Saldo sesudah";
            case 4:
                return j.getDebit().toString();
            case 5:
                return j.getCredit().toString();
            }
        }

        return null;
    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#getElements()
     */
    public Object[] getElements() {
        return jvList.toArray();
    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
     */
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#isLabelProperty(java.lang.String)
     */
    public boolean isLabelProperty(String property) {
        // TODO Auto-generated method stub
        return false;
    }

    /*
     * (non-Javadoc)
     * @see com.asdev.gui.ITableView#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
     */
    public void removeListener(ILabelProviderListener listener) {
        // TODO Auto-generated method stub

    }

    public void setJournalViewList(Vector<JournalView> glList) {
        this.jvList = glList;
    }

    public Journal getJournal() {
        return j;
    }

    public void setViewType(int viewType) {
        this.viewType = viewType;
    }

}

And before u set input in TableViewer, do this one

JournalView glView = new JournalView();
glView.setJournalViewList(JournalViewManagement.listJournalByTransactionTypeAndBetweenDate(transactionType, fromDate, toDate));
tableViewer.setInput(glView);

Good luck and have a nice code:)

wass wr wb,
SAdr LM

Leave a Reply