Masterpurzel
Mitglied
Hallo,
ich hänge jetzt schon seit 2 Stunden an meinem Problem und weiß nicht wie ich es lösen kann...
Ich habe mehrere Klassen, die eine ist von JApplet abgeleitet und die 2. von JPanel, der Rest sind verschiedene Programmteile!
Mein Problem:
Wenn ich mein Applet in Eclipse im AppletViewer öffne, funktioniert die Methode KeyPressed(), wenn ich es allerdings in einer html Datei eingebettet ausführe, reagiert die Methode KeyPressed() nicht.
den Fokus habe ich schon in der Klasse mit extends JPanel gesetzt
keine Reaktion!
LG Masterpurzel
Achja vergessen, hier mein Code:
PingPong.java
MainDrawing.java
der restliche Code sollte in diesem Fall uninteressant sein, falls doch nicht bitte melden!
LG Masterpurzel
ich hänge jetzt schon seit 2 Stunden an meinem Problem und weiß nicht wie ich es lösen kann...
Ich habe mehrere Klassen, die eine ist von JApplet abgeleitet und die 2. von JPanel, der Rest sind verschiedene Programmteile!
Mein Problem:
Wenn ich mein Applet in Eclipse im AppletViewer öffne, funktioniert die Methode KeyPressed(), wenn ich es allerdings in einer html Datei eingebettet ausführe, reagiert die Methode KeyPressed() nicht.
den Fokus habe ich schon in der Klasse mit extends JPanel gesetzt
Java:
setFocusable(true);
setFocusTraversalKeysEnabled(false);
keine Reaktion!
LG Masterpurzel
Achja vergessen, hier mein Code:
PingPong.java
Java:
package pingpong;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextField;
//public class PingPong extends JApplet implements Runnable, Observer, PropertyChangeListener {
public class PingPong extends JApplet implements Runnable, PropertyChangeListener {
private static final long serialVersionUID = 1L;
LayoutManager layout;
Thread thread;
int gamestatus;
JLabel points = new JLabel("");
int punkte;
public void propertyChange(PropertyChangeEvent pce) {
/*System.out.println("Bei der " + pce.getSource() + " wurde der Parameter \"" +
pce.getPropertyName() + "\" von \"" + pce.getOldValue() +
"\" auf \"" + pce.getNewValue() + "\" geaendert.");*/
if(pce.getPropertyName().equals("key")) {
System.out.println("KeyCode: " + pce.getNewValue());
}
if(pce.getPropertyName().equals("gamestatus") && pce.getNewValue().equals("0")) {
System.out.println("Gamestatus: 0");
}
if(pce.getPropertyName().equals("points")) {
System.out.println("Punkte: " + pce.getNewValue());
points.setText("" + pce.getNewValue());
punkte = (Integer)pce.getNewValue();
}
if(pce.getPropertyName().equals("gamestatus") && pce.getNewValue().equals("0")) {
System.out.println("Spiel zu Ende!");
final JDialog popup = new JDialog();
popup.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
popup.setSize(350, 100);
popup.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
// Label Punkte
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0; // Column
gbc.gridy = 0; // Row
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(0, 0, 0, 0); //Abstand: oben, links, unten, rechts
popup.add(new JLabel("Ihre Punkte: "), gbc);
// Punkte
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1; // Column
gbc.gridy = 0; // Row
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(0, 0, 0, 0); //Abstand: oben, links, unten, rechts
popup.add(points, gbc);
// Label Name
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0; // Column
gbc.gridy = 1; // Row
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(0, 0, 0, 10); //Abstand: oben, links, unten, rechts
popup.add(new JLabel("Ihr Name: "), gbc);
// Textfeld Name
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1; // Column
gbc.gridy = 1; // Row
gbc.gridheight = 1;
gbc.gridwidth = 2;
gbc.insets = new Insets(0, 0, 0, 0); //Abstand: oben, links, unten, rechts
final JTextField tf_name = new JTextField(20);
popup.add(tf_name, gbc);
// Textfeld Name
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 0; // Column
gbc.gridy = 2; // Row
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(0, 0, 0, 10); //Abstand: oben, links, unten, rechts
JButton save = new JButton("Speichern");
save.setEnabled(false);
save.setToolTipText("Diese Funktion ist leider noch nicht implementiert!");
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(tf_name.getText().equals("")) {
} else {
new Save(punkte, tf_name.getText(), popup);
}
}
});
popup.add(save, gbc);
// Textfeld Name
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx = 1; // Column
gbc.gridy = 2; // Row
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.insets = new Insets(0, 0, 0, 0); //Abstand: oben, links, unten, rechts
JButton abort = new JButton("Abbrechen");
abort.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
abort(popup);
}
});
popup.add(abort, gbc);
popup.setResizable(false);
popup.setVisible(true);
}
}
public void init() {
}
public void start() {
if(thread == null) {
thread = new Thread(this);
thread.start();
}
// Menu
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu fileMenu = new JMenu("Datei");
JMenu overMenu = new JMenu("Hilfe");
menuBar.add(fileMenu);
menuBar.add(overMenu);
JMenuItem exitAction = new JMenuItem("Beenden");
JMenuItem infoAction = new JMenuItem("Info");
//infoAction.setIcon(new ImageIcon(getClass().getResource("CustomImage/info.png")));
fileMenu.add(exitAction);
overMenu.add(infoAction);
exitAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
exit();
}
});
infoAction.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
layout = new GridLayout(0, 1);
setLayout(layout);
MainDrawing draw = new MainDrawing();
add(draw);
//draw.setFocusable(true);
}
@SuppressWarnings("deprecation")
public void stop() {
if(thread != null && thread.isAlive()) {
thread.stop();
thread = null;
}
}
public void destroy() {
}
public void run() {
while(true) {
repaint();
try {
Thread.sleep(15);
} catch(InterruptedException e) {
}
}
}
public void exit() {
System.exit(0);
}
public void abort(JDialog popup) {
popup.dispose();
}
}
MainDrawing.java
Java:
package pingpong;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Arrays;
import javax.swing.JPanel;
public class MainDrawing extends JPanel implements MouseListener, KeyListener {
private static final long serialVersionUID = 1L;
private Image dbImage;
private Graphics dbg;
int kugel_xpos = 0;
int kugel_ypos = 0;
boolean kugel_direction_xpos = true;
boolean kugel_direction_ypos = true;
int balken_hoehe = 50;
int balken_xpos = 5;
int balken_ypos = 5;
int points = -1;
int counter;
int gamestatus = -1;
public MainDrawing() {
addMouseListener((MouseListener)this);
addKeyListener((KeyListener)this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
//requestFocusInWindow();
//requestFocus();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
//g2d.drawRect(balken_xpos, balken_ypos, 20, 20);
if(gamestatus == -1) {
gamestop(g2d);
} else if(gamestatus == 1) {
gamestart(g2d);
for(int i = 999999; i >= 0; i--) {
counter -= i;
if(gamestatus == 1 && counter == 0) {
gamestatus = 0;
Updatable_Objects aktu = new Updatable_Objects(new Quelle());
aktu.addPropertyChangeListener(new PingPong());
aktu.setGameStatus("" + gamestatus);
aktu.setPoints(points);
}
}
} else if(gamestatus == 0) {
gameend(g);
}
}
public void update(Graphics g) {
// Initialisierung des DoubleBuffers
if(dbImage == null) {
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
// Bildschirm im Hintergrund löschen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
// Auf gelöschten Hintergrund Vordergrund zeichnen
dbg.setColor (getForeground());
paint (dbg);
// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm anzeigen
g.drawImage (dbImage, 0, 0, this);
}
public void mouseClicked(MouseEvent e) {
if(gamestatus == -1 && e.getClickCount() == 2) {
gamestatus = 1;
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void keyPressed(KeyEvent e) {
Updatable_Objects aktu = new Updatable_Objects(new Quelle());
aktu.addPropertyChangeListener(new PingPong());
// Taste nach oben
if(e.getKeyCode() == 38) {
balken_ypos -= 1;
aktu.setKeyCode("" + e.getKeyCode());
// Taste nach unten
} else if(e.getKeyCode() == 40) {
balken_ypos += 1;
aktu.setKeyCode("" + e.getKeyCode());
} else {
System.out.println("Key: " + e.getKeyCode());
aktu.setKeyCode("" + e.getKeyCode());
}
}
public void keyTyped(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
public void gamestart(Graphics g) {
g.drawRect(0, 0, 153, 153);
g.drawString(points + " Punkte", 153 / 2, 15);
g.drawString(counter + " s", 153 / 2, 25);
//g.drawString("Balken Startposition y: " + balken_ypos, 25, 25);
//g.drawString("Balken Endposition: " + (balken_ypos + balken_hoehe), 25, 35);
g.fillRect(balken_xpos, balken_ypos, 15, balken_hoehe);
g.fillOval(kugel_xpos, kugel_ypos, 15, 15);
if(kugel_direction_xpos == true) {
kugel_xpos += 1;
if(kugel_xpos == 140) {
kugel_direction_xpos = false;
}
} else {
kugel_xpos -= 1;
if(kugel_xpos == balken_xpos + 14) {
kugel_direction_xpos = true;
}
}
if(kugel_direction_ypos == true) {
kugel_ypos += 1;
if(kugel_ypos == 140) {
kugel_direction_ypos = false;
}
} else {
kugel_ypos -= 1;
if(kugel_ypos == 0) {
kugel_direction_ypos = true;
}
}
if(kugel_ypos > balken_ypos && kugel_ypos < (balken_ypos + balken_hoehe) && kugel_xpos == balken_xpos + 14) {
points++;
} else if(kugel_ypos != balken_ypos) {
}
}
public void gamestop(Graphics g) {
g.drawString("Bitte Spiel mit Doppelklick starten!", 0, 153 / 2);
}
public void gameend(Graphics g) {
g.drawString("Das Spiel ist zu Ende, ", 10, 75);
g.drawString("ihre Punkte: " + points, 10, 90);
}
}
der restliche Code sollte in diesem Fall uninteressant sein, falls doch nicht bitte melden!
LG Masterpurzel
Zuletzt bearbeitet: