gpt4 book ai didi

java - 如何在java中以全屏独占模式处理来自键盘和鼠标的事件?

转载 作者:搜寻专家 更新时间:2023-10-30 20:59:23 24 4
gpt4 key购买 nike

在被动渲染模式下,可以使用KeyListenerActionListener 接口(interface)来处理来自用户的事件。

全屏模式下正确的事件处理方式是什么?请扩展此框架,为鼠标单击和按键事件提供实现,请不要膨胀您的示例(示例启动全屏独占模式,使用 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 env = GraphicsEnvironment.getLocalGraphicsEnvironment(); //displays, fonts, color shemes...
GraphicsDevice device = env.getDefaultScreenDevice(); //for one-display systems

setIgnoreRepaint(true);

GraphicsConfiguration gc = device.getDefaultConfiguration();
frame = new JFrame(gc);

device.setFullScreenWindow(frame);

if (device.isDisplayChangeSupported())
device.setDisplayMode(displayModes[0]);

frame.createBufferStrategy(2);
bufferStrategy = frame.getBufferStrategy();

timer = new Timer(1000 / 50, new ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
Graphics2D g = null;
try {
g = (Graphics2D) bufferStrategy.getDrawGraphics();
render(g);
} finally {
g.dispose();
}
bufferStrategy.show();
}

});

}

private void render(Graphics2D g) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, bounds.width, bounds.height);
}

public void start()
{
timer.start();

}

public void stop()
{
timer.stop();
}

}

最佳答案

看起来 How to Use Key BindingsHow to Write a Mouse Listener 中显示的常用方法在 Full-Screen Exclusive Mode 中正常工作。

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

/** @see http://stackoverflow.com/questions/7456227 */
public class FullScreenTest extends JPanel {

private static final String EXIT = "Exit";
private JFrame f = new JFrame("FullScreenTest");
private Action exit = new AbstractAction(EXIT) {

@Override
public void actionPerformed(ActionEvent e) {
f.dispatchEvent(new WindowEvent(
f, WindowEvent.WINDOW_CLOSING));
}
};
private JButton b = new JButton(exit);

public FullScreenTest() {
this.add(b);
f.getRootPane().setDefaultButton(b);
this.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0), EXIT);
this.getActionMap().put(EXIT, exit);
this.addMouseMotionListener(new MouseAdapter() {

@Override
public void mouseMoved(MouseEvent e) {
FullScreenTest.this.setToolTipText(
"("+ e.getX() + "," + e.getY() + ")");
}
});
}

private void display() {
GraphicsEnvironment env =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice dev = env.getDefaultScreenDevice();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setBackground(Color.darkGray);
f.setResizable(false);
f.setUndecorated(true);
f.add(this);
f.pack();
dev.setFullScreenWindow(f);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

@Override
public void run() {
new FullScreenTest().display();
}
});
}
}

关于java - 如何在java中以全屏独占模式处理来自键盘和鼠标的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com