【问题标题】:Java: Make Draw-program run in fullscreenJava:使绘图程序全屏运行
【发布时间】:2020-03-09 13:38:51
【问题描述】:

我将Draw.java class from the Princeton library 用于小型图形程序。目前它在一个窗口中运行。我想让它可缩放和全屏。我怎样才能做到这一点?我查看了全屏独占模式,但不太确定如何使用它。我尝试将它添加到我的程序中,但我似乎无法将绘图窗口链接到全屏框架,这会导致一个带有程序的窗口和一个空白的全屏打开。除非有必要,否则我不想使用 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);   

如何链接 myWindowdraw,这样两者都显示相同的东西?

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

编辑:我已经尝试在Draw.java 中实现getFrame() 方法并将该框架与new Window(draw.getFrame()) 一起使用。我还尝试在Draw.java 中实现setFullScreen() 方法,但也没有用。

【问题讨论】:

    标签: java fullscreen draw stddraw


    【解决方案1】:

    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();
      }
    

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

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

    【讨论】:

    • 谢谢!这实际上是我接下来想尝试的,但是即使我没有更改任何内容,我的 Draw.java 类也不再编译。我什至从普林斯顿大学网站重新下载了它。
    • 在 Draw.java 中创建 setFullScreenMode() 也无济于事。我现在只有一个屏幕,但上面什么都没有显示。
    • 更新的答案也会导致空白屏幕(但没有在后台打开工作窗口)
    • 好的,添加'draw.getFrame().setExtendedState(JFrame.MAXIMIZED_BOTH); ' 并保持固定画布大小(1350、800)可用于组合窗口和绘制对象 - 但点击监听器不再正常工作。 1350 x 800 画布也显示在全屏窗口内(您可以看到不同深浅的白色)感谢您的帮助!
    • 我下载了 Draw.java 并设法让它全屏显示,无论是否有窗口装饰。你需要窗饰吗?你能提供一个不工作的点击监听器的例子吗?
    猜你喜欢
    • 2012-05-30
    • 2020-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2022-01-03
    • 2012-06-13
    • 2012-01-29
    相关资源
    最近更新 更多