JLabel text zentrieren?
Hallo,
Ich habe mein Problem in dieser Frage(https://www.gutefrage.net/frage/jbutton-hintergrundfarbe-aendern-setbackgroundcolorred-funktioniert-nicht) so gelöst,dass ein Jbutton mit einem Hintergrundbild erzeugt wird. Diesem Jbutton wird dann ein JLabel mit text hinzugefügt. Wie schaffe ich es, dass die Schrift egal wie lang sie ist in der Mitte vom jbutton ist sowas wie setLocationRelativeTo(null)
Ich weiß, das es in der Frage darum ging das kein Image Icon hinzugefügt werden darf und viele tolle Antworten kamen die mir auch genützt haben aber hier hätte ich es gerne mit Imageicon
Code: https://hastebin.com/nenepotozo.java
Danke
2 Antworten
Das, was du da versuchst, kann nicht funktionieren, weil du explizit sagst, dass du auf ein Layout verzichtest. Meine Antwort unterscheidet sich daher nicht sonderlich von denen zu deinen vorherigen Fragen. Vergiss setBounds und nutze Layout Manger.
Hier ein Beispiel für einen Button mit Bild, Rahmen und Text. Text und Button sind jeweils im Fenster zentriert.
import java.awt.*;
import javax.swing.*;
import javax.swing.border.LineBorder;
public class Example extends JFrame {
public Example() {
super("Example");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridBagLayout());
JButton imageButton = new JButton("Hello!", new ImageIcon("flowers.jpg"));
imageButton.setForeground(Color.WHITE);
imageButton.setFont(new Font("Comic Sans MS", Font.BOLD, 12));
imageButton.setHorizontalTextPosition(JButton.CENTER);
imageButton.setVerticalTextPosition(JButton.CENTER);
imageButton.setBorder(new LineBorder(Color.YELLOW, 3));
add(imageButton, new GridBagConstraints());
setSize(300, 300);
setVisible(true);
}
}
// Main:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Example());
}
Für Interessierte verlinke ich nochmal auf meine ältere Antwort, da bei deinem Code all die Punkte zutreffen, die ich schon einmal erwähnt habe. Des Weiteren solltest du Umlaute/Sonderzeichen in Bezeichnernamen vermeiden, da dies Encoding-Probleme verursachen kann.
Übrigens liefert dein Code auch die Information mit, die bei deiner letzten Frage noch offen war: Du verwendest ein eigenes Look & Feel. Daher hast du auch Probleme, den Button normal rot zu färben.
Um also zu verhindern, dass das L&F auf den Button wirkt, wären diese Schritte durchzuführen:
// prevent l&f painting
imageButton.setContentAreaFilled(false);
// set opaque, because it will be set to false in step before
imageButton.setOpaque(true);
// set background color
imageButton.setBackground(Color.RED);
Eine andere Lösung hast du ansonsten schon selbst benannt: Eine eigene Button-Klasse.
ok ich werde die ganzen klassen umschreiben zu diesem code könntest du mir das was in der main ist erleutern
In der main-Methode veranlasse ich, dass der JFrame auf dem Dispatch Event Thread ausgeführt wird. Lies dazu hier und hier.
Dies:
() -> new Example()
ist des Weiteren ein Lambda-Ausdruck. Man könnte es auch so schreiben:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Example();
}
});
doch seit Java 8 kann man diesen Boilerplate-Code auch weglassen, da das Interface nur eine einzige Methode fordert. Es ist also klar, welche Methode der Lambda definiert.
Ps: knopf1_text.setHorizontalAlignment(JLabel.CENTER);
bei dem verschwindet der Text ganz
selbst so funktioniert es nicht
public static void LabelZentriert() {
JFrame frame = new JFrame();
JButton button = new JButton();
frame.setLayout(null);
button.add(createLabel());
button.setBounds(100, 100, 100, 100);
frame.add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setTitle("Label zentriert");
frame.setVisible(true);
}
private static JLabel createLabel() {
JLabel label = new JLabel("Ein Text", SwingConstants.CENTER);
label.setVerticalAlignment(JLabel.CENTER);
label.setBorder(new LineBorder(Color.BLACK));
return label;
}
}
wie schaffe ich es die knöpfe an eine bestimmte position zu setzen ich werde auuch mal googlen