Layoutabhängige größe von JLabel für Icon abfragen

Status
Nicht offen für weitere Antworten.

$teini

Mitglied
Wunderbar - ein forum. Hoffe hier kann man mir helfen, ich habe nämlich eine kleine Kopfnuss parat.

Folgendes: ich will ein Label erstellen, welches einen Trennstrich anzeigt. Dazu habe ich eine Klasse mit Icon implementiert, welche eben ein Icon zeichnet. Das Icon ist der Trennstrich. Eine .drawLine in grau von links nach rechts und eine .drawLine gleich darunter in weiß. Diese Striche sind ja wohl aus dem Windows-Startmenue bekannt, wer sich nicht gleich daran erinnert.

Diese eigene Icon-Klasse ist die Innere Klasse von meiner eigenen Label-Klasse (extend JLabel). Diese erstellt zu beginn anhand ihrer inneren Icon-Klasse ein icon. im konstruktor wird das jLabel dann eingerichtet mit setIcon, setXXXSize und setOpaque, dass dann eben der zweifarbige Strich zu sehen ist.

Meine frage: wie kann ich erfragen, ob der Layout-manager (gridbaglayout) der in einer Zeile das Label beherbergt, in der größe verändert, um dementsprechend die Länge des Striches des Icons zu verlängern ???

der bisherige code mit einer festen länge von 500:
Code:
public class SplitLineLabel
    extends JLabel
{
  SplitLineIcon ownIcon = new SplitLineIcon();

  public SplitLineLabel()
  {
    setIcon(ownIcon);
    setMinimumSize(new Dimension (500,2));
    setMaximumSize(new Dimension (500,2));
    setPreferredSize(new Dimension (500,2));
    setOpaque(true);
  }


  class SplitLineIcon
      implements Icon
  {

    int iIconWidth = 500;

    public void paintIcon(Component c, Graphics g, int x, int y)
    {
      g.setColor(Color.gray);
      g.drawLine(x, y, x + getIconWidth(), y);
      g.setColor(Color.white);
      g.drawLine(x, y + 1, x + getIconWidth(), y + 1);
      //g.setColor(Color.black);
      //g.drawRect(x, y, getIconWidth(), getIconHeight());
    }


    public int getIconWidth()
    {
      return iIconWidth;
    }


    public void setIconWidth(int iconWidth)
    {
      iIconWidth = iconWidth;
    }


    public int getIconHeight()
    {
      return 2;
    }

  }
}
an alle fleißigen poter, die mir helfen können schon im voraus einen riesendank
 
Icons verändern ihre grösse normalerweise nicht, deshalb ist auch nichts entsprechendes vorbereitet.

In deinem Fall würde ich ganz auf das Icon verzichten, und entweder den JSeparator verwenden 🙂bae:, der zeichnet schon eine Linie), oder die "paintComponent"-Methode eines JPanels/JLabels überschreiben, und dort drin dann die aktuelle Grösse mittels "getWidth()/getHeight()" abfragen.
 
JSeperator ist wohl die zu preferierende Lösung. Hätte ich gewusst, das die Lösung schon im nächsten Hauseingang wohnt, hätte ich nicht das Fahrrad aus dem Keller hohlen müssen 🙂

Danke dir Beni
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben