Erste Schritte jpanel in einer klasse auslagern

kill_dmp

Aktives Mitglied
hi all
habe mal wieder eine frage an euch,
ich versuche ein JPanel auszulagern
soll heisen das in meinen fenser ein lehres jpanel habe wo nix drin ist bis auf eine verlinkung zu einer anderen klasse die beschreibt was angezeit werden soll.

ja und um erlich zu sein ich habe KA was ich da machen muss

sry wenn die frage zu einfach ist oder ich zu blöd sie zu lösen aber in den tut´s die ich bis jetzt gesehen habe wurde so was nie beschrieben

hire mein erster versuch
doch starte nur ein 2tes fenster
Java:
package View;

import java.awt.BorderLayout;
import java.awt.Color;

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

public class SpieleFenster extends JFrame {

	public SpieleFenster() {
				
		this.setSize(1024, 720);
		this.setVisible(true);
		this.setLayout(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setResizable(false);
		
		//interface mitte unten
		JPanel pannel_unten_interface = new JPanel();
		pannel_unten_interface.setBackground(Color.GREEN);
		pannel_unten_interface.setBounds(1, 500, 1024, 220);
		this.add(pannel_unten_interface);
		
		//interface rechts
		JPanel pannel_rechts_interface = new JPanel();
		pannel_rechts_interface.setBackground(Color.BLACK);
		pannel_rechts_interface.setBounds(896, 1, 128, 500);
		this.add(pannel_rechts_interface);
		
		//interface links
		JPanel pannel_links_interface =new JPanel();
		pannel_links_interface.setBackground(Color.BLUE);
		pannel_links_interface.setBounds(1, 1, 128, 500);
		this.add(pannel_links_interface);
		
		//2d karte berech
		JPanel pannel_2d_karte =new JPanel(new BorderLayout());
		pannel_2d_karte.setBackground(Color.RED);
		pannel_2d_karte.setBounds(1, 1, 1024, 600);
		this.add(pannel_2d_karte);
		pannel_2d_karte.add(new Karte());
		

		
		
	}
}
Java:
package View;

import java.awt.BorderLayout;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Karte extends JFrame{

	public Karte(){
	
	Icon bild_insel1 = new ImageIcon(getClass().getResource("insel1.jpg"));
	JButton button_insel_1 = new JButton(""+bild_insel1);
	add(button_insel_1, BorderLayout.CENTER);
	setVisible(true);
	button_insel_1.setVisible(true);
	
	Icon bild_insel2 = new ImageIcon(getClass().getResource("insel2.jpg"));
	JButton button_insel_2 = new JButton(""+bild_insel2);
	add(button_insel_2, BorderLayout.PAGE_END);	


	
	}
	
}
 
Also um ein Panel in eine Klasse auszulagern erstellt man eine neue Klasse xyz und lässt diese von JPanel erben. Nun hat diese Klasse xyz die gleichen Methoden wie ein Panel.

Du hast von JFrame geerbt (beide Klassen bei dir), dadurch wird natürlich wieder ein neues Fenster erzeugt.

Die Klasse xyz mit dem Panel muss dann natürlich noch dem Hauptfenster (JFrame) mit add hinzugefügt werden.
 
hi Fab1 und danke erst mal für die schnelle antwort
so ich habe es jetzt so verändert wie du es beschrieben hast

die main
Java:
package Control;

import javax.swing.JFrame;

import View.SpieleFenster;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
		
		JFrame spielfeld =new SpieleFenster();

	}

}
das Jframe
Java:
package View;

import java.awt.BorderLayout;
import java.awt.Color;

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

public class SpieleFenster extends JFrame {

	public SpieleFenster() {
				
		this.setSize(1024, 720);
		this.setVisible(true);
		this.setLayout(null);
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setResizable(false);
		
		//interface mitte unten
		JPanel pannel_unten_interface = new JPanel();
		pannel_unten_interface.setBackground(Color.GREEN);
		pannel_unten_interface.setBounds(1, 500, 1024, 220);
		this.add(pannel_unten_interface);
		
		//interface rechts
		JPanel pannel_rechts_interface = new JPanel();
		pannel_rechts_interface.setBackground(Color.BLACK);
		pannel_rechts_interface.setBounds(896, 1, 128, 500);
		this.add(pannel_rechts_interface);
		
		//interface links
		JPanel pannel_links_interface =new JPanel();
		pannel_links_interface.setBackground(Color.BLUE);
		pannel_links_interface.setBounds(1, 1, 128, 500);
		this.add(pannel_links_interface);
		
		//2d karte berech
		JPanel pannel_2d_karte =new JPanel();
		pannel_2d_karte.setBackground(Color.RED);
		pannel_2d_karte.setBounds(1, 1, 1024, 600);
		this.add(pannel_2d_karte);
		pannel_2d_karte.add(new Karte());
		

		
		
	}
}

und hier das panel
Java:
package View;

import java.awt.BorderLayout;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Karte extends JPanel{

	public Karte(){
	
	Icon bild_insel1 = new ImageIcon(getClass().getResource("insel1.jpg"));
	JButton button_insel_1 = new JButton(""+bild_insel1);
	add(button_insel_1);
	button_insel_1.setVisible(true);
	button_insel_1.setBounds(20, 50, 100, 200);
	
	Icon bild_insel2 = new ImageIcon(getClass().getResource("insel2.jpg"));
	JButton button_insel_2 = new JButton(bild_insel2);
	add(button_insel_2);	
	button_insel_2.setBounds(40, 100, 200, 400);

	
	}
	
}

das pro was ich jetzt habe ist das ich keine anzeige im frame habe von den panel
also der button wird mir nicht angezeit
 
Zuletzt bearbeitet:
Bin mir gerade nicht sicher was du meinst, aber was mir gerade noch auffällt.


setVisible(true) sollte IMMER erst am Schluss aufgerufen werden. Ansonsten kann es sein, dass bestimmte Komponenten nicht angezeigt werden. Oder erst angezeigt werden, wenn dein Programm den Befehl bekommt sich neu zu zeichnen.

Des Weiteren ist es zu empfehlen mit Layoutmanagern zu arbeiten. Das von dir verwendete Null-Layout ist nicht zu empfehlen, da es hierbei passieren kann das Komponenten nicht angezeigt werden. Siehe auch: Java: Null Layout is Evil
 

Zurück
Oben