So behandeln Sie Ereignisse von Tastatur und Maus im full-screen exclusive mode in java?
Passive-rendering-Modus kann man verwenden KeyListener
und ActionListener
Schnittstellen, um Ereignisse zu behandeln Nutzers.
Was ist die richtige Art der Ereignisbehandlung in den Vollbildmodus? Bitte verlängern Sie dieses Skelett bietet die Umsetzung für Maus und klicken Sie auf Tastatur-events, bitte nicht aufblasen dein Beispiel (das Beispiel beginnt full-screen exclusive mode, mit einem Timer
zur Aktualisierung von Grafiken in Fenster):
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();
}
}
InformationsquelleAutor Vadim | 2011-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie die üblichen Ansätze gezeigt in die How to Use Key Bindings und gewusst Wie: Schreiben ein Maus-Listener ordnungsgemäß in Full-Screen Exclusive Mode.
Ich würde vorschlagen
JApplet
, aber es hätte wahrscheinlich zu sein unterzeichnet für die Sicherheit. Sie können versuchen, es mit einem hybrid-Ansatz gezeigt hier; java-web-start wäre eine bessere Strategie für die Bereitstellung.Danke, werden es überprüfen!
Beachten Sie, dass Java 1.7 OSX hat tatsächlich einen Fehler mit dieser Technik stackoverflow.com/questions/14317352.
Siehe auch FullScreen Swing-Komponenten nicht zu Empfangen Tastatureingaben auf Java 7 auf Mac OS X Mountain Lion.
InformationsquelleAutor trashgod
Vorgeschlagen hier, Mac OS X-Benutzer können unterschiedliche Erwartungen der Nutzer zur full-screen-Anwendungen. Ein alternativer Ansatz, gezeigt hier, setzt auf
com.apple.eawt
Klassen "bieten eine einfache Möglichkeit zur Implementierung von nativen Funktionen zur Feinabstimmung von Java-Anwendungen auf Mac OS X." DerFullScreenUtilities
MethodesetWindowCanFullScreen()
ermöglicht, die Funktion und dieApplication
MethoderequestToggleFullScreen()
änderungen der Einstellung dynamisch. Beachten Sie, wie das erweitern-Symbol unterscheidet zwischen Versionen.Mac OS 10.9, Mavericks:
Mac OS 10.10 Yosemite:
Mac OS X 10.11, El Capitan:
Kurze Anmerkung: der Aufruf
requestToggleFullScreen
scheint im hintergrund fehl, wenn es gemacht ist, bevor der Rahmen ist displayable. (Prüfung auf El Capitan 10.11.6.)InformationsquelleAutor trashgod