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