Labelproblem

Status
Nicht offen für weitere Antworten.
E

Erbse

Gast
Hallo!
Ich habe ein kleines Labelproblem. Über ein JSlider Objekt soll sich ein Text ständig verändern. In der Action-Methode funktioniert das auch, aber übersteigt der Text seine Labellänge, die er am Anfang hatte, kommen 3 Zeichen des Textes und danach 3 Punkte("..."). Ich dachte es liegt an der Fenstergröße, aber es ist genug Platz und erst wenn ich das Fenster kleiner oder größer mache, erscheint der Text richtig. Ich habe selbst die repaint()-Methode benutzt, aber es hilft nichts? Woran liegt das und wie kann ich diesen Fehler beheben?
Ich danke für jede Idee!
 

Wildcard

Top Contributor
Du benutzt vermutlich das gefürchtete null-Layout?
Entweder einen Layoutmanager verwenden, oder von Hand korrigieren.
Wenn es das nicht ist, zeig mal ein paar interessante Code-Stellen
 
R

Roar

Gast
:? wenn das label zu kurz für den text ist, dann kann halt nicht der ganze text dargestellt werden. gibt deinem label mehr platz. zum überprüfen wie groß das label ist kansnt du ihm auch einen roten rahmen mit setBorder() zuweisen, dann siehst du wo die grenzen liegen.
 
G

Guest

Gast
Achso! Also ich kann euch jetzt ein paar mehr Informationen geben:
Je nach dem, wie das Label am Anfang(Also mit dem Start des Fensters, oder mit dem Verändern der Fenstergröße), danach richtet sich dann, wieviel das anzeigt. Also wenn ich den langen String gleich zuerst zeichne, dann kommen keine Punkte und er wird auch voll gezeichnet. Wie kann ich meinem Label denn eine Länge zuweisen?

Also genaugenommen benutze ich ein GridBagLayout(in dem Panel, in dem das Label ist und in dem Panel, indem der Panel reinkommt). Oder ist das das 0-Layout?
 

Wildcard

Top Contributor
Also genaugenommen benutze ich ein GridBagLayout(in dem Panel, in dem das Label ist und in dem Panel, indem der Panel reinkommt). Oder ist das das 0-Layout?
Das null Layout ist setLayout(null);
Was passiert wenn du nach dem ändern des Textes das hier machst?
Code:
label.setPreferredSize(label.getPreferredSize());
 
G

Guest

Gast
Danke für den Befehl.
Es funktioniert sogar ein bischen, d.h. es sind jetzt mehr Buchstaben zu sehen, doch merkwürdigerweise fehlen die letzten 3 Buchstaben und sind durch Punkte ersetzt("..."). Bei dem Layout habe ich stehen:
GridBagLayout mainGrid = new GridBagLayout();
...
setLayout(maingrid);
 

Wildcard

Top Contributor
Schon revalidate() versucht?
Gehts so?
Code:
label.setPreferredSize(new Dimension(label.getPreferredSize().width+10,label.getPreferredSize().height));
(nur zum Test 8) )
 
G

Guest

Gast
Also revalidate() scheint nicht zu funktionieren.
Die 2. Codezeile ist ne gute Idee, funktioniert aber leider auch nicht. Ich bin schon am verzweifeln. Ich hab das Fenster jetzt richtig groß gemacht, also daran kann es nicht liegen...
 
G

Guest

Gast
Nun, ich habe nochmal überlegt und ich denke, das ich irgendeine Methode brauche, die Java beim Verändern der Größe des Fensters verwendet. Aber wie bekomme ich das raus, welche Methoden verwendet werden?
Also wenn ich das gesammte Fenster mit einer repaint()-Methode erneuere bleibt es trotzdem. Aber sobald ich das Fenster in irgendeiner Form von der Größe her, manuell verändere, ändert sich das Label ordentlich um.

Hier mal ein Stück meines Codes:

