【问题标题】:Scroll not working with Canvas & GC in Java SWT滚动不适用于 Java SWT 中的 Canvas 和 GC
【发布时间】:2016-02-19 07:46:01
【问题描述】:

我正在尝试使用 GC[Graphics Context] 在 SWT Canvas 对象上绘制一些形状和线条。 Canvas 对象以固定大小和 V_SCROLL|H_SCROLL 进行初始化。一旦 GC 超出 Canvas 边界,我希望 Canvas 可以滚动。 虽然滚动条出现了,但它们无法正常工作,并且行的最后一部分被截断。

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");

【问题讨论】:

  • Canvas 不支持这些样式。 stackoverflow.com/q/15133999/2670892 的可能重复项
  • @greg-449 :我无法用 Canvas & Group 做到这一点;相反,我尝试使用 ScrollableComposite、Group 和 Image,它现在可以工作了。

标签: java swt uigraphicscontext


【解决方案1】:

我刚刚获得了可滚动组,其中包含在 SWT 中使用 GC 绘制的图像。 您需要使用 GC 创建和映像,然后设置为在 ScrollableComposite 内创建的 Group。

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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2017-04-22
    • 2012-01-26
    相关资源
    最近更新 更多