Friday, August 1, 2014

swt canvas.redraw doesn't work for clicking button








the code is :







import org.eclipse.swt.SWT;







import org.eclipse.swt.events.PaintEvent;







import org.eclipse.swt.events.PaintListener;







import org.eclipse.swt.events.SelectionAdapter;







import org.eclipse.swt.events.SelectionEvent;







import org.eclipse.swt.layout.GridData;







import org.eclipse.swt.layout.GridLayout;







import org.eclipse.swt.widgets.Button;







import org.eclipse.swt.widgets.Canvas;







import org.eclipse.swt.widgets.Display;







import org.eclipse.swt.widgets.Shell;







public class caseButton {







private Shell shell;







public static void main(String[] args) {







try {







caseButton window = new caseButton();







window.open();







} catch (Exception e) {







e.printStackTrace();







}







}








/**







* Open the window.







*/







public void open() {







Display display = Display.getDefault();







createContents();







shell.open();







shell.layout();







while (!shell.isDisposed()) {







if (!display.readAndDispatch()) {







display.sleep();







}







}







}







/**







* Create contents of the window.







*/







protected void createContents() {







shell = new Shell();







shell.setText("SWT Application");







GridLayout gridLayout = new GridLayout();







gridLayout.numColumns = 1;







gridLayout.marginWidth = 0;







gridLayout.marginHeight = 0;







gridLayout.verticalSpacing = 4;







gridLayout.makeColumnsEqualWidth=false;







shell.setLayout(gridLayout);








GridData gridData=new GridData();







gridData.verticalSpan = 0;







gridData.horizontalSpan = 3;







gridData.verticalAlignment = GridData.FILL;







gridData.grabExcessVerticalSpace= true;







gridData.horizontalAlignment = GridData.FILL;







gridData.grabExcessHorizontalSpace = true;








final Button button = new Button(shell, SWT.PUSH);







button.setText("draw Rectangle");








final Canvas canvas = new Canvas(shell, SWT.NONE);







canvas.setLayoutData(gridData);








canvas.addPaintListener(new PaintListener() {







public void paintControl(PaintEvent e) {







e.gc.drawRoundRectangle(10, 10, 180, 80, 10, 10);







}







});







button.addSelectionListener(new SelectionAdapter() {







@Override







public void widgetSelected(SelectionEvent e) {







System.out.println("buttton_start ");







canvas.redraw(); // it can' work







System.out.println("buttton_end ");








}







});







}








}








the question is : when I click this button, it will print "buttton_start" and "buttton_end", the "canvas.redraw()" can't work. I don't know the reason , who can help me? thanks















No comments:

Post a Comment