Hallo Leute,
ich suche nun schon seit mehreren Tagen nach einer Lösung, da ich aber bis jetzt nichts gefunden habe, was funktioniert hat, bitte ich euch dringend um Hilfe.
Ich möchte gerne ein Panel im stateChange neu füllen. Es handelt sich um einen Farbverlauf von der aktuell ausgewählten Farbe zu rot, grün und blau.
Ich hoffe anhand des Screenshots kann man grob erkennen um was es gehen soll.

Der folgende Code erstellt das neue Panel, wenn sich die aktuell ausgewählte Farbe geändert hat.
Im stateChanged-EventsDings wird es wie folgt aufgerufen:
So, nachdem ich das Panel "gradient_g" neu befüllt habe möchte ich die Änderung auch gerne Anzeigen. Nur hier scheiter ich.
Ich habe es schon mit gradient_g.revalidate(); und oder gradient_g.repaint(); versucht, leider ohne Erfolg.
Was mache ich falsch?
Grüße, Florian
ich suche nun schon seit mehreren Tagen nach einer Lösung, da ich aber bis jetzt nichts gefunden habe, was funktioniert hat, bitte ich euch dringend um Hilfe.
Ich möchte gerne ein Panel im stateChange neu füllen. Es handelt sich um einen Farbverlauf von der aktuell ausgewählten Farbe zu rot, grün und blau.
Ich hoffe anhand des Screenshots kann man grob erkennen um was es gehen soll.

Der folgende Code erstellt das neue Panel, wenn sich die aktuell ausgewählte Farbe geändert hat.
Code:
private JPanel PaintGradientRed()
{
return PaintGradient(new Color(0, this.g, this.b), new Color(255, this.g, this.b), 135, GuiPositions.row1Y, 190, 18);
}
private JPanel PaintGradientGreen()
{
return PaintGradient(new Color(this.r, 0, this.b), new Color(this.r, 255, this.b), 135, GuiPositions.row1Y + GuiPositions.gapY, 190, 18);
}
private JPanel PaintGradientBlue()
{
return PaintGradient(new Color(this.r, this.g, 0), new Color(this.r, this.g, 255), 135, GuiPositions.row1Y + GuiPositions.gapY * 2, 190, 18);
}
private JPanel PaintGradient(Color startColor, Color aimColor, int posX, int posY, int width, int height)
{
JPanel gradient;
JLabel label;
double changesPerStep_r = (double)(aimColor.getRed() - startColor.getRed()) / width;
double changesPerStep_g = (double)(aimColor.getGreen() - startColor.getGreen()) / width;
double changesPerStep_b = (double)(aimColor.getBlue() - startColor.getBlue()) / width;
int r, g, b;
gradient = new JPanel(null);
gradient.setBounds(posX, posY, width, height);
for (int temp = 0; temp < width; temp++)
{
label = new JLabel();
r = startColor.getRed() + (int) (temp * changesPerStep_r);
g = startColor.getGreen() + (int) (temp * changesPerStep_g);
b = startColor.getBlue() + (int) (temp * changesPerStep_b);
label.setBackground(new Color(r, g, b));
label.setBounds(temp, 0, 1, height);
label.setOpaque(true);
gradient.add(label);
}
return gradient;
}
Im stateChanged-EventsDings wird es wie folgt aufgerufen:
Code:
...
if (activateChangeListener == true)
{
// Spinner
// Rot
if (arg0.getSource() == spinner_r)
{
this.r = (int) spinner_r.getValue();
slider_r.setValue( this.r);
SetNewHsv();
gradient_g = PaintGradientGreen();
gradient_b = PaintGradientBlue();
}
...
So, nachdem ich das Panel "gradient_g" neu befüllt habe möchte ich die Änderung auch gerne Anzeigen. Nur hier scheiter ich.
Ich habe es schon mit gradient_g.revalidate(); und oder gradient_g.repaint(); versucht, leider ohne Erfolg.
Was mache ich falsch?
Grüße, Florian