Tips membuat JFace Dialog

JFace Dialog mempunyai 2 bagian utama (dialog window dan isi dialog). Isi dialog dibagi menjadi 3 bagian title yang berwarna putih, isi yang berwarna abu-abu dan buttonBar yang berisi button2. Keterangan tambahannya:
1. Window yang berisi title dan logo. Bila anda mau mengubah title dan logo window maka anda harus menggoveride method configureShell(Sehll parentShell) dengan baris pertama kode beris panggilan ke method yang sama di superclass.
2. Untuk mengubah title yang berwarna putih anda bisa menggoverride method createContens() dan baris pertama kode berisi panggilan ke superclass untuk method yang sama.
3. Untuk mengubah isi yang berwarna abu2 anda menggoverride method createDialogArea. Panggilan ke superclass untuk method yang sama tidak harus.
4. Untuk mengubah buttonBar and bisa menggoverride method createButtonBar atau createButtonsforButtoBar. Panggilan ke superclass untuk method yang sama tidak harus.
Untuk membuat JFace Dialog bagian2 yang sebaiknya di modifikasi adalah
1. override createContents(), di bagian ini anda bisa menambah widget yang lain ataupun merubah title dan teks lain. Sebagai tambahan pada baris pertama overriding methodnya harus memanggil method yang sama di superclass (super.createContents)
2. Cara yang lebih baik adalah mengoverride method createDialogArea untuk memodifikasi dialog dengan ditambah widget yang lain, kemudian mengoverride methos createButtonBar bila anda benar2 mau mengubah isi dan layout dari button2 yang berada di bawah dialog tapi kalau hanya ingin mengubah urutan dan buttontampilan dari button yang ada, anda cukup menggoveride method createButtonsforButtonBar. dan di method itu anda menggunakan method createButton(Composite parent, int id, String name, boolean defaultButton) untuk membuat button. Tapi bila anda hanya ingin menambahkan button yang sudah ada maka di akhir method creatButtonsforButtonBar tambahkan kode super.createButtonsforButtonBar untuk memanggil method yang berada di superclass. Tambahan id untuk button anda adalah IDialogConstand.CLIENT_ID + index. Bila anda menambahkan sesuatu  pada button bar maka anda harus mengoverride method buttonPressed(int id)

Contoh program

public class BetweenDateDialog extends Dialog{
   
    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
     */
    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Pilih Tanggal");
        shell = newShell;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout(4, false);
        composite.setLayout(layout);

        //First Row
        Label fromDateLabel = new Label(composite, SWT.NONE);
        fromDateLabel.setText("Dari Tanggal");

        return composite;
    }
   
    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    @Override
    protected void okPressed() {
        ErrorMessageDialog emd = new ErrorMessageDialog("errorBetweenDatesDialog");
        if (fromDateCombo.getDate()==null) {
            emd.addErrorStatus(IStatus.INFO, "Masukkan Tanggal Dari");
        }
        if (toDateCombo.getDate()==null) {
            emd.addErrorStatus(IStatus.INFO, "Masukkan Tanggal Sampai");
        }
        ErrorDialog ed = emd.getErrorMessageDialog(shell, "Kesalahan Memilih Tanggal", "Kesalahan ketika memilih tanggal", IStatus.INFO|IStatus.ERROR);
        if (ed == null) {
            fromDate = fromDateCombo.getDate();
            toDate = toDateCombo.getDate();
            super.okPressed();
        }
        else
            ed.open();
    }

    @Override
    protected void buttonPressed(int buttonId) {
        if (IDialogConstants.CLIENT_ID+1==buttonId) {
            super.okPressed();
        }
        else if (IDialogConstants.CLIENT_ID+2==buttonId) {
            super.okPressed();
        }
        else if (IDialogConstants.CLIENT_ID+3==buttonId) {
            super.okPressed();
        }
        super.buttonPressed(buttonId);
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        if ((style&BetweenDateDialog.DAY)==BetweenDateDialog.DAY) {
            createButton(parent, IDialogConstants.CLIENT_ID+1, "Hari ini", false);
        }
        if ((style&BetweenDateDialog.MONTH)==BetweenDateDialog.MONTH) {
            createButton(parent, IDialogConstants.CLIENT_ID+2, "Bulan ini", false);
        }
        if ((style&BetweenDateDialog.YEAR)==BetweenDateDialog.YEAR) {
            createButton(parent, IDialogConstants.CLIENT_ID+3, "Tahun ini", false);
        }
        super.createButtonsForButtonBar(parent);
    }
}

semoga berguna.
wass wr wb,
vaihingen, 3 Februari 2007
SAdr LM

Leave a Reply