jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage

Vilkazzz

Mitglied
Hallo mal wieder.

Um mein vorheriges wissen mit arrays und JLabel sowie LPanels zu verbinden,
wollte ich ein Bildschirm voll mit Jpannels machen, die wiederrum alle in den "mainpannel" hinzugefügt wurden.

dazu hab ich 2 for Schleifen erzeugt, udn jeweils ein array panel mit
schleifenbedingten x,y, und color werten, damit die nebeneinander und doch klar erkennbar sind.

Java:
jp[i][y].setBounds(i * 75, y * 75, 75, 75);
jp[i][y].setBackground(new Color(i * 10, y * 10, (i + y) * 3));

Das ergebniss ist das totale Chaos 😀

Das Program zeigt mir nur ein teil der Pannels, und zwar in abhängigkeit davon, wieviele Schleifen ich mache 😀

so sieht es zb aus wenn ich die Maus nicht bewege

https://www.dropbox.com/s/6zb81iy828uisbi/Screenshot 2014-07-24 20.27.34.png
(ist wohl zu groß um als Grafik eingefügt zu sein.

man sieht, dass die tooltip beschreibung mitten im Felde sichtbar ist, sonst klickt einfach auf weitere screenshots.

sobald ich die maus anfange zu bewegen, wird überall wo die Maus grade ist, plötzlich auch der Panel dazu gezeichnet 😀
https://www.dropbox.com/s/ub8640djyqsv8wk/Screenshot 2014-07-24 20.27.38.png
https://www.dropbox.com/s/rqraq1wex4beul0/Screenshot 2014-07-24 20.27.41.png

un dam ende sieht man letzendlich, es wurde das gemacht was ich wollte,
aber grafisch wurde es nicht gezeichnet 🙂
https://www.dropbox.com/s/fnefsrfgmugttbx/Screenshot 2014-07-24 20.27.47.png

liegt es an meinem PC ? läuft es bei euch ?

voller code

Java:
import java.awt.Color;
import java.awt.Frame;

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

public class Lvl2b {

	public static void main(String[] args) {

		JFrame f = new JFrame();
		JPanel mainp = new JPanel();
		f.setExtendedState(Frame.MAXIMIZED_BOTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
		// mainp.setBounds(0, 0, 1200, 800);
		f.add(mainp);

		JPanel[][] jp = new JPanel[21][21];
		JLabel[][] jl = new JLabel[21][21];

		for (int y = 1; y <= 11; y++) {   // mit veränderten werten von y,i sowie panel Größen 
			for (int i = 1; i <= 20; i++) {  // wird die Anzahl der Korekt dargestellten panels 
				jp[i][y] = new JPanel();  // neu bestimmt.
				jl[i][y] = new JLabel();

				jp[i][y].setBounds(i * 75, y * 75, 75, 75);
				jp[i][y].setBackground(new Color(i * 10, y * 10, (i + y) * 3));
				jp[i][y].setToolTipText("i=" + i + "y=" + y);

				jl[i][y].setText("i=" + i + "y=" + y);
				jl[i][y].setForeground(Color.YELLOW);//farbe gelb, d adie panels sehr dunkel sind.

				jp[i][y].add(jl[i][y]);
				jp[i][y].setVisible(true);
				jl[i][y].setVisible(true);
				mainp.add(jp[i][y]);
				//System.out.println(i + " " + y);

			}
		}

	}

}

nun, dieses Program sollte für mich nur als Übung dienen, hat kein praktischen Zweck,
nichts desto trotz verstehe ich nicht, wieso zb nicht in jedem Jlabel die Text Ausgabe funktioniert
und wieso nicht alle Pannels angezeigt werden ?

habe ich zu viele in ein Hauptpanel reingesteckt ?
 
Du solltest nicht jedes Panel und Label visible setzen.

Füge erstmal alle Labels und Panels hinzu und dann rufe einmal ein mainp.pack() und ein mainp.setVisible() auf

Gruss

Claus
 
Hi setz das Frame erst nachdem du beide for-Schleifen komplett durchlaufen hast auf Visible, dann brauch er das nicht sichtbar haben und dann berechnen sondern erst berechnen und dann sichtbar machen.
Desweiteren adde lieber jedes Panel dem Frame und füge am ende bevor du es visible machst dem Frame noch ein weiteres Panel hinzu, da er sonst das letzte, aus einem mir unbekanntem auch immer schon nervigen Grund auf Bounds(0,0,'fullsize','fullsize') setzt -.-...

Also einfach nach den beiden for-Schleifen diese beiden Zeilen einfügen:

Java:
f.add(new JPanel());
f.setVisible(true);

so sollte es funktionieren, und natürlich im oberen Teil des Codes diese Zeile
f.setVisible(true); löschen

und innerhalb der Schleifen nicht dem JPanel, sondern dem Frame adden...

geht mit Sicherheit auch wenn du alles einem "main Panel" addest aber ich bin im Moment zu müde um lange zu überlegen wo dabei dein Fehler liegt.
 
Zuletzt bearbeitet:
spontan würde ich es auch erstmal auf die falsche reihenfolge schieben

korrekt wäre es wenn überhaupt dann so

Java:
import java.awt.Color;
import java.awt.Frame;

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

public class Lvl2b {

	public static void main(String[] args) {

		JFrame f = new JFrame();
		JPanel mainp = new JPanel();
		f.setExtendedState(Frame.MAXIMIZED_BOTH);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// mainp.setBounds(0, 0, 1200, 800);
		

		JPanel[][] jp = new JPanel[21][21];
		JLabel[][] jl = new JLabel[21][21];

		for (int y = 1; y <= 11; y++) {   // mit veränderten werten von y,i sowie panel Größen 
			for (int i = 1; i <= 20; i++) {  // wird die Anzahl der Korekt dargestellten panels 
				jp[i][y] = new JPanel();  // neu bestimmt.
				jl[i][y] = new JLabel();

				jp[i][y].setBounds(i * 75, y * 75, 75, 75);
				jp[i][y].setBackground(new Color(i * 10, y * 10, (i + y) * 3));
				jp[i][y].setToolTipText("i=" + i + "y=" + y);

				jl[i][y].setText("i=" + i + "y=" + y);
				jl[i][y].setForeground(Color.YELLOW);//farbe gelb, d adie panels sehr dunkel sind.

				jp[i][y].add(jl[i][y]);
				mainp.add(jp[i][y]);
				//System.out.println(i + " " + y);

			}
		}
		f.add(mainp);
		f.setVisible(true);

	}

}

das setVisible() innerhalb vom for-loop hab ich auch erstmal rausgenommen da komplett überflüssig
was auch noch sein könnte ist der fakt das du für jedes JLabel ein extra JPanel erstellst ... könnte das system überlasten (und ja ich habs an den screens gesehen warum du es so machst)

auch ist die masse von insgesamt 884 objekten ziemlich heftig ... ich bin sicher das man es optimieren könnte


außerdem : du sagst du nutzt ne ide ? also erstmal CLEAN ausprobieren ... dann mal n sauberes build ... und dann mal außerhalb von eclipse testen
 
ha, jetzt klappts 😀

Also, nachdem ich dieses "setvisable" ans ende gesetzt hatte,
war schon besser,

immerhin wurde genug objekte erzeugt, und die setText hat auch funktioniert.

nur die setBounds wurde komplett ignoriert...

https://www.dropbox.com/s/030alv9kdtukd43/Screenshot 2014-07-25 09.47.01.png

ABER !

wo ich den Tip verfolgte und jedes Array Jpanel ellement direkt der Hauptframe hinzugefügt habe und NICHT dem Hauptpanel !

also anstadt

Java:
mainp.add(jp[i][y]);  einfach   f.add(jp[i][y]);

und schon macht es, was es machen sollte 🙂

https://www.dropbox.com/s/dlwiyezr62xpv1q/Screenshot 2014-07-25 09.45.10.png

vielen dank euch allen, und falls wir uns nichtmehr sehen, dann ist mein PC abgestürzt, weil ich jetzt die arrays immer weiter Erhöhe damit ich den guten alten "system Overflow error" von C64 Zeiten wiedersehen möchte 😀


EDIT :
also 256 x256 und feldgröße auf 1 pixel reduziert ergiebt was schönes 🙂

AmBzWr4.png
 
Zuletzt bearbeitet:

Zurück
Oben