在被动渲染模式中,可以使用KeyListener和ActionListener接口来处理来自用户的事件.
全屏模式下事件处理的正确方法是什么?请扩展此骨架,提供鼠标点击和按键事件的实现,请不要膨胀您的示例(示例启动全屏独占模式,使用Timer更新窗口中的图形):
import java.applet.Applet;
import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.Timer;
public class applet extends Applet
{
Timer timer;
JFrame frame;
DisplayMode[] displayModes = new DisplayMode[] {
new DisplayMode(1280, 800, 32, 60)
};
BufferStrategy bufferStrategy;
Rectangle bounds;
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param args
*/
public void init()
{
GraphicsEnvironment …Run Code Online (Sandbox Code Playgroud) 我正在编写一个旨在双显示器设置上运行的应用程序,一台显示器上的"Display"JFrame全屏显示,另一台显示器上显示"Control"JFrame,向显示器发送指令.我尝试了两种不同的方法来设置全屏显示; 每个人的成功似乎取决于操作系统.
display.setUndecorated(true);
display.setExtendedState(JFrame.MAXIMIZED_BOTH);
Run Code Online (Sandbox Code Playgroud)
适用于Windows,但JFrame隐藏在OS X和Linux的dock/panels下.
我的另一种方法,利用
GraphicsDevice.setFullScreenWindow(display);
Run Code Online (Sandbox Code Playgroud)
适用于我尝试的所有三个操作系统,但在Windows中,将控制窗口聚焦在另一个监视器上会使显示窗口隐藏,并调用
display.setAlwaysOnTop(true);
Run Code Online (Sandbox Code Playgroud)
不解决问题.我对该GraphicsDevice方法有点偏爱,因为我不必处理OS X或Linux中的问题,我希望Windows问题是一个简单的修复.是吗?
我一直在尝试并且未能在OSX系统的主显示器上使用java全屏模式.无论我尝试过什么,我似乎都无法摆脱显示屏顶部的"苹果"菜单栏.我真的需要在整个屏幕上画画.谁能告诉我如何摆脱菜单?
我附上了一个展示问题的示例类 - 在我的系统上,菜单仍然可见,我希望看到一个完全空白的屏幕.
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
public class FullScreenFrame extends JFrame implements KeyListener {
public FullScreenFrame () {
addKeyListener(this);
setUndecorated(true);
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
if (gd.isFullScreenSupported()) {
try {
gd.setFullScreenWindow(this);
}
finally {
gd.setFullScreenWindow(null);
}
}
else {
System.err.println("Full screen not supported");
}
setVisible(true);
}
public void keyTyped(KeyEvent e) {}
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
setVisible(false);
dispose();
}
public static void main (String [] args) {
new FullScreenFrame();
}
}
Run Code Online (Sandbox Code Playgroud)