Text im JFrame anzeigen und verschieben Java?

2 Antworten

Verwende das FlowLayout:

// create frame ...
frame.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));

// create label ...

Entferne zudem die Zeile mit dem setBounds-Aufruf, andernfalls wird sich der Labeltext in seinem zu großen Container zentrieren.


LearnNerd 
Fragesteller
 18.03.2022, 19:43

super, das hat geklappt. gibt es noch eine möglichkeit, wie ich es machen kann dass der text verschoben wird und über anderen bildern drüber ist? habe es in einem anderen programm ebenfalls getestet und dort wurden die buttons einfach nacheinander abgerufen und am ende war dann der text. Also haben sich dann alle Objekte dem untergeordnet.

0
regex9  18.03.2022, 19:48
@LearnNerd

Du kannst dem Label selbst ein (Hintergrund-)Bild zuweisen und (was ich oben nicht erwähnt hatte), die Textausrichtung im Label anpassen.

ImageIcon image = new ImageIcon("path/to/image.png");
JLabel label = new JLabel("Text", image);
label.setHorizontalTextPosition(JLabel.LEFT);
label.setVerticalTextPosition(JLabel.TOP);
0
LearnNerd 
Fragesteller
 18.03.2022, 19:58
@regex9

ich muss sagen dass setVerticalTextPosition sich mega logisch anhört, aber irgendwie passiert da bei mir nichts :/

obwohl ich 1 zu 1 das kopiert habe

0
regex9  18.03.2022, 20:46
@LearnNerd

Du hast Recht, da fehlt noch etwas. Du kannst den Abstand zwischen Text und Bild auf einen negativen Wert setzen, und damit das Übereinanderzeichnen erzwingen.

label.setIconTextGap(-30);
0
regex9  18.03.2022, 20:50
@regex9

Um es ganz genau zu haben, müsste man sich die Breite des Labeltextes einmal berechnen lassen. In etwa so:

String text = "Hello World";

AffineTransform affinetransform = new AffineTransform();
FontRenderContext fontRenderContext = new FontRenderContext(affinetransform, true, true);
Font font = new Font("Tahoma", Font.PLAIN, 12);
int textWidth = (int)(font.getStringBounds(text, fontRenderContext).getWidth());

JLabel label = new JLabel(text, image, JLabel.LEFT);
label.setIconTextGap(-textWidth);
label.setFont(font);

Der Konstruktoraufruf für das JLabel in meinem obigen Kommentar war auch nicht richtig. Ein drittes Argument fehlte.

0
regex9  18.03.2022, 20:54
@regex9

Noch eine andere Option wäre es, eine Subklasse von JLabel zu kreieren, die paintComponent-Methode zu überschreiben und dort den Text über das Bild zu zeichnen.

0

Mein Tipp: Adde erstmal ein Panel und setze ein Layout. Dann kannst du dem Panel dein Label hinzufügen. Selbst ohne Layout wäre das standardmäßig in der Mitte des Panels.

Woher ich das weiß:eigene Erfahrung – Ich habe selber lange im PC gearbeitet

LearnNerd 
Fragesteller
 18.03.2022, 19:37

okay jetzt noch eine dumme frage, wie setze ich das Layout?

habe das auch am anfang gemacht, da es in einem Youtube video war, doch irgendwie wusste ich nicht wie ich das bedienen soll. Die zeile war ungefähr so:

panel.setLayout(new GridLayout(0,1));
0
regex9  18.03.2022, 19:37

Elemente werden auf dem Frame zentriert, da stets ein BorderLayout auf diesem gesetzt ist. Dieses sorgt dafür, dass hinzugefügte Elemente ohne Positionsangabe zentriert werden.

0