Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > JLabel- & Fenstergröße automatisch anpassen
Antwort
 
Themen-Optionen
Alt 20.02.2005, 13:52   Nach oben    #1
Benutzer
 
Benutzerbild von bacarni
 
Registriert seit: 05.01.2005
Beiträge: 81
Standard JLabel- & Fenstergröße automatisch anpassen

Hallo

Ich habe folgendes Problem. Ich habe Jlabels in Pyramidenform angeordnet. Also ungefähr so:
Code:
                              +------------+
                              |                  |
                              +------------+
                   +------------+ +------------+
                   |                  |  |                  |
                   +------------+ +------------+
+------------+ +------------+  +--------------+
|                  |  |                  |   |                     |
+------------+ +------------+  +--------------+
In den Labels werden Namen dargestellt, die aus einer Datenbank kommen. Je nach Länge des Namens soll das Jlabel angepast werden in der Göße und damit dann letzten Endes auch die Fenstergröße.

Meine erste Überlegung war jetzt einfach, die Buchstaben aus dem Array für den jeweiligen Namen zu zählen und dann die Größe in etwa anzugeben. Nun ist die Frage, ob das zu aufwendig ist, oder ob es eine einfachere Möglichkeit gibt.
__________________
Ein Vorurteil ist schwerer zu spalten als ein Atom -- Albert Einstein
bacarni ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 14:03   Nach oben    #2
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Ich würde das einfach aus der Länge des Strings auslesen - oder was meinst Du mit Array?
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 14:27   Nach oben    #3
Fuzzy
Gast
 
Beiträge: n/a
Standard

Hi,

ich bin kein Experte in Sachen Oberfläche und habe die Info unten nur aus den Dokus zusammengestellt und nicht getestet. Korrigiert mich bitte unbedingt, wenn ich falsch liege...

Was Du vermutlich suchst, ist die Klasse TextLayout, mit der der Text bearbeitet wird.

Da der Text natürlich aus unterschiedlich breiten Buchstaben besteht, deren Breite natürlich auch noch vom Font abhängt, muß Du zunächst den Font bestimmen: getFont().

Ds Ergebnis ist ein Object vom Typ Font, das Du direkt nach den etwaigen Ausmaßen fragen kannst: getStringBounds() z.B.

Um noch genauer zu werden, brauchst Du ein "TextLayout" Objekt, das Dir mit der Methode getBounds() ein Rechtecke zurückgibt, welches Du mit getWidth() und getHeight() abfragen kannst.
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 14:53   Nach oben    #4
Benutzer
 
Benutzerbild von bacarni
 
Registriert seit: 05.01.2005
Beiträge: 81
Standard

Zitat:
Zitat von Sym
Ich würde das einfach aus der Länge des Strings auslesen - oder was meinst Du mit Array?
Stimmt. So hatte ich's gedacht, aber...
Zitat:
Zitat von Fuzzy
.. ein "TextLayout" Objekt, das Dir mit der Methode getBounds() ein Rechtecke zurückgibt, welches Du mit getWidth() und getHeight() abfragen kannst.
Hört sich noch besser an

Werd das mal testen. Aber erstmal eine runde trommeln mit donkeyKonga
__________________
Ein Vorurteil ist schwerer zu spalten als ein Atom -- Albert Einstein
bacarni ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.02.2005, 15:41   Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von peschmae
 
Registriert seit: 29.05.2004
Beiträge: 228
Standard

Was spricht gegen LayoutManager/Boxen? Also eine Vertikale Box mit drei Horizontalen Boxen drin und die JLabels darin jeweils entsprechend ausgerichtet.

Oder musst da zwischen den Boxen irgendwas an Grössenverhältnissen eingehalten werden? Dann eventuell mit Glue (oder wie die Dinger auch schon wieder hiessen) auffüllen.

MfG Peschmä
__________________
Amazon.de | The Java Trap | Freie Software | Freie Software vs. Open Source | GNU Classpath | GCJ | SableVM
"We should forget about small efficiencies, say about 97% of the time: Premature optimization is the root of all evil." - Donald Knuth
peschmae ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2005, 10:31   Nach oben    #6
Sym
Chefkoch-Mod
 
Benutzerbild von Sym
 
Registriert seit: 30.05.2004
Beiträge: 433
Standard

Zitat:
Zitat von bacarni
Hört sich noch besser an

Werd das mal testen. Aber erstmal eine runde trommeln mit donkeyKonga
Jau, aber das musst Du Dir erst einmal bauen. Und da würde ich die Länge des String einfließen lassen. Wenn Du eine Lösung hast, kannst Du sie hier ja mal posten.
__________________
Denk mal darüber nach...

Lars

ACHTUNG: wenn ich von Klassen spreche, könnte ich auch deren Instanzen meinen.
www.linuxforen.de +++ www.macuser.de +++ www.mrunix.de +++ www.lmprojects.de
Sym ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.02.2005, 13:28   Nach oben    #7
Fuzzy
Gast
 
Beiträge: n/a
Standard

@bacarni: Wenn Du mir ein kleines compilierbares und lauffähiges Demoprogramm postet mit einer Dummyfunktion "computeLabelWidth" oder so ähnlich (die meinetwegen konstant 200 zurückgibt), schreibe ich Dir gerne die Breitenberechnung...

Bei mir läuft allerdings kein MySQL, daher würde ich mich freuen, wenn das Demoprogramm auch ohne MySQL lauffähig wäre

Grüße

Fuzzy
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 14:17   Nach oben    #8
Benutzer
 
Benutzerbild von bacarni
 
Registriert seit: 05.01.2005
Beiträge: 81
Standard

@Fuzzy: Danke. Probier aber erstmal selbst

Also, ich hab mal ein bisschen rumprobiert und bin zu folgendem gekommen:
PHP-Code:
            Graphics g getGraphics();
            
Graphics2D g2 = (Graphics2Dg;

            
Font font Font.getFont("Dialog");
            
FontRenderContext fontrc g2.getFontRenderContext();
            
TextLayout layout = new TextLayout("TestString",fontfontrc );
            
Rectangle2D dd layout.getBounds();
            
double h dd.getHeight();
            
double w dd.getWidth();
            
System.out.println(+"x"w); 
Das Prob ist nur, dass er mir ein java.lang.NullPointerException rausschmeist. Das ist aber klar, weil nach API
Zitat:
protected Graphics2D()

Constructs a new Graphics2D object. Since Graphics2D is an abstract class, and since it must be customized by subclasses for different output devices, Graphics2D objects cannot be created directly. Instead, Graphics2D objects must be obtained from another Graphics2D object, created by a Component, or obtained from images such as BufferedImage objects.
Hab ich also getGraphics() genommen. Nur das ist null, wenn man keine Werte mitgibt.

Ich hab grad auch noch was gelesen, dass man den paintComponent übersschreiben soll. Vielleicht liegt es ja auch daran.

Stehe im moment ein bisschen auf'm Schlauch Eigentlich müßte der Ansatz ja richtig sein. Nur das grafikObjekt will net so richtig, so wie ich das seh.
__________________
Ein Vorurteil ist schwerer zu spalten als ein Atom -- Albert Einstein
bacarni ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 15:07   Nach oben    #9
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.091
Standard

Zitat:
Ich hab grad auch noch was gelesen, dass man den paintComponent übersschreiben soll. Vielleicht liegt es ja auch daran.
Da hast du die Lösung (wobei ich persönlich auch zu einem entsprechenden LayoutManager raten würde).
Hilfreich könnte das Java-Tutorial seien: http://java.sun.com/docs/books/tutor...ing/index.html
__________________
Patrick Gotthardts Weblog.
pago ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 25.02.2005, 15:45   Nach oben    #10
Benutzer
 
Benutzerbild von bacarni
 
Registriert seit: 05.01.2005
Beiträge: 81
Standard

Danke für den Link. Ja es war die Lösung. Ich werd mich aber ein bisschen tiefer in den Thematik des Layouts einlesen. Vielleicht ist es doch die bessere Methode. Mal sehen...
__________________
Ein Vorurteil ist schwerer zu spalten als ein Atom -- Albert Einstein
bacarni ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Grösse des JFrames and JPanel anpassen alekz Desktop-Applikationen und Grafik 1 15.05.2006 14:52
Icon an Größe von JButton automatisch anpassen. Lautsprecher Desktop-Applikationen und Grafik 2 20.10.2005 15:19
hinzufügen von JLabel Java17 Desktop-Applikationen und Grafik 1 21.03.2005 13:30
ergenis von sqlquery an jlabel übergeben bacarni Datenbanken 3 19.01.2005 10:24
[Klasse] LAF automatisch der Plattform anpassen comrad Desktop-Applikationen und Grafik 7 13.09.2004 14:35


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:25 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44