LayoutManager Anorden von verschiedenen JPanels

Status
Nicht offen für weitere Antworten.

bliko

Mitglied
Ich möchte zwei verschieden Panels in einem Fenster anordnen, bei mir wird immer nur eines angezeigt. Ich habe folgende Dateien geschrieben:

Code:
ImgPanel.java
package komponenten;

import javax.swing.*;
import java.awt.*;

/**
 * Die Klasse MyPanel erbt von JPanel Eigenschaften und Methoden; dadurch können
 * "Komponenten" der Klasse Component gezeichnet werden.
 * @author (Leopold Kneidinger) 
 * @version (09.06.2007)
 */


public class ImgPanel extends JPanel
{
	private Color[] farben = {Color.white, Color.black, Color.blue,
				  	  Color.red, Color.yellow, Color.cyan, 
					  Color.lightGray, Color.magenta, Color.green, Color.darkGray};
	private Image bild1;
	private Image bild2;
	private Image img;
	int breite;

	public ImgPanel()
	{
		//setBackground(farben[6]);
		Toolkit kit = Toolkit.getDefaultToolkit();
		MediaTracker tracker = new MediaTracker(this);
		
		bild1 = kit.getImage(getClass().getResource("/komponenten/img/kreuz01.jpg"));
		bild2 = kit.getImage(getClass().getResource("/komponenten/img/gandhi01.jpg"));
		
		// Bilder beim Tracker anmelden
		tracker.addImage(bild1, 0);
		tracker.addImage(bild2, 1);
		System.out.println(tracker.checkID(0));
		
		// Ueberwachen
		try{
			tracker.waitForAll();
		}
		catch (InterruptedException exception){
			System.err.println("Kann das Bild nicht lesen");
		}
		
	}
	
	public void setBreite(int br){
		breite = br;
	}

	public void paintComponent (Graphics grafik)
	{
		super.paintComponent(grafik);

		// Die Bildbreiten bestimmen
		int seitenlaenge = bild1.getWidth(this);
		
		// Position der Bilder auf der y-Achse festlegen
		int yabstand = 0;
		
		for(int zeile=0; zeile<breite; ++zeile){
			// jeweilige Position auf der x-Achse
			// muss am Zeilenanfang immer 0 sein;
			int xabstand = 0;
			for(int spalte=0; spalte<breite; ++spalte){
				if((zeile-spalte) == 0 || (zeile+spalte) == breite-1)
					grafik.drawImage(bild2, xabstand, yabstand, this);
				else
					grafik.drawImage(bild1, xabstand, yabstand, this);
				xabstand += seitenlaenge;
			}
			yabstand += seitenlaenge;
		}
		
		/*
		grafik.drawImage(bild2, 0, 0, this);
		grafik.drawImage(bild1, 60, 0, this);
		grafik.drawImage(bild1, 120, 0, this);
		grafik.drawImage(bild2, 180, 0, this);
		*/
	}
}

TextPanel.java

Code:
package komponenten;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TextPanel extends JPanel implements ActionListener{
	
	private JButton ersetzKnopf;
	private JTextArea textArea;
	private JTextField was;
	private JTextField durch;
	
  	public TextPanel(){
  		
  		setLayout(new FlowLayout(3));
  		add(new JLabel("Ersetze"));
	    add(was = new JTextField("", 8));
	    add(new JLabel("durch"));
	    add(durch = new JTextField("", 8));
	  	
	    add(ersetzKnopf = new JButton("ERSETZEN"));
	  	ersetzKnopf.addActionListener(this);
	  	
	  	add(textArea = new JTextArea(2,40));
	  	textArea.setBounds(0, 50, 100,0);
	  	textArea.setText ("Ersetze ... durch ... ");
	}
		    
	public void actionPerformed(ActionEvent er){
		//Object quelle = er.getSource();
	    String ws = textArea.getSelectedText();
	    if (ws == null)
	        ws = was.getText();
	    else
	        was.setText(ws);
	    int len = ws.length();
	    if (len == 0) return;
	    int pos = textArea.getText().indexOf(ws);
	        
	    if (pos >= 0) {
	        textArea.replaceRange(durch.getText(), pos, pos+len);
	    }
	}
}

beide benutzen noch Rahmen.java zur Ausführung

Code:
package komponenten;

import javax.swing.*;
import java.awt.*;

/**
 * Die Klasse Rahmen erbt von JFrame, legt die Grösse fest
 * setzt den Titel und ein Icon und zentriert das Fenster in
 * der Mitte des Bildschirms.
 * @author Leopold Kneidinger
 */

public class Rahmen extends JFrame{
	private int breite, hoehe;
	private Image img;
	private Toolkit kit;
	
	public Rahmen(String titel, int b, int h)
	{
		int rand = 8;
		breite = b + rand;
		hoehe = h + 4*rand;
		setTitle(titel);
		setSize(breite, hoehe);
		setLocationRelativeTo(null);
		kit = Toolkit.getDefaultToolkit();
		img = kit.getImage(getClass().getResource("/komponenten/img/gandhi01.jpg"));
		setIconImage(img);
	}

	/*
	public static void main(String[] args)
	{
		Rahmen frame = new Rahmen("Bilderrahemen", 540, 540);
		frame.setLocationRelativeTo(null);
		Container inhaltsEb = frame.getContentPane();
		ImgPanel p = new ImgPanel();
		p.setBreite(9);
		inhaltsEb.add(p);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//frame.pack();
		frame.setVisible(true);
	}
	*/
	
}

und nun versuchte ich, beide Panels in einer Datei KomponentenPanel.java mit dem GridBagLayout anzuordnen, doch das klappt nicht, es wird nur das TextPanel halb angezeigt.

Code:
package komponenten;

import java.awt.*;
import javax.swing.*;

public class KomponentenPanel extends JPanel{
	
	Label titel;
	
	public KomponentenPanel(){
		titel = new Label ("KomponentenPanel");
		GridBagLayout gbl = new GridBagLayout ( );   		// Erzeugen eines GridBag Objekts
		GridBagConstraints gbc = new GridBagConstraints(); 	// Erzeugen der Constraints
		setLayout(gbl);										// Layout für den Panel setzen
		
		gbc.anchor = GridBagConstraints.NORTH;			// Ausrichtung: Oben
	    gbc.gridwidth = GridBagConstraints.REMAINDER;	// Komponente ist letzte in der Reihe
	    gbc.gridx = 0;
		gbc.gridy = 0;
	    add (titel, gbc);
		
		ImgPanel imgP = new ImgPanel();
		imgP.setBreite(6);
		gbc.anchor = GridBagConstraints.NORTH;
		gbc.gridx = 0;
		gbc.gridy = 1;
	    gbc.gridwidth = GridBagConstraints.REMAINDER;
	    add(imgP, gbc);
	    
	    TextPanel textP = new TextPanel();
		gbc.anchor = GridBagConstraints.SOUTH;
		gbc.gridx = 0;
		gbc.gridy = 2;
	    gbc.gridwidth = GridBagConstraints.REMAINDER;
	    add(textP, gbc);
	}
	

}

und last but not least eine KomponentenPanelTest.java
Code:
package komponenten;

import java.awt.Container;
import javax.swing.JFrame;

public class KomponentenPanelTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Rahmen frame = new Rahmen("Text ersetzen", 500, 800);
		Container inhaltsEb = frame.getContentPane();
		KomponentenPanel kp = new KomponentenPanel();
		//ImgPanel p2 = new ImgPanel();
		//p2.setBreite(9);
		inhaltsEb.add(kp);
		//inhaltsEb.add(p2);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);

	}

}

so das wärs, ich weiß, dass ich noch blutiger Anfänger bin, dennoch meine Bitte, vielleicht nur ein Tipp, wie dieses Problem zu lösen wäre.[/code]
 
P

Patte

Gast
Hi!
Bei etwas größeren Projekten ggf. eine Eclipse-Projektdatei beilegen, das hätte mir das endlose Kopieren und Erstellen der Grafik-Dateien erspart ;)

