Hallo zusammen!
Ich schaffe es aus irgendeinen Grund nicht, meinem JPanel (eingebettet im JFrame) den Focus zu geben. Habe schon lange im Internet gesucht aber leider keine Lösung gefunden.
Hier kommt der relevante Code:
---------------------------------------------------------
public class ColorBalls {
public static void main(String[] args) {
JFrame gameFrame = new JFrame("JFRAME");
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameFrame.setResizable(false);
gameFrame.setVisible(true);
GamePanel gamePanel = new GamePanel(WIDTH, HEIGHT);
gameFrame.getContentPane().add(gamePanel);
gamePanel.setFocusable(true);
gameFrame.pack();
gameFrame.setLocationRelativeTo(null);
gamePanel.start(); //startet den Thread im gamePanel
}
public class GamePanel extends JPanel implements Runnable {
private Thread tAnimator;
public GamePanel(int width, int heigth){ // Konstruktor
setPreferredSize(new Dimension (width, heigth));
setBackground(Color.BLACK);
setVisible(true);
}
public synchronized void start(){
tAnimator = new Thread(this);
tAnimator.start();
}
@Override
public void run(){
GamePanel.this.requestFocus();
System.out.println("JPanel hat Focus: " + this.isFocusOwner()); // Focus - Test
defineKeys(); //Key-Actionlistener
}
}
Ich schaffe es aus irgendeinen Grund nicht, meinem JPanel (eingebettet im JFrame) den Focus zu geben. Habe schon lange im Internet gesucht aber leider keine Lösung gefunden.
Hier kommt der relevante Code:
---------------------------------------------------------
public class ColorBalls {
public static void main(String[] args) {
JFrame gameFrame = new JFrame("JFRAME");
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameFrame.setResizable(false);
gameFrame.setVisible(true);
GamePanel gamePanel = new GamePanel(WIDTH, HEIGHT);
gameFrame.getContentPane().add(gamePanel);
gamePanel.setFocusable(true);
gameFrame.pack();
gameFrame.setLocationRelativeTo(null);
gamePanel.start(); //startet den Thread im gamePanel
}
public class GamePanel extends JPanel implements Runnable {
private Thread tAnimator;
public GamePanel(int width, int heigth){ // Konstruktor
setPreferredSize(new Dimension (width, heigth));
setBackground(Color.BLACK);
setVisible(true);
}
public synchronized void start(){
tAnimator = new Thread(this);
tAnimator.start();
}
@Override
public void run(){
GamePanel.this.requestFocus();
System.out.println("JPanel hat Focus: " + this.isFocusOwner()); // Focus - Test
defineKeys(); //Key-Actionlistener
}
}
Zuletzt bearbeitet: