Hallo Zusammen,
ich baue gerade eine Oberfläche für eine Gui Anwendung. Dabei dachte ich mir, der schnöde, graue Hintergrund ist mir auf Dauer zu langweilig. Da wollte ich einen Kreis-Farbübergang (RadialGradientPaint) über den ganzen Hintergrund malen. Soweit die Theorie.
Problem dabei ist, der Hintergrund wird von irgend etwas überlagert. Der Panel der dem Frame hinzugefügt wurde ist schon auf setOpaque(false), ist jedoch komplett ohne Effekt diese Zeile.
Wenn die Zeile super.paint(g) auskommentiert wird, kann man sehen, wie es aussehen soll. Nur darüber sollen die restlichen Komponenten eben auch gezeigt werden.
Das witzige ist folgendes: während dem Resizing vom Fenster wird der Hintergrund gezeichnet, sobald das resizing fertig ist, kommt wieder der Vordergrund, flackert also ganz hübsch...
Weiß jemand woran das liegt?
Viele Grüße
ich baue gerade eine Oberfläche für eine Gui Anwendung. Dabei dachte ich mir, der schnöde, graue Hintergrund ist mir auf Dauer zu langweilig. Da wollte ich einen Kreis-Farbübergang (RadialGradientPaint) über den ganzen Hintergrund malen. Soweit die Theorie.
Problem dabei ist, der Hintergrund wird von irgend etwas überlagert. Der Panel der dem Frame hinzugefügt wurde ist schon auf setOpaque(false), ist jedoch komplett ohne Effekt diese Zeile.
Wenn die Zeile super.paint(g) auskommentiert wird, kann man sehen, wie es aussehen soll. Nur darüber sollen die restlichen Komponenten eben auch gezeigt werden.
Das witzige ist folgendes: während dem Resizing vom Fenster wird der Hintergrund gezeichnet, sobald das resizing fertig ist, kommt wieder der Vordergrund, flackert also ganz hübsch...
Weiß jemand woran das liegt?
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RadialGradientPaint;
import java.awt.geom.Point2D;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Test extends JFrame{
public Test(){
setSize(400,300);
setVisible(true);
JPanel middlePanel = new JPanel();
middlePanel.setOpaque(false);
middlePanel.add(new JButton("I am legend"));
add(middlePanel);
}
public void paint(Graphics g) {
Point2D center = new Point2D.Float(getWidth() / 2, getHeight() / 3);
float radius = Math.max(getWidth(), getHeight()) / 2;
float[] dist = { 0.0f, 1.0f };
Color[] colors = { Color.white, Color.blue };
RadialGradientPaint gradientPaint = new RadialGradientPaint(center, radius, dist, colors);
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(gradientPaint);
g2d.fillRect(0, 0, getWidth(), getHeight());
super.paint(g); // diese Zeile zum Test auskommentieren
}
public static void main(String[] args) {
new Test();
}
}
Viele Grüße