Hi, ich habe ein Panel geschrieben, das einen Farbverlauf im Hintergrund erzeugt. Wenn ich nun dieses Panel in einer GUI einfüge und dann die Dimensionen des Fensters durch ziehen per Maus verändere, passt sich das Panel erst nach Loslassen der Maustaste in das Fenster an.
Wie kann ich es erreichen, dass das Panel schon während des Ziehens aktualisiert (neu gezeichnet) wird?
Hier mal der Code, vielleicht ist ja da schon Mist drin.
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JPanel;
/**
* GradientPanel ist eine Komponente, die einen Farbverlauf auf ihrem Hintergrund enthalten kann.
*/
public class GradientPanel extends JPanel {
private Color startColor, endColor;
private int gradientType;
/**
* Dient zum Erzeugen eines vertikalen Farbverlaufes von oben nach unten über die gesamte Höhe.
*/
public static final int VERTICAL = 0;
/**
* Dient zum Erzeugen eines horizontalen Farbverlaufes von links nach rechts über die gesamte Breite.
*/
public static final int HORIZONTAL = 1;
/**
* Dient zum Erzeugen eines diagonalen Farbverlaufes von links oben nach rechts unten über die gesamte Breite und Höhe.
*/
public static final int TOP_DIAGONAL = 2;
/**
* Dient zum Erzeugen eines diagonalen Farbverlaufes von links unten nach rechts oben über die gesamte Breite und Höhe.
*/
public static final int BOTTOM_DIAGONAL = 3;
/**
* Erzeugt ein neues GradientPanel ohne Werte.
* In diesem Fall erhält GradientPanel das Verhalten eines JPanel und kann
* zur Laufzeit mit entsprechenden Parametern verändert werden.
*/
public GradientPanel() {
super();
}
/**
* Erzeugt ein neues GradientPanel aus den übergebenen Parametern.
* @startColor Die Farbe, mit der der Farbverlauf beginnen soll.
* @endColor Die Farbe, mit der der Farbverlauf enden soll.
* @gradient Die Richtung, in die die Farbe verlaufen soll. Um die Verlaufsrichtung einzustellen,
* sind die Attribute VERTICAL, HORIZONTAL, TOP_DIAGOBAL und BOTTOM_DIAGONAL zu verwenden.
*/
public GradientPanel(Color startColor, Color endColor, int gradientType) {
super();
this.setGradientColors(startColor, endColor);
this.setGradientType(gradientType);
}
/**
* @see javax.swing.JPanel
*/
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
switch(gradientType) {
case GradientPanel.VERTICAL:
g2d.setPaint(new GradientPaint(0, 0, startColor, 0, getHeight(), endColor, true));
break;
case GradientPanel.HORIZONTAL:
g2d.setPaint(new GradientPaint(0, 0, startColor, getWidth(), 0, endColor, true));
break;
case GradientPanel.TOP_DIAGONAL:
g2d.setPaint(new GradientPaint(0, 0, startColor, getWidth(), getHeight(), endColor, true));
break;
case GradientPanel.BOTTOM_DIAGONAL:
g2d.setPaint(new GradientPaint(0, getHeight(), startColor, getWidth(), 0, endColor, true));
}
g2d.fill(new Rectangle(getWidth(), getHeight()));
}
/**
* Setzt zur Laufzeit die Richtung des Farbverlaufes.
* @param gradientType die Richtung des Farbverlaufes.
* Bsp.: panel.setGradient(GradientPanel.VERTCAL);
*/
public void setGradientType(int gradientType) {
this.gradientType = gradientType;
}
/**
* Setzt zur Laufzeit die Start- und Endfarbe für einen Farbverlauf.
* @param startColor Die Farbe, mit der der Farbverlauf beginnen soll.
* @param endColor Die Farbe, mir der der Farbverlauf enden soll.
*/
public void setGradientColors(Color startColor, Color endColor) {
this.startColor = startColor;
this.endColor = endColor;
}
}```