का उपयोग करके कीबोर्ड इनपुट नहीं मिलेगा मुझे अपनी पूर्ण स्क्रीन Window
के साथ काम करने के लिए KeyBoardFocusManger
प्राप्त करने में समस्याएं आ रही हैं। कोई फर्क नहीं पड़ता कि, यह सिर्फ कीबोर्ड इनपुट प्राप्त नहीं होगा। मैंने System.exit(0)
और println()
का उपयोग किया था ताकि कुंजीपटल/रिलीज़/टाइप की गई विधि को किसी भी कॉल की तलाश हो, लेकिन कोई त्रुटि नहीं फेंक दी गई है। मैंने KeyListeners
की कोशिश की है; लेकिन जब मैंने this पढ़ा, तो मैं KeyboardFocusManager
में बदल गया, और वही बात अभी भी होती है। मैं वास्तव में हताश हो रहा हूँ; मैं क्या निर्णय ले सकता हूं, Window
कीबोर्ड का फोकस नहीं कर रहा है?पूर्ण स्क्रीन विंडो को KeyListener या KeyBoardFocusManager
यहाँ है अपने मुख्य:
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Determine if full-screen mode is supported directly
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gs = ge.getDefaultScreenDevice();
if (gs.isFullScreenSupported()) {
Frame frame = new Frame(gs.getDefaultConfiguration());
SpaceInvaderUI spaceInvaderUI = new SpaceInvaderUI(frame);
// Enter full-screen mode
gs.setFullScreenWindow(spaceInvaderUI);
} else {
JOptionPane.showMessageDialog(null, "Does not support full screen!", "Error 0x01", JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
}
});
}
और यहाँ यूआई जो KeyBoardFocusManger
शामिल है, और addListeners()
विधि में जोड़ा जाता है:
class SpaceInvaderUI extends Window {
private JPanel drawingPanel;
private Image background;
private JButton btnExit;
public SpaceInvaderUI(Frame frame) {
super(frame);
try {
background = ImageIO.read(getClass().getResourceAsStream("background.png"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Could not extract resource: " + ex.getMessage(), "Error 0x02", JOptionPane.ERROR_MESSAGE);
System.exit(2);
}
createWindow();
}
private void createComponents() throws HeadlessException {
drawingPanel = new DrawingPanel(background, this);
btnExit = new JButton("Exit");
}
private void createWindow() {
createComponents();
addListeners();
addComponentsToWindow();
}
private void addComponentsToWindow() {
add(drawingPanel, BorderLayout.CENTER);
add(btnExit, BorderLayout.SOUTH);
}
private void addListeners() {
KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
manager.addKeyEventDispatcher(new MyDispatcher());
btnExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
});
}
private class MyDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
System.out.println("pressed");
System.exit(0);
} else if (e.getID() == KeyEvent.KEY_RELEASED) {
System.out.println("released");
System.exit(0);
} else if (e.getID() == KeyEvent.KEY_TYPED) {
System.out.println("Typed");
System.exit(0);
}
return false;
}
}
}
बाहर निकलें बटन सिर्फ इसलिए कि मैं थक मिल गया है taskmanager के माध्यम से मेरे ऐप की हत्या। आखिरकार मेरा पैनल है जिस पर गेम होगा और मेरी पृष्ठभूमि को चित्रित किया गया है:
public class DrawingPanel extends JPanel {
private final Image background;
private final SpaceInvaderUI invaderUI;
DrawingPanel(Image background, SpaceInvaderUI invaderUI) {
this.background = background;
this.invaderUI = invaderUI;
}
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
grphcs.drawImage(background.getScaledInstance((int) invaderUI.getWidth(), (int) invaderUI.getHeight(), Image.SCALE_SMOOTH), 0, 0, this);
}
}
अग्रिम धन्यवाद।
संपादित करें: अब मैं अपने drawingPanel
पर एक कुंजी बाइंडिंग का उपयोग कर की कोशिश की है, लेकिन अभी भी कुछ नहीं होता है जब मैं f2 प्रेस: अपनी स्विंग जीयूआई में
class SpaceInvaderUI extends Window {
private JPanel drawingPanel;
private Image background;
private JButton btnExit;
public SpaceInvaderUI(Frame frame) {
super(frame);
try {
background = ImageIO.read(getClass().getResourceAsStream("background.png"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(null, "Could not extract resource: " + ex.getMessage(), "Error 0x02", JOptionPane.ERROR_MESSAGE);
System.exit(2);
}
createWindow();
}
private void createComponents() throws HeadlessException {
drawingPanel = new DrawingPanel(background, this);
btnExit = new JButton("Exit");
}
private void createWindow() {
createComponents();
addListeners();
addComponentsToWindow();
}
private void addComponentsToWindow() {
add(drawingPanel, BorderLayout.CENTER);
add(btnExit, BorderLayout.SOUTH);
}
private void addListeners() {
Action exit = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
};
drawingPanel.getInputMap().put(KeyStroke.getKeyStroke("F2"),
exit);
btnExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
System.exit(0);
}
});
}
}
यह फ़्रेम नहीं बल्कि एक विंडो है, और मैं इसे बंद करने के लिए एक बटन का उपयोग कर सकता हूं, लेकिन मैं चाहता हूं कि गेम बाहर निकलने के लिए 'Esc' कुंजी का उपयोग करें और मेनू आदि लाएं –
तो मुझे लगता है कि कीबाइंडिंग बिल्कुल ठीक है आप। –