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