0

我正在使用普林斯顿库中的 Draw.java 类来编写一个小型图形程序。目前它在一个窗口中运行。我想让它可缩放和全屏。我怎样才能做到这一点?我查看了全屏独占模式,但不太确定如何使用它。我尝试将它添加到我的程序中,但我似乎无法将绘图窗口链接到全屏框架,这会导致一个带有程序的窗口和一个空白的全屏打开。除非必要,否则我不想使用 Draw 类更改我的整个代码。关于如何使绘制窗口全屏显示的任何想法?

这是一个代码示例,尽管我认为它没有多大帮助:

Draw draw = new Draw("TapReact");
int canvasWidth = 1350;
int canvasHeight = 800;
draw.setCanvasSize(canvasWidth, canvasHeight);

以及具有全屏独占模式的全屏实现示例:

GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
Window myWindow = new Window(new Frame());
graphicsDevice.setFullScreenWindow(myWindow);   

如何链接 myWindow and draw,以便两者显示相同的内容?

非常感谢您的帮助,谢谢。

编辑:我已经尝试getFrame()在该框架中实现一个方法Draw.java并将其与new Window(draw.getFrame()). 我还尝试实施一种也不起作用的setFullScreen()方法。Draw.java

4

1 回答 1

0

2020 年 3 月 11 日更新

在 Draw.java 中:

    private boolean isFullscreen = false;

  /**
  *  Sets the undecorated fullscreen mode.
  */
  public void setFullscreen() {
      isFullscreen = true;
      frame.dispose();
      frame = new JFrame();
      frame.setUndecorated(true);
      frame.setResizable(false);
      frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
      frame.setVisible(true);
      width = frame.getWidth();
      height = frame.getHeight();
      init();
  }

另外,还需要修改init()Draw.java 中的第二行方法:

  private void init() {
        if (frame != null) frame.setVisible(false);
        if (!isFullscreen) frame = new JFrame();  // This is the modified line
        offscreenImage = new BufferedImage(2*width, 2*height, BufferedImage.TYPE_INT_ARGB);
        onscreenImage  = new BufferedImage(2*width, 2*height, BufferedImage.TYPE_INT_ARGB);
        offscreen = offscreenImage.createGraphics();
        .........

然后在您的测试类中:

    Draw draw = new Draw("TapReact");
    draw.setFullscreen();
    while (true) {
      if (draw.isMousePressed() &&
          draw.mouseX() > 0.4 &&
          draw.mouseX() < 0.6 &&
          draw.mouseY() > 0.4 &&
          draw.mouseY() < 0.6) {
        draw.setPenColor(Draw.RED);
      } else {
        draw.setPenColor(Draw.BLACK);
      }
      draw.filledSquare(0.5, 0.5, 0.1);
    }
于 2020-03-09T13:52:37.560 回答