1

我正在做一个涉及处理和 RCP 的项目。到目前为止,我已经做了很多工作,并且希望在我调整 RCP 窗口大小(用鼠标拖动边缘)时让我的处理草图自动调整大小。

现在很多网站说处理中不支持调整大小,有些告诉我使用 frame.setResizable(true);。当放置在我的public void setup(){}函数中时,这会返回一个错误。

我的下一个选项是在 RCP 窗口中添加一个调整大小的侦听器,但是如果我在下面的代码中实现代码,在我的 main 或 createWindows 函数中,它只会返回错误。

有人可以帮帮我吗?

final Composite b = new Composite(shell, SWT.NONE);

b.addListener(SWT.MouseDown, new Listener() {

      public void handleEvent(Event e) {

        Tracker tracker = new Tracker(b.getParent(), SWT.RESIZE);
        tracker.setStippled(true);
        Rectangle rect = b.getBounds();
        tracker.setRectangles(new Rectangle[] { rect });
        if (tracker.open()) {
          Rectangle after = tracker.getRectangles()[0];
          b.setBounds(after);
        }
        tracker.dispose();
      }
    });
4

2 回答 2

2

这些网站是对的:处理字面上不支持调整大小。它不在 API 中,您可以做到这一点的唯一方法是通过转义到较低级别的子系统来使用非处理代码(如果 Java 编译,java JFrame 调整大小处理,如果 JavaScript 编译,画布/页面调整大小处理)。自然,这样做意味着您的代码不再是处理代码,并且不能在可以运行处理代码同时保证代码运行的环境之间移植(JS 不知道 Java 是什么,并且 java 编译会破坏 JS 语法,例如)。

Processingsize函数设置了各种无法再次设置的管理变量,除非完全破坏一切,而且没有单独的resize函数可以使用。更有趣的是,即使有,3D 模式也不会让你这样做,因为 openGL/webGL 调整大小是不可能的(所有 GL 缓冲区都是固定大小的,调整大小需要为每个像素的宽度/高度变化重新构建)。

因此,如果您希望能够调整大小,请做一些聪明的事情,您可以在其中创建一个使用旧草图状态实例化的新草图,这样您就可以在新的草图实例中从中断的地方继续。

于 2013-06-13T14:01:24.957 回答
0

一旦我尝试了这个,它就可以工作了,虽然 OpenGL 有一些错误,但也有一些工作......看:当然你需要制作相对于宽度/高度可调整大小的东西......

void setup()
{
  size(200, 200);   // always first line
  frame.setResizable(true);
  background(255);
  smooth();
}


void draw()
{
  background(255);
  ellipse(width/2, height/2, width/6, height/6);
}
于 2013-06-13T21:01:00.790 回答