Mein Tipp wäre, ohne Toolkit und MediaTracker zu kennen:
deinem ImgPanel wurde noch kein Component hinzugefügt, sondern hat nur Bilder geladen. Es fehlt also ein this.add(xx), wobei xx irgendwie das Toolkit oder den MediaTracker in irgendeiner Form darstellen sollte. paintComponent wird ebenfalls nicht aufgerufen.

Falls das nicht weiterhilft, müssen die Cracks antworten ;)
 

bliko

Mitglied
das war nicht ganz meine Frage, das mit dem Layout-Manager war ja nur so ein Versuche, im Grunde hätte ich gerne folgendes: ich möchte zwei Panels in einem Frame anzeigen, es wird aber jeweils nur das zweite, das eben das erste überschreibt, angezeigt. in etwa so:

Code:
package komponenten;

import java.awt.Container;
import javax.swing.JFrame;

public class KomponentenPanelTest {

   /**
    * @param args
    */
   public static void main(String[] args) {
      Rahmen frame = new Rahmen("Text ersetzen", 500, 800);
      Container inhaltsEb = frame.getContentPane();
      KomponentenPanel kp = new KomponentenPanel();
      ImgPanel p2 = new ImgPanel();
      p2.setBreite(9);         //muss gesetzt werden, um die Anzahl der Felder festzulegen;
      inhaltsEb.add(kp);
      inhaltsEb.add(p2);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setVisible(true);

   }

}

meine Frage ist daher: was muss verändert werden, damit beide Panels, die sich im Container inhaltsEb befinden, angezeigt werden.
 
G

Gast

Gast
ich würde versuchen dem Container ein Layoutout zu setzen. Zum Beispiel:

inhaltsEb.setLayout(new GridLayout(2,2))

weiß aber nicht ob das funktioniert
 
G

Guest

Gast
ich habe nun folgenden Code, um zwei Panels anzuordnen:

Rahmen.java

Code:
package komponenten;

import javax.swing.*;
import java.awt.*;

/**
* Die Klasse Rahmen erbt von JFrame, legt die Grösse fest
* setzt den Titel und ein Icon und zentriert das Fenster in
* der Mitte des Bildschirms.
* @author Leopold Kneidinger
*/

public class Rahmen extends JFrame{
   private int breite, hoehe;
   private Image img;
   private Toolkit kit;
   
   public Rahmen(String titel, int b, int h)
   {
      int rand = 8;
      breite = b + rand;
      hoehe = h + 4*rand;
      setTitle(titel);
      setSize(breite, hoehe);
      setLocationRelativeTo(null);
      kit = Toolkit.getDefaultToolkit();
      img = kit.getImage(getClass().getResource("/komponenten/img/gandhi01.jpg"));
      setIconImage(img);
   }

   
   public static void main(String[] args)
   {
      Rahmen frame = new Rahmen("Bilderrahemen", 480, 800);
      frame.setLocationRelativeTo(null);
      Container inhaltsEb = frame.getContentPane();
      ImgPanel p = new ImgPanel();
      p.setBreite(7);
      TextPanel tp = new TextPanel();
      inhaltsEb.setLayout(new GridLayout(2,2));
      inhaltsEb.add(tp);
      Dimension d = new Dimension(400, 100);
      d = tp.preferredSize();
      inhaltsEb.add(p);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      //frame.pack();
      frame.setVisible(true);
   }
   
   
}