Code:
filespace.setPreferredSize(filespace.getPreferredSize());
// ....
 	    slider.addChangeListener(new ChangeListener() { 
  	  	public void stateChanged(ChangeEvent e) {
  	  		switch(slider.getValue()) {
  	  		case 1: labelTable.put(new Integer(5), bmpbit1); quality.setText("Qualität: 8"); carrierspace = ((CBMP.carriersize - 58)/3)/8; break;
  	  		case 2: labelTable.put(new Integer(5), bmpbit2); quality.setText("Qualität: 7"); carrierspace = ((CBMP.carriersize - 58))/8; break;
  	  		case 3: labelTable.put(new Integer(5), bmpbit3); quality.setText("Qualität: 6"); carrierspace = ((CBMP.carriersize - 58)*2)/8; break;
  	  		case 4: labelTable.put(new Integer(5), bmpbit4); quality.setText("Qualität: 5"); carrierspace = ((CBMP.carriersize - 58)*3)/8; break;
  	  		case 5: labelTable.put(new Integer(5), bmpbit5); quality.setText("Qualität: 4"); carrierspace = ((CBMP.carriersize - 58)*4)/8; break;
  	  		case 6: labelTable.put(new Integer(5), bmpbit6); quality.setText("Qualität: 3"); carrierspace = ((CBMP.carriersize - 58)*5)/8; break;
  	  		case 7: labelTable.put(new Integer(5), bmpbit7); quality.setText("Qualität: 2"); carrierspace = ((CBMP.carriersize - 58)*6)/8; break;
  	  		case 8: labelTable.put(new Integer(5), bmpbit8); quality.setText("Qualität: 1"); carrierspace = ((CBMP.carriersize - 58)*7)/8; break;
  	  		case 9: labelTable.put(new Integer(5), bmpbit9); quality.setText("Qualität: 0"); carrierspace = ((CBMP.carriersize - 58)); break;
  	  		}
  	    	if(carrierspace > 9999) {
  	    		if(carrierspace > 9999*1024) {
  	    			carrierspace /= (1024*1024);
  	    			filespace.setText("Trägerspeicher " + carrierspace + " MB");
  	    		}
  	    		else {
  	  	    		carrierspace /= 1024;
  	  	    		filespace.setText("Trägerspeicher " + carrierspace + " KB");	
  	    		}
  	    	} else {
  	    		filespace.setText("Trägerspeicher " + carrierspace + " Byte");
  	    	}
  	    	filespace.setPreferredSize(new Dimension(filespace.getPreferredSize().width,filespace.getPreferredSize().height));
  	    	filespace.repaint();
  	    	slider.setLabelTable(labelTable);
  	    	slider.repaint();
  	       }
  	    });

(Das Label, um das es geht ist filespace)
Sobald nämlich der Wert auf "Trägerspeicher xxxx Byte" umgewandelt wird, erscheint nur: "Trägerspeicher xxxx B...".
Dies geschieht jedoch nur, wenn eben Das Label als allererstes nicht auf "Trägerspeicher xxxx Byte" steht(das wird durch eine Klassenvariable einer anderen Klasse in diesem Konstruktor geregelt)
 

Wildcard

Top Contributor
Code:
filespace.setPreferredSize(new Dimension(filespace.getPreferredSize().width,filespace.getPreferredSize().height));
Das ist nicht die Zeile die ich meinte! Hast du das mal versucht?
Code:
filespace.setPreferredSize(new Dimension(filespace.getPreferredSize().width+20,filespace.getPreferredSize().height));
Nun, ich habe nochmal überlegt und ich denke, das ich irgendeine Methode brauche, die Java beim Verändern der Größe des Fensters verwendet. Aber wie bekomme ich das raus, welche Methoden verwendet werden?
Was passiert den wenn du im Prog setSize() aufrufst?
 
G

Guest

Gast
Ja, sogar mit +30 wollte das nicht funktionieren. Ich habe es dann wieder weg gemacht, da es das Design beeinflusst hat.(habe zum Test dies nicht berücksichtigt um alle Fehler auszuschließen).
Die getSize() - Methode bewirkt leider auch nichts. Aber irgendeine andere Methode muss es doch geben(außer repaint()), oder?

(Ansonsten muss ich anstatt Trägerspeicher in Trägerplatz umbenennen, dann funktioniert es...)
 
G

Guest

Gast
Einverstanden! Vielen Dank!
Das Programm ist jedoch recht groß und benötigt ein paar Klassen und kleine Bilder zur Darstellung. Möchtest du lieber, dass ich es online stelle und dir den Link schicke oder soll ich es dir so schicken?(schätze es sind ca. über 1 MB).
 

Wildcard

Top Contributor
Kannst es mir ruhig schicken.
edit: da ist übrigens ein '_' in der Adresse den man nicht sieht :wink:
 
G

Guest

Gast
Gut, ich habe dir den gezippten Ordner mit einer kleinen Doku(in der Mail) geschickt!
 
G

Guest

Gast
Bist du dir sicher, dass diese Adresse stimmt: "Joes_PostNOSPAM@web.de"
Ich habe die Mail zurückbekommen...
 

Wildcard

Top Contributor
*lol* das NOSPAM musst du natürlich rausnehmen! Will nur nicht von irgendwelchen SpammerRobots erwischt werden :D
 
G

Guest

Gast
Achso *ggg*
Ich hab mir jetzt extra ICQ zugelegt, damit ich es dir anders schicken kann, aber jetzt ist ja alles gut. Ich schicke es dir nochmal!
 
Status
Nicht offen für weitere Antworten.

Oben