Java: 制作绘图程序 运行 全屏
Java: Make Draw-program run in fullscreen
我正在使用 Draw.java class from the Princeton library 的小型图形程序。目前它在 window 中运行。我想让它可缩放和全屏显示。我怎样才能做到这一点?我研究了全屏独占模式,但不太确定如何使用它。我尝试将它添加到我的程序中,但我似乎无法 link 将 Draw-Window 添加到全屏框架,这导致一个 window 与程序和一个空白全屏打开。除非有必要,否则我不想使用 Draw class 更改我的整个代码。关于如何制作 Draw-Window 全屏的任何想法?
这是一个代码示例,但我认为它不会有太大帮助:
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);
我怎么能link
myWindow
和 draw
,以便两者显示相同的内容?
不胜感激,谢谢。
编辑:我已经尝试在 Draw.java
中实现 getFrame()
方法并将该框架与 new Window(draw.getFrame())
一起使用。我还尝试在 Draw.java
中实现 setFullScreen()
方法,但也没有用。
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();
.........
那么在你的测试中class:
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 class from the Princeton library 的小型图形程序。目前它在 window 中运行。我想让它可缩放和全屏显示。我怎样才能做到这一点?我研究了全屏独占模式,但不太确定如何使用它。我尝试将它添加到我的程序中,但我似乎无法 link 将 Draw-Window 添加到全屏框架,这导致一个 window 与程序和一个空白全屏打开。除非有必要,否则我不想使用 Draw class 更改我的整个代码。关于如何制作 Draw-Window 全屏的任何想法?
这是一个代码示例,但我认为它不会有太大帮助:
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);
我怎么能link
myWindow
和 draw
,以便两者显示相同的内容?
不胜感激,谢谢。
编辑:我已经尝试在 Draw.java
中实现 getFrame()
方法并将该框架与 new Window(draw.getFrame())
一起使用。我还尝试在 Draw.java
中实现 setFullScreen()
方法,但也没有用。
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();
.........
那么在你的测试中class:
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);
}