To mój pierwszy post wiec Witam Wszystkich!
Pisze grę i natknąłem się na taki oto problem. Mam w programie obsługę klawiatury i jest wszystko fajnie do czasu gdy wcisnę jakiś JButton ze Swinga. Wtedy program całkowicie przestaje reagować na klawiaturę. Napisałem taki prosty programik który w idei jest podobny do mojego. Gdyby ktoś mógł go zmodyfikować tak żeby możliwe było jednoczesne obie akcje to byłbym bardzo wdzięczny :)
import java.awt.;
import java.awt.event.;
import java.awt.geom.;
import java.util.;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
JFrame frame = new Frame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
public class Frame extends JFrame {
/** Creates a new instance of Frame */
public Frame() {
setLocation(100,100);
setSize(400, 300);
Panel panel = new Panel();
Container powZawartosci = getContentPane();
JButton nowyPrzycisk = new JButton("OK");
ActionListener newListener = new
ActionListener()
{
public void actionPerformed(ActionEvent e)
{
}
};
nowyPrzycisk.addActionListener(newListener);
powZawartosci.add(panel,BorderLayout.CENTER);
powZawartosci.add(nowyPrzycisk,BorderLayout.SOUTH);
}
}
class Panel extends JPanel
{
public Panel() {
//sluchacz paletki
UchwytKlawisza sluchacz_klawiatury = new UchwytKlawisza(); //nasluchuje wciskane klawisze
addKeyListener(sluchacz_klawiatury);
}
public boolean isFocusable() {
return true;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Rectangle2D.Double tlo = new Rectangle2D.Double(x, y, szer , wys);
g2.setPaint(Color.black);
g2.fill(tlo);
repaint();
}
/**
*Clasa UchwytKlawisza (wewnetrzna). Nalezy do klasy Paletka. Obsluguje ruch paletki poprzez wciskanie klawiszy.
*/
public class UchwytKlawisza implements KeyListener {
public void keyPressed(KeyEvent zdarzenie) {
int kodKlawisza = zdarzenie.getKeyCode(); //otrzymujemy kod wcisnietego klawisza
//sprawdzamy jaki klawisz zostal wcisniety i odpowiednio zezwala na przesuniecie paletki
if (kodKlawisza==KeyEvent.VK_RIGHT)
{x=x+3;}
else if (kodKlawisza==KeyEvent.VK_LEFT)
{x=x-3;}
}
public void keyReleased(KeyEvent zdarzenie) {}
public void keyTyped(KeyEvent zdarzenie) {}
}
int x=100;
int y=100;
int szer=10;
int wys=20;
}