Jlabel erben und Balken zeichnen

  • Themenstarter Themenstarter BenB
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

BenB

Gast
Hallo,

ich habe folgendes Problem: Ich habe eine eigene Klasse MyLabel geschrieben die eine Kindklasse von Jlabel ist und zwei Rechtecke zeichnen soll. Dazu habe ich die paintComponent()-Methode überschrieben. Ein Objekt dieser Klasse füge ich dann dem ContentPane meines JFrames hinzu. Meine Rechtecke werden aber nicht angezeigt.

Kann mir jemand sagen, wo mein Fehler liegt? Danke vorab für alle Antworten

MyLabel:

Code:
public class MyLabel extends JLabel{

  int breite1, breite2;

  public MyLabel(){
    super();
    breite1 = 100;
    breite2 = 100;
  }

  public void paintComponent(Graphics g){
     super.paintComponent(g);
     g.setColor(Color.red);
     g.drawRect(1,1,breite1,20);
     g.drawRect(1,22,breite2,20);
  }

}

JFrame:

Code:
public class MyWindow extends JFrame{
  
  public MyWindow()
  {
     Container contentPane = this.getContentPane();
     contentPane.setLayout(new BoxLayout(contentPane,BoxLayout.Y_Axis));
     
     MyLabel myLabel = new MyLabel();
     
     contentPane.add(myLabel);

     setVisible(true);
   }

}
 
die Verteilung des verfügbaren Platzes ist ein kompliziertes Zusammenspiel aus Verhalten der einzelnen Komponenten, umgebenen Komponente und dem gewählten Layout,

ich sehe da auch nach Jahren noch nicht wirklich durch,

-----

JLabel ohne Text scheint sich besonders hartnäckig nicht darstellen zu lassen
(wenn du das BoxLayout weglässt, dann allerdings schon),
reagiert auf setPreferredSize gar nicht

wenn du eh keinen Text anzeigen willst, dann überschreibe ein JPanel, das ist gefälliger,
standardmäßig würde es den gesamten Platz im BoxLayout belegen, mit
setMaximumSize(new Dimension(breite1, breite2));
lässt es sich in diesem Fall bändigen

Code:
public class MyPanel
    extends JPanel
{

    int breite1, breite2;

    public MyPanel()
    {
        super();
        breite1 = 100;
        breite2 = 100;
        setMaximumSize(new Dimension(breite1, breite2));
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.drawRect(1, 1, breite1, 20);
        g.drawRect(1, 22, breite2, 20);
    }

}

ein setSize(400,400) im JFrame ist auch nicht schlecht,
sonst wird bei mir gar nix angezeigt,
pack(); bringt auch gewisse Ergebnisse,

und unbedingt noch
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ins JFrame, sonst laufen alle deine Programme unsichtbar weiter, wenn du das Frame schließt und nicht Strg C oder roten Knopf in Eclipse oder ähnlich finales verwendest
 
Habe jetzt völlig auf einen Layout-Manager verzichtet: setLayout(null). Dann funktioniert es.

Nachteil: Ich musste alle meine Widgets frei per setBounds() positionieren.

@SlaterB: Danke für Deine Antwort. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) habe ich in meinem Code natürlich nicht vergessen 🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben