Heho Zusammen,
Mein Problem ist, dass wenn ich auf ein JPanel (das eine Graphik besitzt) ein weiteres JPanel mit add hinzufüge, das zweite JPanel nicht zu sehen ist. Ich wollte mal fragen ob das überhaupt möglich ist.
Hier noch mein Code
Die Klasse Panels ist eine erweiterte Form von JPanels.
Hier die Klasse Panels
und noch meine Haupt-Klasse falls irgendwer sie sehen möchte
Mein Problem ist, dass wenn ich auf ein JPanel (das eine Graphik besitzt) ein weiteres JPanel mit add hinzufüge, das zweite JPanel nicht zu sehen ist. Ich wollte mal fragen ob das überhaupt möglich ist.
Hier noch mein Code
Java:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Layout extends Panels {
private Panels[] felder;
public JTextField texteingabe;
public JButton nextRound;
public JPanel north;
public Panels zeiger,gras,auto;
private int i;
private boolean set;
private BufferedImage ganzesBild;
private BufferedImage bild;
public Layout() {// Default-Konsturktor-Beginn
Tasteneingebae tEingabe = new Tasteneingebae();// Erstellung des
// KeyListeners
setLayout(new GridLayout(10, 10));// Layout wird festgelegt
felder = new Panels[100];// Felder werden erzeugt
for (i = 0; i < felder.length; i++) {
felder[i] = new Panels();
add(felder[i]);
}
for (i = 0; i < felder.length; i++) {
if (felder[i] == null) {
System.out.println("null-Fehler " + i);
}
}
//---Panels für die Graphiken-----
zeiger=new Panels();//initalisierung
gras=new Panels();
auto=new Panels();
zeiger.setLayout(new GridLayout(0,1));//LayoutManager festlegen
gras.setLayout(new GridLayout(0,1));
auto.setLayout(new GridLayout(0,1));
//--Panels für Graphiken ende----
nextRound=new JButton("Runde Beenden");
texteingabe = new JTextField();// Erstellung der Steuerung
texteingabe.setBorder(null);
texteingabe.setFocusable(true);
texteingabe.addKeyListener(tEingabe);
felder[99].add(texteingabe);
nextRound = new JButton("Runde Beenden"); //Runde Beenden Button
north=new JPanel();
north.setLayout(new GridLayout(0,1));
north.add(nextRound);
// gras.setLayout(new GridLayout(0,1));
try {// Gras-Bild wird geladen
BufferedImage ganzesBild = ImageIO.read(new File("grasTest.png"));
for (i = 0; i < felder.length; i++) {
felder[i].setHintergrund(ganzesBild.getSubimage(0, 0, 100, 100));
gras.setHintergrund(ganzesBild);
bild=ganzesBild;
}
gras.setHintergrund(ganzesBild.getSubimage(0, 0, 100, 100));
} catch (IOException e) {
System.err.println("Fehler beim Laden von grasTest.png");
}
try {// Zeiger-Bild wird geladen
BufferedImage ganzesBild = ImageIO.read(new File("Zeiger.png"));
zeiger.setHintergrund(ganzesBild);
} catch (IOException e) {
System.err.println("Fehler beim Laden von Zeiger.png");
}
try{
BufferedImage ganzesBild=ImageIO.read(new File("Auto.png"));
auto.setHintergrund(ganzesBild.getSubimage(0, 0, 100, 100));
}catch(IOException e){
System.err.println("Fehler beim Laden von Auto.png");
}
}
// --------------Defautlt-Konsturktor Ende------------------------------
// --------------------------------------------------------------------------
public void farbwechsel(int feld) { // Bestimmt das Feld wo der Zeiger ist
felder[feld].setMakiertes_feld(true);
felder[feld].setLayout(new GridLayout(0,1));
felder[feld].setHintergrund(bild);
felder[feld].add(zeiger);
}
public int feldbestimmung() { // Bestimmt wo der zeiger gerade ist
for (int i = 0; i < 100; i++) {
if (felder[i].isMakiertes_feld() == true) {
return i;
}
}
return -1;
}
public void aktualisierung() { // Aktualisiert das Fenster
for (i = 0; i < felder.length; i++) {
if (felder[i].isMakiertes_feld() == true) { //ist der Zeiger auf dem Feld(ja)
felder[i].add(zeiger);
}else{
felder[i].remove(zeiger);
}
if (felder[i].isAuto() == true) { //ist ein Auto auf dem Feld
if (felder[i].isAuto() == true //ist Auto und Zeiger auf dem Feld
&& felder[i].isMakiertes_feld() == true) {
felder[i].add(auto);
auto.add(zeiger);
} else {
felder[i].add(auto);//Nur das Auto ist auf dem Feld
}
} else {
felder[i].remove(auto);
}
}
}
public void moveLinks(int posi) { // Feld nach Links bewegen
if ((posi - 1) != -1 && (posi - 1) % 10 != 9) {
felder[posi].setMakiertes_feld(false);
felder[posi - 1].setMakiertes_feld(true);
}
aktualisierung();
}
public void moveRechts(int posi) { // Feld nach Rechts bewegen
if ((posi + 1) % 10 != 0) {
felder[posi].setMakiertes_feld(false);
felder[posi + 1].setMakiertes_feld(true);
}
aktualisierung();
}
public void moveUnten(int posi) { // Feld nach Unten bewegen
if ((posi + 10) < 100) {
felder[posi].setMakiertes_feld(false);
felder[posi + 10].setMakiertes_feld(true);
}
aktualisierung();
}
public void moveOben(int posi) { // Feld nach oben bewegen
if ((posi - 10) > -1) {
felder[posi].setMakiertes_feld(false);
felder[posi - 10].setMakiertes_feld(true);
}
aktualisierung();
}
public void setAuto(int posi){ // Auf das Feld wird ein Auto gestellt
felder[posi].setAuto(true);
}
public void resetAuto(int posi){// Auto wird vom Feld entfernt
felder[posi].setAuto(false);
}
public class Tasteneingebae implements KeyListener { // Abfangen der
// Tasteneingaben
private int feldposition = 0;
@Override
public void keyPressed(KeyEvent e) {// Wird ausgeführt, wenn eine Taste
// gedrückt wurde.
System.out.println("test");
feldposition = feldbestimmung(); // Blaues-Feld wird bestimmt
texteingabe.setText("");
if (e.getKeyChar() == 'a') { // Blaues-Feld wird nach Links bewegt
moveLinks(feldposition);
}
if (e.getKeyChar() == 'd') { // Blaues-Feld wird nach Rechts bewegt
moveRechts(feldposition);
}
if (e.getKeyChar() == 'w') { // Blaues-Feld wird nach Oben bewegt
moveOben(feldposition);
}
if (e.getKeyChar() == 's') { // Blaues-Feld wird nach Unten bewegt
moveUnten(feldposition);
}
if(e.getKeyChar()=='c'){
setAuto(feldposition);
}
if(e.getKeyChar()=='r'){
setAuto(feldposition);
}
}
@Override
public void keyReleased(KeyEvent e) {// Wird ausgeführt, wenn eine Taste
// losgelassen wurde.
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {// Wird ausgeführt, wenn eine Taste
// gedrückt und wieder losgelassen
// wurde.
// TODO Auto-generated method stub
}
}
}
Die Klasse Panels ist eine erweiterte Form von JPanels.
Hier die Klasse Panels
Java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class Panels extends JPanel{
private boolean green; //ist das Feld grün angemalt?
private boolean makiertes_feld; //ist das Feld gerade ausgewählt?
private boolean auto; //ist auf dem Feld ein Auto
private Image hintergrundbild; //Hintergrundsbild für Panels
private BufferedImage bild,hintergrund;
public boolean isMakiertes_feld() {
return makiertes_feld;
}
public void setMakiertes_feld(boolean makiertes_feld) {
this.makiertes_feld = makiertes_feld;
}
public boolean isGreen() {
return green;
}
public void setGreen(boolean green) {
this.green = green;
}
public boolean isAuto() {
return auto;
}
public void setAuto(boolean auto) {
this.auto = auto;
}
public Panels(){
}
public void setHintergrund(BufferedImage hintergrund){
this.hintergrund=hintergrund;
repaint();
}
public void setImage(BufferedImage bild){ //Konstruktor fürs HintergrundPanel
this.bild=bild;
repaint();
}
public void paintComponent(Graphics g) { //Nur nutzen wenn Bilder verwendet werden
g.drawImage(hintergrund, 0, 0,getWidth(),getHeight(), null);
}
}
und noch meine Haupt-Klasse falls irgendwer sie sehen möchte
Java:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Haupt {
/**
* @param args
*/
public static void main(String[] args) {
JFrame mainWindow=new JFrame();
JPanel center=new JPanel();
Container contentPain = mainWindow.getContentPane();
mainWindow.setSize(500, 500);
mainWindow.setDefaultCloseOperation(mainWindow.EXIT_ON_CLOSE);
mainWindow.setResizable(false);
Layout layout=new Layout();
// contentPain.add(layout.north,BorderLayout.NORTH);
contentPain.add(layout,BorderLayout.CENTER);
layout.farbwechsel(44);
mainWindow.setVisible(true);
}
}