Hintergrund für GUI

Takar110

Mitglied
Moin Leute,

ich bin ein Anfänger in Sachen GUI und auch in Java allgemein. Unser Lehrer hat uns für GUI Aufgaben 2 Klassen zur verfügung gestellt, eine View und eine Logic Klasse.
Ich habe damit ein Space Invader Spiel erstellt welches funktionstüchtig ist. Jetzt möchte ich es aber gerne verschönern indem ich beispielsweise ein Hintergrundbild einfüge. Im Internet finde ich nur lösungen mit einem JLabel, damit arbeite ich aber nicht wie ihr in den unteren Codes erkennen könnt.
Hättet ihr eine Lösung für mich?

Gruß Takar :)


View:

Java:
package spaceInvaders;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class View extends JFrame {

  private static final long serialVersionUID = 1L;

  public static View instance = null;
  private JPanel gamePanel = new JPanel();
  private BufferedImage img;

  public BufferedImage getImg() {
    return img;
  }

  public void setImg(BufferedImage img) {
    this.img = img;
    repaint();
  }

  public static View getInstance() {
    if (instance == null)
      instance = new View();
    return instance;
  }

  private View() {
    super("Space Invaders");

    Shuttle shuttle = Logic.getShuttle();
    instance = this;
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setContentPane(gamePanel);
    setSize(470, 650);
    setLocation(400, 300);
    setVisible(true);

    addKeyListener(new KeyListener() {
      @Override

      public void keyTyped(KeyEvent e) {
      }

      public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_LEFT) {
          int aktuellerxPunkt = shuttle.getXpunkt();
          if (aktuellerxPunkt != 0) {
            aktuellerxPunkt -= 10;
          }
          shuttle.setXpunkt(aktuellerxPunkt);
        }
        if (key == KeyEvent.VK_RIGHT) {
          int aktuellerxPunkt = shuttle.getXpunkt();
          if (aktuellerxPunkt != 390) {
            aktuellerxPunkt += 10;
          }
          shuttle.setXpunkt(aktuellerxPunkt);
        }
        if (key == KeyEvent.VK_UP) {
          Logic.schuss = true;
        }
      }

      public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
        if (key == KeyEvent.VK_LEFT) {

        }
        if (key == KeyEvent.VK_RIGHT) {

        }
        if (key == KeyEvent.VK_UP) {
          Logic.schuss = false;
        }
      }
    });

    Thread t = new Thread(new Logic());
    t.start();
  }

  public void paint(Graphics g) {
    g.drawImage(img, 5, 22, 460, 650, new ImageObserver() {

      @Override
      public boolean imageUpdate(Image arg0, int arg1, int arg2,
        int arg3, int arg4, int arg5) {
        return true;
      }
    });

  }

  public static void main(String[] args) {
    View.getInstance();
  }
}

Logic:

Java:
package spaceInvaders;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class Logic implements Runnable {

  int xSpielfeld = 400;
  int ySpielfeld = 390;
  long zaehler = 0;
  int punkte = 00;
  int invaderRate = 13;
  public static boolean schuss = false;
  boolean rateErhoehen = false;
  private static Shuttle shuttle = new Shuttle();
  private BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
  ArrayList<Invader> invaders = new ArrayList<Invader>();
  ArrayList<Schuss> schuesse = new ArrayList<Schuss>();

  @Override
  public void run() {

    while (true) {
      zaehler++;
      // Hintergrund
      Graphics grafik = img.getGraphics();
      grafik.setColor(Color.black);
      grafik.fillRect(0, 0, 450, 650);
      if ((zaehler % invaderRate) == 0) {
        invaders.add(new Invader());
      }

      for (int i = 0; i < invaders.size(); i++) {
        int aktuellerYPunkt = invaders.get(i).getyPunkt();
        aktuellerYPunkt++;
        invaders.get(i).setyPunkt(aktuellerYPunkt);
      }

      grafik.setColor(Color.lightGray);
      grafik.fillOval(shuttle.getXpunkt(), shuttle.getStartpunktY(), 9, 9);

      grafik.setColor(Color.GREEN);
      for (int i = 0; i < invaders.size(); i++) {
        grafik.fillOval(invaders.get(i).getStartpunktX(), invaders.get(i).getyPunkt(), 5, 7);
      }
      for (int i = 0; i < invaders.size(); i++) {
        int aktuellerYPunkt = invaders.get(i).getyPunkt();
        if (aktuellerYPunkt == (ySpielfeld - 10)) {
          JOptionPane.showMessageDialog(null, "Game Over " + punkte);
          System.exit(0);
        }
      }
      for (int j = 0; j < schuesse.size(); j++) {
        if (schuesse.get(j).getyPunkt() <= 13) {
          schuesse.remove(j);
        }
      }

      abschießen();

      grafik.setColor(Color.red);
      if (schuss == true && (zaehler % 4 == 0)) {
        schuesse.add(new Schuss(shuttle.getXpunkt() + 4));
      }
      for (int amk = 0; amk < schuesse.size(); amk++) {
        int aktuellerYPunkt = schuesse.get(amk).getyPunkt();
        aktuellerYPunkt = (aktuellerYPunkt - 2);
        schuesse.get(amk).setyPunkt(aktuellerYPunkt);
      }
      grafik.setColor(Color.red);
      for (int i = 0; i < schuesse.size(); i++) {
        grafik.fillOval(schuesse.get(i).getStartpunktX(), schuesse.get(i).getyPunkt(), 2, 2);
      }

      grafik.setColor(Color.white);
      if ((punkte % 100) == 0 && punkte != 0) {
        grafik.drawString("NEXT LEVEL", 180, 200);
      }

      View.getInstance().setImg(img);
      grafik.setColor(Color.white);
      grafik.drawString(" " + punkte, 20, 370);
      try {
        Thread.sleep(40);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }

  }

  public static Shuttle getShuttle() {
    return shuttle;
  }

  public void abschießen() {
    for (int i = 0; i < invaders.size(); i++) {
      for (int j = 0; j < schuesse.size(); j++) {
        if ((invaders.get(i).getyPunkt() <= (schuesse.get(j).getyPunkt() + 2)
            && (invaders.get(i).getyPunkt() >= (schuesse.get(j).getyPunkt() - 2))
            && (invaders.get(i).getStartpunktX() - 3 <= schuesse.get(j).getStartpunktX() + 3)
            && invaders.get(i).getStartpunktX() + 3 >= (schuesse.get(j).getStartpunktX()) - 3)) {
          punkte++;
          invaders.remove(i);
          schuesse.remove(j);
        }
      }
    }
  }
}

Invader:

Java:
package spaceInvaders;

public class Invader {
  private int startpunktX;
  private int yPunkt = 0;

  public Invader () {
    startpunktX = (int) (Math.random()*390);
  }

  public int getStartpunktX() {
    return startpunktX;
  }

  public int getyPunkt() {
    return yPunkt;
  }

  public void setyPunkt(int yPunkt) {
    this.yPunkt = yPunkt;
  }


}

Shuttle:

Java:
package spaceInvaders;

public class Shuttle {

  private int Xpunkt = 200;
  private int startpunktY;

  public Shuttle() {
    startpunktY = 365;
  }

  public int getXpunkt() {
    return Xpunkt;
  }

  public void setXpunkt(int xpunkt) {
    Xpunkt = xpunkt;
  }

  public int getStartpunktY() {
    return startpunktY;
  }
}

Schuss:

Java:
package spaceInvaders;

public class Schuss {

  private int startpunktX;
  private int yPunkt = 363;

  public Schuss (int x) {
    startpunktX = x;
  }

  public int getStartpunktX() {
    return startpunktX;
  }

  public int getyPunkt() {
    return yPunkt;
  }

  public void setyPunkt(int yPunkt) {
    this.yPunkt = yPunkt;
  }

}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Hintergrund für 3D Erde AWT, Swing, JavaFX & SWT 4
R Bilder als Hintergrund für Swing - Komponenten AWT, Swing, JavaFX & SWT 3
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
1 2D-Grafik Flackerndes Hintergrund AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX HTTP Download task im Hintergrund innerhalb GUI AWT, Swing, JavaFX & SWT 70
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
F 2D-Grafik Den Hintergrund loopen AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
M Tastatureingabe im Hintergrund (JTable) AWT, Swing, JavaFX & SWT 2
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
B Swing Zähler im Hintergrund falsch berechnet - Warum? AWT, Swing, JavaFX & SWT 3
J JButton Hintergrund AWT, Swing, JavaFX & SWT 5
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
L Beim Neuzeichnen einer Swing GUI kurz Schwarzer Hintergrund AWT, Swing, JavaFX & SWT 8
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
S 2D-Grafik Bild bleibt im Hintergrund bei Diashow AWT, Swing, JavaFX & SWT 3
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
B JList transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
E Swing JPanel mit Hintergrund AWT, Swing, JavaFX & SWT 3
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
T Hintergrund AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
P Swing Zeichnung auf Tab im Hintergrund wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
R Bedeckter Hintergrund AWT, Swing, JavaFX & SWT 17
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JFrame (Mausrad, Hintergrund) AWT, Swing, JavaFX & SWT 13
Dragonfire Swing Hintergrund aller Komponenten verändern AWT, Swing, JavaFX & SWT 2
DStrohma Swing JPanel mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
algorismi JCompnent mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 4
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
E Progress Bar mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
N im fenster ein hintergrund bild einfügen AWT, Swing, JavaFX & SWT 18
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
A Hintergrund erstellen AWT, Swing, JavaFX & SWT 13
J Layer von JLayeredPane unsichtbar durchsichtig in den Hintergrund AWT, Swing, JavaFX & SWT 5
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
P Swing JComboBox beschädigt hintergrund AWT, Swing, JavaFX & SWT 4
S JButton - Hintergrund verändern AWT, Swing, JavaFX & SWT 7
J Fensterrand überdeckt Hintergrund AWT, Swing, JavaFX & SWT 9
K JTable hintergrund AWT, Swing, JavaFX & SWT 12
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
G Label auf Panel auf Panel mit Grafiken als Hintergrund (awt) AWT, Swing, JavaFX & SWT 7
G TextField im Hintergrund AWT, Swing, JavaFX & SWT 2
O Zweifarbiger Hintergrund in einer TableCell? AWT, Swing, JavaFX & SWT 4
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
V JButton in Hintergrund zwingen? AWT, Swing, JavaFX & SWT 14
G Hintergrund AWT, Swing, JavaFX & SWT 5
M Hintergrund Transparent machen? AWT, Swing, JavaFX & SWT 3
C Fenster rücken beim Drucken in den Hintergrund AWT, Swing, JavaFX & SWT 6
B Programm im Hintergrund - JFrame AWT, Swing, JavaFX & SWT 5
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
F JDialog im Hintergrund lassen AWT, Swing, JavaFX & SWT 2
G schwarzen hintergrund von png transparent machen AWT, Swing, JavaFX & SWT 2
J jlabels überlappen / vorder-hintergrund AWT, Swing, JavaFX & SWT 2
G hintergrund farbe vom flow layout ändern AWT, Swing, JavaFX & SWT 2
S Button im Hintergrund AWT, Swing, JavaFX & SWT 12
foobar JTable im Hintergrund drucken AWT, Swing, JavaFX & SWT 2
B Hintergrund eines JPanels AWT, Swing, JavaFX & SWT 16
M Bild als Hintergrund anzeigen? AWT, Swing, JavaFX & SWT 12
S Hintergrund JTable AWT, Swing, JavaFX & SWT 9
G hintergrund von JFrame/Container transparent machen AWT, Swing, JavaFX & SWT 2
R JMenu + Farbe von Hintergrund AWT, Swing, JavaFX & SWT 2
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
RoliMG png datein mit transparentem hintergrund darstellen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben