2016-02-19 6 views
0

Я пытаюсь нарисовать некоторые фигуры и линии на объекте Canvas SWT, используя GC [Graphics Context]. Объект Canvas инициализируется с фиксированным размером & V_SCROLL | H_SCROLL. Я хочу, чтобы Canvas мог прокручиваться, как только GC превышает границы Canvas. Хотя полосы прокрутки появляются, они не работают, и последняя часть линий усекается.Прокрутка не работает с Canvas & GC в Java SWT

Group grpSchema = new Group(shell, SWT.NONE); 
    grpSchema.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); 
    grpSchema.setText("Picture"); 

    Button btnPaint = new Button(shell, SWT.NONE); 
    btnPaint.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); 
    btnPaint.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      if(null != canvas){ 
       canvas.dispose(); 
      } 
      canvas = new Canvas(grpSchema, SWT.V_SCROLL|SWT.H_SCROLL); 
      canvas.setBounds(10, 20, 200, 200); 
      canvas.addPaintListener(new PaintListener() { 
       @Override 
       public void paintControl(PaintEvent arg0) { 
        GC gc = arg0.gc; 
        gc.drawLine(0, 0, 200, 500); 
       } 
      }); 
     } 
    }); 
    btnPaint.setText("paint"); 
+0

Canvas не поддерживает эти стили. Возможный дубликат http://stackoverflow.com/q/15133999/2670892 –

+0

@ greg-449: Я не мог сделать это с помощью Canvas & Group; вместо этого я попробовал ScrollableComposite, Group & Image, и теперь он работает. – Cjo

ответ

0

Я только что получил прокручиваемую группу с изображением, нарисованным с использованием GC в SWT. Вам необходимо создать и использовать изображение с помощью GC, а затем установить группу, созданную внутри ScrollableComposite.

ScrolledComposite scroll = new ScrolledComposite(shell, SWT.V_SCROLL|SWT.H_SCROLL); 
scroll.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); 

Group grpDraw = new Group(scroll, SWT.V_SCROLL|SWT.H_SCROLL); 
grpDraw.setText("Picture"); 
grpDraw.setBounds(0, 0, 200, 200); 

Button btnPaint = new Button(shell, SWT.NONE); 
btnPaint.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1)); 
btnPaint.addSelectionListener(new SelectionAdapter() { 
     @Override 
     public void widgetSelected(SelectionEvent e) { 
      Image image = new Image(display, 1000, 1000); 
      GC gc = new GC(image); 
      gc.setBackground(display.getSystemColor(SWT.COLOR_YELLOW)); 
      gc.fillOval(50,50,100,100); 
      gc.setForeground(display.getSystemColor(SWT.COLOR_DARK_GREEN)); 
      gc.dispose(); 
      grpDraw.setBackgroundImage(image); 
      scroll.setContent(grpDraw); 
     } 
    }); 
btnPaint.setText("paint"); 

enter image description here