Die Dateien Textpanel.java und ImgPanel.java sind oben kopiert. Die Bilder sind in einem Ordner img im Ordner komponenten (package komponenten). Es wird soweit auch alles angezeigt, doch hätte ich gerne, dass das TextPanel nur soviel Platz wie nötig braucht, der Abstand zwischen den Panels richtet sich nach dem größeren. Geht das mit einem GridLayout? Wie können die Abstände geregelt werden?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Breite von Textfeldern trotz Layoutmanager Java Basics - Anfänger-Themen 4
T LayoutManager für Spiele Java Basics - Anfänger-Themen 2
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
D Grösse eines JPanel hinsichtlich LayoutManager festlegen Java Basics - Anfänger-Themen 4
M Suche den passenden LayoutManager Java Basics - Anfänger-Themen 4
I eigener "Abstandshalter" vs. LayoutManager Java Basics - Anfänger-Themen 6
J Welchen Layoutmanager nehmen? Java Basics - Anfänger-Themen 4
P Java LayoutManager... Java Basics - Anfänger-Themen 3
A Hilfe mit LayoutManager, Applet zu Applikation umwandeln Java Basics - Anfänger-Themen 13
A RadioButtons in LayoutManager Java Basics - Anfänger-Themen 6
G JLabel mittig ohne LayoutManager Java Basics - Anfänger-Themen 2
kulturfenster jar und LayoutManager Java Basics - Anfänger-Themen 5
G Welchen Layoutmanager verwenden? Java Basics - Anfänger-Themen 7
B Komponenten im LayoutManager zentrieren Java Basics - Anfänger-Themen 5
J Mit welchem LayoutManager Problem lösen? Java Basics - Anfänger-Themen 2
G LayoutManager kombinieren Java Basics - Anfänger-Themen 2
C Layoutmanager richtig verwenden? Java Basics - Anfänger-Themen 9
R LayoutManager Problem Java Basics - Anfänger-Themen 2
T Hilfe bei LayoutManager-Verschachtelung Java Basics - Anfänger-Themen 3
S LayoutManager Java Basics - Anfänger-Themen 15
S welchen layoutmanager Java Basics - Anfänger-Themen 9
G JTable ohne LayoutManager Java Basics - Anfänger-Themen 3
B Mit dem Layoutmanager die Buttongrösse bestimmen Java Basics - Anfänger-Themen 5
MoxMorris Einige Methoden aus verschiedenen Klassen nacheinander auszuführen läuft seltsam Java Basics - Anfänger-Themen 2
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
I Verschiedenen WebApp kommunizieren lassen Java Basics - Anfänger-Themen 1
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
P Arrays mit verschiedenen Längen miteinander dividieren. Java Basics - Anfänger-Themen 1
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
A Methoden Array aus verschiedenen Methoden bearbeiten bzw. öffnen Java Basics - Anfänger-Themen 18
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
L Dynamische Anzahl an Arrays mit verschiedenen Namen erzeugen Java Basics - Anfänger-Themen 6
J Gleiche Methode in 2 verschiedenen Klassen - Lösung ? Java Basics - Anfänger-Themen 8
scratchy1 Argumente mit verschiedenen Schleifen ausgeben Java Basics - Anfänger-Themen 3
R OOP Instanzierung in verschiedenen Klassen Java Basics - Anfänger-Themen 8
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
K die Source eines Events bei verschiedenen Quellen herausfinden Java Basics - Anfänger-Themen 1
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
I Brauche Denkanstoß: Weitergabe von Kontaktinfos aus verschiedenen Kontaktformularen von Webseiten Java Basics - Anfänger-Themen 2
D Objekte mit verschiedenen Attributen erstellen Java Basics - Anfänger-Themen 3
B OOP Summe aus verschiedenen Instanzen einer Klasse berechnen Java Basics - Anfänger-Themen 2
A Eine Variable in verschiedenen Ereignisprozeduren benutzen Java Basics - Anfänger-Themen 7
N Verweise auf Variablen in verschiedenen Threads Java Basics - Anfänger-Themen 4
J JLabels in schleife erzeugen mit verschiedenen namen? Java Basics - Anfänger-Themen 5
H Java auf verschiedenen Plattformen Java Basics - Anfänger-Themen 3
I Ausgabe in verschiedenen Entwicklungsumgebungen anders Java Basics - Anfänger-Themen 6
L Threads Thread aus verschiedenen Klassen ansprechen Java Basics - Anfänger-Themen 11
J Probleme mit verschiedenen Private Klassen Java Basics - Anfänger-Themen 3
A Methode aus verschiedenen Klassen aufrufen Java Basics - Anfänger-Themen 8
T Dynamisches abarbeiten von statischen Methode aus verschiedenen Klassen. Java Basics - Anfänger-Themen 5
B Threads Geschwindigkeit der Befehle auf verschiedenen PCs gleich machen Java Basics - Anfänger-Themen 3
U Objekte in Array erstellen und Methode in verschiedenen klassen aufrufen Java Basics - Anfänger-Themen 5
M Anwendung in verschiedenen JREs Java Basics - Anfänger-Themen 42
C jar Datei auf verschiedenen Systemen ausführen Java Basics - Anfänger-Themen 7
SheldoN Töne abspielen auf verschiedenen Buttons Java Basics - Anfänger-Themen 17
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
G String mit verschiedenen Zeichen analysieren Java Basics - Anfänger-Themen 5
K Datentypen Gleiche Zufallszahlen in verschiedenen Datenstrukturen Java Basics - Anfänger-Themen 6
T ArrayList mit verschiedenen Datentypen verhindern Java Basics - Anfänger-Themen 8
R Array aus verschiedenen Datentypen Java Basics - Anfänger-Themen 29
A JButtons dynamisch generieren mit verschiedenen actionhandlern Java Basics - Anfänger-Themen 6
K Collections Wie kann Ich eine Hashmap mit verschiedenen Hashsets füllen. Java Basics - Anfänger-Themen 4
K OOP Variablen aus verschiedenen Klassen Java Basics - Anfänger-Themen 4
E Auf Variablen in verschiedenen Klassen zugreifen? Java Basics - Anfänger-Themen 4
J OOP Ausgabe verschiedener Variabeln aus verschiedenen Subclasses Java Basics - Anfänger-Themen 2
Z Geschwindigkeitsunterschied bei verschiedenen Schreibweisen Java Basics - Anfänger-Themen 4
F Gleiche JUnit-Tests automatisert mit verschiedenen Methoden ausführen Java Basics - Anfänger-Themen 6
4 OOP Problem beim Speichern verschiedener Klassen in verschiedenen Dateien Java Basics - Anfänger-Themen 25
Hamstinator Design und Listener in verschiedenen Klassen Java Basics - Anfänger-Themen 6
B Teil eines Bild kopieren bei verschiedenen Zoomstufen Java Basics - Anfänger-Themen 3
M Sets:Ein Set aus zwei verschiedenen bilden Java Basics - Anfänger-Themen 13
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
S Umsetzung von verschiedenen Anweisungen Java Basics - Anfänger-Themen 8
braindump Packages in verschiedenen Unterverzeichnissen Java Basics - Anfänger-Themen 3
A Frage zu verschiedenen Klassen Java Basics - Anfänger-Themen 11
C Auf ProgressBar von zwei verschiedenen .class Dateien zugrei Java Basics - Anfänger-Themen 2
A MainClass not Found auf verschiedenen Rechnern Java Basics - Anfänger-Themen 2
JohnMurdoch Methoden von verschiedenen Objekten in Liste aufrufen Java Basics - Anfänger-Themen 3
R Dateizugriff auf verschiedenen OS Java Basics - Anfänger-Themen 3
Q Labels auf verschiedenen Ebenen? Java Basics - Anfänger-Themen 5
G Jar-File erzuegen, das Code a verschiedenen Java Versionen? Java Basics - Anfänger-Themen 4
B JTextArea mit verschiedenen Fonts Java Basics - Anfänger-Themen 4
Bierhumpen Array gefüllt mit verschiedenen Werten Java Basics - Anfänger-Themen 7
C Programm mit verschiedenen wechselbaren Sprachen Java Basics - Anfänger-Themen 6
T arrays: Anzahl der verschiedenen Werte bestimmen Java Basics - Anfänger-Themen 7
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3
G Aus verschiedenen Formaten ein Date-Objekt machen Java Basics - Anfänger-Themen 3
G Text aus verschiedenen Dateien in JTextArea laden Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben