Swing JLabel - Grösse passt sich immer Text an

Status
Nicht offen für weitere Antworten.

hdi

Top Contributor
Hey,

ich bekomme es nicht hin meinem JLabel eine fixe Grösse zu geben. Auch wenn ich setSize() verwende, statt setPreferredSize(), wird das Label immer nur genau so breit wie der Text darin. Das setSize() setze ich nachdem ich den Text setze. Wie krieg ich es hin dass ich zB 5 Labels habe die alle 100px breit sind, egal wieviel Text darin steht?

Danke
 

Marco13

Top Contributor
Wenn man Preferred (und ggf. Min/Max) Size explizit setzt, sollte er sich nicht nach dem Text-Inhalt richten - sofern der Übergeordnete LayoutManager diese Vorgaben berücksichtigen kann... Hast du ein Beispiel?
 

0x7F800000

Top Contributor
Auch wenn ich setSize() verwende
bringt nichts, der layout manager macht's eh so wie es dem gefällt...
statt setPreferredSize()
interessiert die Layout manager meistens auch nicht^^ ;)

Wie krieg ich es hin dass ich zB 5 Labels habe die alle 100px breit sind, egal wieviel Text darin steht?
eben einen layout so konfigurieren, dass er die labels so anordnet. Kannst zB. separates JPanel nehmen und BoxLayout oder GridLayout drauf loslassen, wenn du mit anderen LayoutManagern auf kriegsfuß bist ;)
 

Meru

Bekanntes Mitglied
Beim GridBagLayout kannst du sagen, dass die Spalte 1 max 100 Pixel groß sein soll. Packst du da nen JLabel rein, was theoretisch mehr Platz braucht, so wird die Spalte automatisch vergrößert um den Platz der benötigt wird, also zum Beispiel auf 150 Pixel. Sagst du aber dem JLabel nun mit preferedSize max 100 Pixel, so wird automatisch "ABC..." geschrieben (wenn der Platz net reicht), so dass wirklich nur max 100 Pixel benutzt werden.
 

hdi

Top Contributor
Ich weiss nicht ob ihr mich richtig versteht. Ich ornde die Labels im Moment auf einem Panel mit BoxLayout / Y_AXIS an. Und gebe jedem Label

setSize(x)

Der Text für alle Labels ist definitiv kleiner. Das Problem ist, dass das Label einfach nur so gross ist, wie der Text. Was bitte soll ich da bei LayoutManagern einstellen?

statt setPreferredSize()
interessiert die Layout manager meistens auch nicht^^
Ach? Ich dachte genau das machen LayoutManager.

Also, ich hab n Rechteck mit Labels untereinander, und wenn ich über eine Zeile darin gehe soll der MouseLsitener vom Label anspringen. Und das tut er eben nicht, weil das Label immer genau auf den Text gekürzt wird, owbhl ich dem Label eine Breite gegeben habe, die genauso breit ist wie das Panel, also die Zeile. Das Label reagiert nur wenn ich auf dem Text bin.
Ich krieg's einfach nicht grösser als der Text ist...
 

hdi

Top Contributor
Hier ein Bsp. Ich möchte dass die Labels aufblinken wenn ich nur über die Zeile gehe. Aber sie tun es nur, wenn ich wirklich über den Text gehe. Eig. sollten die Labels ja so breit sein wie die ganze Zeile, aber sie reduzieren sich immer nur auf ihre Textlänge.

Java:
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;

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

public class JLabelSetSize extends JFrame {

	static final int LABEL_WIDTH = 200;
	static final int LABEL_HEIGHT = 20;
	static final Random random = new Random();

	public static void main(String[] args) {
		new JLabelSetSize().setVisible(true);
	}

	JLabelSetSize() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		JPanel container = new JPanel();
		container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));

		/* add 10 labels with a given size and listener */
		for (int i = 0; i < 10; i++) {
			JLabel l = new JLabel(randomText());
			l.setSize(LABEL_WIDTH, LABEL_HEIGHT);
			l.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseEntered(MouseEvent e) {
					super.mouseEntered(e);
					((JLabel) e.getSource()).setForeground(Color.orange);
				}

				@Override
				public void mouseExited(MouseEvent e) {
					super.mouseExited(e);
					((JLabel) e.getSource()).setForeground(Color.black);
				}
			});
			container.add(l);
		}

		container.setSize(LABEL_WIDTH,LABEL_HEIGHT*10);
		this.add(container);
		pack();
	}

	private String randomText() {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < random.nextInt(25); i++) {
			sb.append((char)(random.nextInt(32) + 97));
		}
		return sb.toString();
	}

}
 

L-ectron-X

Gesperrter Benutzer
Hab deinen Code mal geändert:
Java:
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;

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

public class JLabelSetSize extends JFrame {

    //static final int LABEL_WIDTH = 200;
    //static final int LABEL_HEIGHT = 20;
    static final Random random = new Random();

    public static void main(String[] args) {
        new JLabelSetSize().setVisible(true);
    }

    JLabelSetSize() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel container = new JPanel(new GridLayout(0, 1));
        //container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));

        /* add 10 labels with a given size and listener */
        for (int i = 0; i < 10; i++) {
            JLabel l = new JLabel(randomText());
            //l.setSize(LABEL_WIDTH, LABEL_HEIGHT);
            l.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseEntered(MouseEvent e) {
                    super.mouseEntered(e);
                    ((JLabel) e.getSource()).setForeground(Color.orange);
                }

                @Override
                public void mouseExited(MouseEvent e) {
                    super.mouseExited(e);
                    ((JLabel) e.getSource()).setForeground(Color.black);
                }
            });
            container.add(l);
        }

        //container.setSize(LABEL_WIDTH,LABEL_HEIGHT*10);
        this.add(container);
        pack();
    }

    private String randomText() {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < random.nextInt(25); i++) {
            sb.append((char)(random.nextInt(32) + 97));
        }
        return sb.toString();
    }

}
 

hdi

Top Contributor
Ah Danke! Ich frag mich aber woher jetzt die Breite kommt? Scheint ja nicht von den Labels abzuhängen. In der API zum Konstruktor steht nur alle Elemente bekommen die gleiche Grösse. Welcher Wert ist das denn, bzw. wie kann ich das jetzt ändern?
 

L-ectron-X

Gesperrter Benutzer
Das GridLayout richtet sich nach der PreferredSize der hinzugefügten Komponenten.
Das heißt, du kannst die Größe mit
Java:
l.setPreferredSize(new Dimension(width, height));
beeinflussen.

Alle Komponenten erhalten aber die gleiche Größe. Und zwar genau die, die die größte Komponente einnimmt.
 

hdi

Top Contributor
Das GridLayout richtet sich nach der PreferredSize der hinzugefügten Komponenten.
Genau das wundert mich ja grad: Egal wie oft ich das Programm starte (Die Labels bekommen ja zufällig lange Strings), das Fenster ist immer gleich breit. Ich hatte grad nur Labels mit 2 Buchstaben, trotzdem war es so gross wie wenn es Labels mit 15 Buchstaben gibt.

Wenn es stimmt was du sagst, dann heisst das ja dass JLabels default-mässig eine preferredSize haben, die sich aber auch nicht nach der Grösse des Strings vom Label orientiert. Aber das stimmt ja wohl nicht ?!
 

hdi

Top Contributor
setPreferredNotSize()?

Nein also.. wie ich ja selber schon glaubte, sind die preferredSizes der Labels natürlich dem Inhalt entsprechend gesetzt. Aber da du sagtest, GridLayout orientiert sich an der preferredSize der Komponenten, also hier die Labels, kann es ja nicht sein dass mein Fenster IMMER 124 px Breit ist. Total egal wie gross die Labels sind. Das meinte ich, ich wunder mich woher diese 124 kommt. Von den Labels hängt es ja eindeutig nicht ab.
 

L-ectron-X

Gesperrter Benutzer
Setze mal eine neue Größe, dann ändert sich auch die Fenstergröße, ggf. auch der Abstand der Texte zueinander aufgrund der veränderten Höhe.

Mit Gegenstück meinte ich getPreferredSize(), mit der du die PreferredSize der Komponenten erfragen kannst.
 

hdi

Top Contributor
Mit Gegenstück meinte ich getPreferredSize()
Schon klar ;) Genau das hab ich ja grad getestet.

Ich glaube wir reden etwas aneinander vorbei. Meine Frage war: Woher kommen die 124px? Von den JLabels zumindest nicht. Obwohl du ja genau das gesagt hast. Als default-Wert wäre das aber auch etwas seltsam. Ich meine, 124? Wieso?
 

hdi

Top Contributor
Okay die varriert auch. Nur die vom JFrame nicht. Allerdings mach ich ein pack() aufs Frame, nachdem ich das Panel adde. Müsste sich das also nicht gemäss der preferredSize des Panels anpassen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5
V JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben