Game-Klassen zu Programm zusammenführen

Hallo,
ich benötige Hilfe bei der Verbindung von drei verschiedenen Klassen, die zusammen ein ganzes Programm ergeben sollen.
Ich weiß wohl, dass man das über die Vererbung in Java funktioniert, aber leider weiß ich nicht wie ich das anstellen soll.
Ich bin Java Neuling und habe auch sonst mit noch keiner Programmiersprache Kontakt gehabt.

Über Hilfe bin ich sehr dankbar!!

Hier der Code der einzelnen Klassen:

import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class frame extends JFrame implements ActionListener {
private JButton schliessen;
private JButton einstellung;
private JButton info;
private JButton ende;

	public static void main (String[]args) throws Exception{ 
	
	frame frame = new frame("UI");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize(400,500);
	
	frame.setLayout(null);
	frame.setVisible(true);

	}
	
	public frame(String title) {
		
		super(title);
		
		schliessen = new JButton("Spiel starten");
		schliessen.setBounds(120, 60, 160, 40);
		schliessen.addActionListener(this);
		add(schliessen);
		
		einstellung = new JButton("How to play?");
		einstellung.setBounds(120, 140, 160, 40);
		einstellung.addActionListener(this);
		add(einstellung);
	
	    ende = new JButton("Beenden");
	    ende.setBounds(120, 220, 160, 40);
	    ende.addActionListener(this);
	    add(ende);
		
		JLabel label = new JLabel("Von ......");
		label.setBounds(40,340,400,80);
		add(label);
	
	}

	
	public void actionPerformed(ActionEvent e){
		
		if (e.getSource() == schliessen){
			fenster();	
		}
		
	
		if (e.getSource() == einstellung){
			Object[] options = { "OK"};
			JOptionPane.showOptionDialog(null, "Durch Betätigung der Pfeiltasten über die Gegenstände springen.", "Information",

			        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,

			        null, options, options[0]);
		}
		
		
		if (e.getSource() == ende){
			System.exit(0);
			
			
		}
	}
	 

	public static void fenster(){
		
		
		JFrame fenster = new JFrame("Game");
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setSize(650,350);
		fenster.add(new MoveImage());
		// Öffnen nach dem den Start.Klasse hinzufügen!
	
	}
		
}
import java.awt.Graphics2D;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class MoveImage extends JFrame {
	
 
    private BufferStrategy strategy;
 
    private BufferedImage img;
 
    private int x = 0, y = 0;
 
    private int w, h;
 
    private boolean leftDown, rightDown, upDown, downDown, running = true;
 
    private Thread runner = new Thread() {
        {
            setPriority(MIN_PRIORITY);
        }
 
        public void run() {
        try {
        	
        while (running) {
                    
        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
                    g.clearRect(0, 0, 1000,900);
 
                    if (rightDown) {
                        x += 40;
                    } else if (leftDown) {
                        x -= 40;
                    } else if (upDown) {
                        y -= 40;
                    } else if (downDown) {
                        y += 40;
                    }
 
                    if (img != null)
                        g.drawImage(img, x, y, MoveImage.this);
                    g.dispose();
                    strategy.show();
                    sleep(50L);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
 
    public MoveImage() {
        super("MoveImage");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        try {
            img = ImageIO.read(new File("Donut1.gif"));
            w = img.getWidth();
            h = img.getHeight();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                int code = evt.getKeyCode();
                switch (code) {
                case KeyEvent.VK_LEFT:
                    leftDown = true;
                    break;
                case KeyEvent.VK_RIGHT:
                    rightDown = true;
                    break;
                case KeyEvent.VK_UP:
                    upDown = true;
                    break;
                case KeyEvent.VK_DOWN:
                    downDown = true;
                    break;
                default:
                    ;
                    
                }
            }
 
            public void keyReleased(KeyEvent evt) {
                int code = evt.getKeyCode();
                switch (code) {
                case KeyEvent.VK_LEFT:
                    leftDown = false;
                    break;
                case KeyEvent.VK_RIGHT:
                    rightDown = false;
                    break;
                case KeyEvent.VK_UP:
                    upDown = false;
                    break;
                case KeyEvent.VK_DOWN:
                    downDown = false;
                    break;
                default:
                    ;
                }
            }
 
            public void keyTyped(KeyEvent evt) {
                int code = evt.getKeyChar();
                switch (code) {
                case KeyEvent.VK_ESCAPE:
                    running = false;
                    System.exit(0);
                }
            }
        });
 
        setSize(1000,900);
        setResizable(false);
        setIgnoreRepaint(true);
        setVisible(true);
        createBufferStrategy(2);
        strategy = getBufferStrategy();
    }
    public static void main(String[] args) {
        new MoveImage().start();
       
    }
    
    
    private void start() {
        runner.start();
    }
}
import javax.swing.*;

public class Image extends JFrame {
	private ImageIcon image1;
	private JLabel label1;
	
	
	Image() {
		setLayout(new FlowLayout());
		
		image1 = new ImageIcon(getClass().getResource("Hintergrund.jpg"));
		label1 = new JLabel(image1);
	}
	
	public static void main (String args[]) {
		Image gui = new Image();
		gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		gui.setVisible(true);
		gui.pack();
		gui.setTitle("Jumpnut");
	}
}```
import java.awt.event.ActionListener;




import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;





public class frame extends JFrame implements ActionListener {
	




private JButton schliessen;
private JButton einstellung;
private JButton info;
private JButton ende;




	public static void main (String[]args) throws Exception{ 
			 
	
		
	frame frame = new frame("UI");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize(400,500);
	
	frame.setLayout(null);
	frame.setVisible(true);
	
	
	
	}
	
	public frame(String title) {
		
		super(title);
		
		schliessen = new JButton("Spiel starten");
		schliessen.setBounds(120, 60, 160, 40);
		schliessen.addActionListener(this);
		add(schliessen);
		
		einstellung = new JButton("How to play?");
		einstellung.setBounds(120, 140, 160, 40);
		einstellung.addActionListener(this);
		add(einstellung);
	
		
		
		
	    ende = new JButton("Beenden");
	    ende.setBounds(120, 220, 160, 40);
	    ende.addActionListener(this);
	    add(ende);
	   
	    
		
		JLabel label = new JLabel("Von .....");
		label.setBounds(40,340,400,80);
		add(label);
		
	
		
	}
		

	
	
	
	
	
	public void actionPerformed(ActionEvent e){
		
		if (e.getSource() == schliessen){
			fenster();	
		}
		
	
		if (e.getSource() == einstellung){
			Object[] options = { "OK"};
			JOptionPane.showOptionDialog(null, "Durch Betätigung der Pfeiltasten über die Gegenstände springen.", "Information",

			        JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,

			        null, options, options[0]);
		}
		
		
		if (e.getSource() == ende){
			System.exit(0);
			
			
		}
	}
	 
	

	
	public static void fenster(){
		
		
		JFrame fenster = new JFrame("Game");
		fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		fenster.setSize(650,350);
		fenster.add(new MoveImage());
		// Öffnen nach dem den Start.Klasse hinzufügen!
	
	}
		}```

2)    
```import java.awt.Graphics2D;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
 
public class MoveImage extends JFrame {
	
 
    private BufferStrategy strategy;
 
    private BufferedImage img;
 
    private int x = 0, y = 0;
 
    private int w, h;
 
    private boolean leftDown, rightDown, upDown, downDown, running = true;
 
    private Thread runner = new Thread() {
        {
            setPriority(MIN_PRIORITY);
        }
 
        public void run() {
        try {
        	
        while (running) {
                    
        Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
                    g.clearRect(0, 0, 1000,900);
 
                    if (rightDown) {
                        x += 40;
                    } else if (leftDown) {
                        x -= 40;
                    } else if (upDown) {
                        y -= 40;
                    } else if (downDown) {
                        y += 40;
                    }
 
                    if (img != null)
                        g.drawImage(img, x, y, MoveImage.this);
                    g.dispose();
                    strategy.show();
                    sleep(50L);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
 
    public MoveImage() {
        super("MoveImage");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
 
        try {
            img = ImageIO.read(new File("Donut1.gif"));
            w = img.getWidth();
            h = img.getHeight();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                int code = evt.getKeyCode();
                switch (code) {
                case KeyEvent.VK_LEFT:
                    leftDown = true;
                    break;
                case KeyEvent.VK_RIGHT:
                    rightDown = true;
                    break;
                case KeyEvent.VK_UP:
                    upDown = true;
                    break;
                case KeyEvent.VK_DOWN:
                    downDown = true;
                    break;
                default:
                    ;
                    
                }
            }
 
            public void keyReleased(KeyEvent evt) {
                int code = evt.getKeyCode();
                switch (code) {
                case KeyEvent.VK_LEFT:
                    leftDown = false;
                    break;
                case KeyEvent.VK_RIGHT:
                    rightDown = false;
                    break;
                case KeyEvent.VK_UP:
                    upDown = false;
                    break;
                case KeyEvent.VK_DOWN:
                    downDown = false;
                    break;
                default:
                    ;
                }
            }
 
            public void keyTyped(KeyEvent evt) {
                int code = evt.getKeyChar();
                switch (code) {
                case KeyEvent.VK_ESCAPE:
                    running = false;
                    System.exit(0);
                }
            }
        });
 
        setSize(1000,900);
        setResizable(false);
        setIgnoreRepaint(true);
        setVisible(true);
        createBufferStrategy(2);
        strategy = getBufferStrategy();
    }
    public static void main(String[] args) {
        new MoveImage().start();
       
    }
    
    
    private void start() {
        runner.start();
    }
}```

3)
```import java.awt.*;
import javax.swing.*;

public class Image extends JFrame {
	private ImageIcon image1;
	private JLabel label1;
	
	
	Image() {
		setLayout(new FlowLayout());
		
		image1 = new ImageIcon(getClass().getResource("Hintergrund.jpg"));
		label1 = new JLabel(image1);
	}
	
	public static void main (String args[]) {
		Image gui = new Image();
		gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		gui.setVisible(true);
		gui.pack();
		gui.setTitle("Jumpnut");
	}
}```

compilierts denn?

Ja das Compilieren funktioniert.

[quote=Unregistriert]ich benötige Hilfe bei der Verbindung von drei verschiedenen Klassen, die zusammen ein ganzes Programm ergeben sollen.
Ich weiß wohl, dass man das über die Vererbung in Java funktioniert,[/quote]Woimmer auch Du das her hast: es ist falsch.
**Vererbung **dient dazu aufbauend auf einem **allgemeinen **Verhalten ein **spezielleres **Verhalten bereitzustellen. Da geht es **nicht **um Verwenden von Code.

Beispiel für das Verwenden wäre dies:class Beipiel1 { void eineMethode() { System.out.println("Beipiel1");} } class Beipiel2 { void eineAntereMethode() { System.out.println("Beipiel2");} } class Beispiel3{ void dieseMethodeVerwendetDieAnderenClassen(){ new Beispiel1().eineMethode() ; new Beispiel2().eineAndereMethode() ; } }

[quote=Unregistriert;119203]Hier der Code der einzelnen Klassen:[/quote]Zunächst solltest Du darauf achten, dass Du den Code sauber formatiert in das Forum postest und auch die Code-Tags verwendest.

Dann erben alle Deine Classen von JFrame. Leider wird das in vielen Tutorials so vor gemacht, ist aber 'ne ganz schlechte Angewohnheit, un zwar in erster Linie aus dem schon genannten Grund: solange ich das Verhalten von [JAPI]JFrame[/JAPI] (oder einer beliebigen anderen Klasse) selbst nicht verändern will wird auch nicht davon geerbt.

Das gleiche gilt für das Action-Listener-Interface.
Beispiel:```class Sdchlecht implements ActionListener {
private final JTextField eingabe1 = new JTextField();
private final JTextField eingabe2 = new JTextField();
public Schlecht(){
JFrame mainFrame = new Jframe(“Test Schlecht”);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLayout(new GrigLayout(2,0));
mainFrame.add(eingabe1);
mainFrame.add(eingabe2);
JButton add = new JButton("+");
add.addActionListener(this);
mainFrame.add(add);
JButton sub = new JButton("-");
sub.addActionListener(this);
mainFrame.add(sub);
mainFrame.pack();
mainFrame.setVisible(true);
}

// diese Methode steht weit weg von der Stelle, wo die Buttons ursprünglich erwähnt werden
public void actionPerformed(ActionEvent ae){
// hier musst Du feststellen, welcher der Button das Ereignis ausgelöst hat:
if("+".equals(((JButton)ae.getSource()).getCommand()){ /* addiere die Eingaben / }
if("-".equals(((JButton)ae.getSource()).getCommand()){ /
subtrahiere die Eingaben */ }
// für jeden weiteren Button benötigst Du hier ein weiteres if
}
}```

  private final JTextField eingabe1 = new JTextField();
  private final JTextField eingabe2 = new JTextField();
  public Besser(){
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mainFrame.setLayout(new GrigLayout(2,0));
    mainFrame.add(eingabe1);
    mainFrame.add(eingabe2);
    JButton add = new JButton("+");
    add.addActionListener(
      new ActionListener(){ // dies ist eine anonyme Klasse
         // diese Methode steht dieret dort, wo der Button konfiguriert wird
         public void actionPerformed(ActionEvent ae){
              // das Ereignis kann nur von einem Buton kommen, keine Prüfung notwendig!
             /* addiere die Eingaben */ 
        }
      }
    );
    mainFrame.add(add);
    JButton sub= new JButton("-");
    sub.addActionListener(
      new ActionListener(){
         public void actionPerformed(ActionEvent ae){
             /* subtrahiere die Eingaben */ 
        }
      }
    );
    mainFrame.add(sub);
  }
}```Der große Vorteil hier ist:
-  so lange die Funktionalität in für die Buttons klein ist wird sie nicht über die Klasse "verteilt"
-  wenn die Funktionalität der Butttons größer wäre könnte die leicht in eigene Klassen tranferiert werden. Deine IDE kann sowas dann automatisiert erledigen.

bye
thomas

@TO
DAS glaub ich ja wohl mal weniger !

public class frame extends JFrame implements ActionListener
//...```
Alleine bei der Zeile dreht sich mir gleich 3 mal der Magen um :
1) Klassen schreibt man **grundsätzlich** UpperCamelCase
2) erben von JFrame macht man nur wenn man sein verhalten ändert, wofür ich kein vernünftiges Beispiel kenne (kann man mir ja gerne mal posten)
3) Deine Klasse ist ganz sicher kein public ActionListener, warum also implementierst du das Interface auf Klassenebene ?

Weiter, warum dein Code nicht compilen kann :
```frame frame = new frame("UI");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400,500);```
Davon abgesehen dass hier Klasse und Variable exakt gleich geschrieben werden, was nun mal schlicht nicht geht, würden die beiden unteren Zeilen A) eine Konflikt auslösen zwischen statisch und nicht-statisch und B) wenn statisch dann eh nicht funktionieren.

Leider sieht man das hier ganz extrem wichtige Grundlagen leider komplett fehlen. Ich würde dir nahe legen bevor du dich mit diesem Code auch nur noch einen Zentimeter (ich weis, Zeit in Längeneinheiten messen fetzt, aber schließlich tut man dies mit Intiligenz ja auch) weiter beschäftigst solltest du erstmal die Basics lernen, dich vielleicht mit einem vernünftigen Nick registrieren und dir dann in ca. nem halben Jahr dieses "master-piece-of-sh*t" noch mal vornehmen. Ich bin sicher das dir dann selbst auffallen wird was das für ein Mist ist.

@Sen-Mithrarin : Grundsätzlich stimme ich deinem Posting zu, nur eine Korrektur: Variablen dürfen (leider) wie Klassen heißen. Die Namespaces von Klassen, Methoden und Variablen sind völlig voneinander getrennt, was solche Grausamkeiten legal macht:

public class Foo {
    Foo Foo;
    Bar Bar;
    
    void Bar(Foo Foo){ Bar Bar = new Foo.Bar(); }
    void Foo(Bar Bar){ Foo = new Foo(); Foo Foo = new Foo(); }

    class Bar {}
}