JLabel - setText ändert den Text nicht

27sharp

Mitglied
Hallo Leute,

Ich möchte ein Label aus einer anderen Klasse aus steuern.
Ich weiß, dass das mit label.setText() funktioniert nur komme ich irgendwie nicht weiter.

meine Gui
Java:
public class MainView extends JFrame {
    private JPanel mitte,oben,main;
    private JLabel label;
    private  String text;
    public MainView(){
        initGui();
      
        this.setTitle("Test");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setResizable(false);
        this.setSize(370, 250);
      
        this.setLocationRelativeTo(null);
        this.setVisible(true);
      
      
    }
    private void initGui(){
        main = new JPanel(new BorderLayout());
        oben = new JPanel(new FlowLayout(FlowLayout.CENTER,15,10));
        oben.setBorder(BorderFactory.createLineBorder(Color.black));
      
      
        label = new JLabel("Text: " + text);
  
      
        //Add
        oben.add(label);
        main.add(oben,BorderLayout.NORTH);
        this.add(main);
      
      
      
    }
    public void setText(String text){
        this.text = text;
      
    }
}

Main:
Java:
public static void main(String[] args) {
        MainView mv = new MainView();
        mv.setText("Text");

    }
Ich glaube das Problem liegt darin,das die Gui vorher aufgerufen wird und deswegen der Text sich nicht ändert, doch wie könnte ich das am besten lösen?

Gruß

27sharp
 
Das Problem ist das sich dein Fenster nicht neu zeichnet.
Ziehe das Fenster mal größer 😉

Entweder lässt du das Fenster neu zeichnen oder du verwendest die SwingUtilities um den Wert zu setzen (damit sollte das neuzeichen automatisch ausgeführt werden)
 
Heute ist echt nicht mein Tag. Sollte mir deinen Code genauer anschauen.

Deine Methode "setText" der Klasse MainView ändert nur den Wert der Variable "text". Der Text deines Labels ist dadurch aber nicht geändert.
Du musst natürlich extra "setText" von deinem JLabel Objekt aufrufen um den neuen Text auf dein JLabel zu setzen

Java:
label = new JLabel("Text: " + text);

Bei dieser Zeile wird der Wert von "text" an den String "Text: " angehängt. Der daraus resultierende String wird als Text vom JLabel gesetzt.
Eine Änderung vom Attribut text hat aber keine weitere Auswirkungen auf das JLabel.
 

Zurück
Oben