Text im JFrame anzeigen und verschieben Java?
hallo, wollte ein Text in Java erzeugen und das im JFrame. Doch irgendwie bleibt der immer an koordinate 0 / y stehen. y ist hier variabel, je nach größe des bildschirms, befindet sich aber immer in der mitte.
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class main{
static int zahl = 0;
public main() {
JFrame frame = new JFrame("Fenster Text");
JLabel label = new JLabel("was eine scheiße");
label.setBounds(0, 0, 100, 50);
frame.add(label);
frame.setSize(400, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
frame.setLocationRelativeTo(null);
frame.requestFocus();
frame.setVisible(true);
}
public static void main(String[] args) {
new main();
}
}
kann mir jemand helfen, dass ich den text auf 0 / 0 bekomme?

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.

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);

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);

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.

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.

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));

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.
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.