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