Hallo zusammen,
ich habe eine Klasse Window, die von JFrame erbt, eine Klasse Ebene1, die von JPanel erbt, und eine Klasse Ebene2, die ebenfalls von JPanel erbt.
Ein Objekt der Ebene1 wird einem Window-Objekt hinzugefügt, durch einen Klick auf einen JButton in Ebene1 soll die Ebene aus dem Window entfernt werden und durch ein Objekt der Ebene2 ersetzt werden.
Folgender Code für Ebene1 funktioniert fehlerfrei:
Füge ich jedoch einen zweiten JButton hinzu (der vorerst die selbe Funktion hat), wechselt zwar das JPanel, jedoch reagiert das Programm nicht mehr auf Tastatureingaben wie z. B. "Alt"+"F4". Problemcode:
Ich kann mir das nicht erklären und suche dringend eine Lösung, denn ich werde später natürlich mehrere JButtons brauchen und werde noch mehr mit Tastatureingaben arbeiten!
Vielen Dank für eure Hilfe!
ich habe eine Klasse Window, die von JFrame erbt, eine Klasse Ebene1, die von JPanel erbt, und eine Klasse Ebene2, die ebenfalls von JPanel erbt.
Ein Objekt der Ebene1 wird einem Window-Objekt hinzugefügt, durch einen Klick auf einen JButton in Ebene1 soll die Ebene aus dem Window entfernt werden und durch ein Objekt der Ebene2 ersetzt werden.
Folgender Code für Ebene1 funktioniert fehlerfrei:
Java:
package game;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Ebene1 extends JPanel implements ActionListener
{
private Window window;
private BufferedImage backgroundImage;
private JButton optionsButton;
private Ebene2 e2;
public Ebene1(Window f)
{
window = f;
setSize(window.getContentPane().getSize());
setLocation(0, 0);
setLayout(null);
try
{
backgroundImage = ImageIO.read(new File("res/backgroundImage.png"));
}
catch(IOException e)
{
e.printStackTrace();
}
optionsButton = new JButton();
//optionsButton.setText(languageBundle.getString("options"));
optionsButton.setFont(window.getButtonFont());
optionsButton.setForeground(window.getButtonColor());
optionsButton.setHorizontalTextPosition(JButton.CENTER);
//optionsButton.setIcon(buttonIcon);
optionsButton.setSize(200, 50);
optionsButton.setLocation(((window.getContentPane().getWidth() - 200) / 2), (((window.getContentPane().getHeight() - 200) / 2) + 50));
optionsButton.addActionListener(this);
add(optionsButton);
}
private int getXBackgroundImage()
{
int xBackgroundImage = 0;
xBackgroundImage = window.getContentPane().getWidth() - backgroundImage.getWidth();
return xBackgroundImage;
}
private int getYBackgroundImage()
{
int yBackgroundImage = 0;
yBackgroundImage = window.getContentPane().getHeight() - backgroundImage.getHeight();
return yBackgroundImage;
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(backgroundImage, getXBackgroundImage(), getYBackgroundImage(), this);
}
@Override
public void actionPerformed(ActionEvent e)
{
window.remove(this);
e2 = new Ebene2(window);
window.add(e2);
window.repaint();
}
}
Füge ich jedoch einen zweiten JButton hinzu (der vorerst die selbe Funktion hat), wechselt zwar das JPanel, jedoch reagiert das Programm nicht mehr auf Tastatureingaben wie z. B. "Alt"+"F4". Problemcode:
Java:
package game;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Ebene1 extends JPanel implements ActionListener
{
private Window window;
private BufferedImage backgroundImage;
private JButton playButton;
private JButton optionsButton;
private Ebene2 e2;
public Ebene1(Window f)
{
window = f;
setSize(window.getContentPane().getSize());
setLocation(0, 0);
setLayout(null);
try
{
backgroundImage = ImageIO.read(new File("res/backgroundImage.png"));
}
catch(IOException e)
{
e.printStackTrace();
}
playButton = new JButton();
optionsButton = new JButton();
//playButton.setText(languageBundle.getString("play"));
playButton.setFont(window.getButtonFont());
playButton.setForeground(window.getButtonColor());
playButton.setHorizontalTextPosition(JButton.CENTER);
//playButton.setIcon(buttonIcon);
playButton.setSize(200, 50);
playButton.setLocation(((window.getContentPane().getWidth() - 200) / 2), ((window.getContentPane().getHeight() - 200) / 2));
playButton.addActionListener(this);
//optionsButton.setText(languageBundle.getString("options"));
optionsButton.setFont(window.getButtonFont());
optionsButton.setForeground(window.getButtonColor());
optionsButton.setHorizontalTextPosition(JButton.CENTER);
//optionsButton.setIcon(buttonIcon);
optionsButton.setSize(200, 50);
optionsButton.setLocation(((window.getContentPane().getWidth() - 200) / 2), (((window.getContentPane().getHeight() - 200) / 2) + 50));
optionsButton.addActionListener(this);
add(playButton);
add(optionsButton);
}
private int getXBackgroundImage()
{
int xBackgroundImage = 0;
xBackgroundImage = window.getContentPane().getWidth() - backgroundImage.getWidth();
return xBackgroundImage;
}
private int getYBackgroundImage()
{
int yBackgroundImage = 0;
yBackgroundImage = window.getContentPane().getHeight() - backgroundImage.getHeight();
return yBackgroundImage;
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(backgroundImage, getXBackgroundImage(), getYBackgroundImage(), this);
}
@Override
public void actionPerformed(ActionEvent e)
{
window.remove(this);
e2 = new Ebene2(window);
window.add(e2);
window.repaint();
}
}
Ich kann mir das nicht erklären und suche dringend eine Lösung, denn ich werde später natürlich mehrere JButtons brauchen und werde noch mehr mit Tastatureingaben arbeiten!
Vielen Dank für eure Hilfe!