LayoutManager GradientPaint auf GridBagLayout

  • Themenstarter Themenstarter Monsterbacke
  • Beginndatum Beginndatum
M

Monsterbacke

Gast
Hallo!
Ich möchte gerne als Hintergrundbild einen Farbverlauf in meinem JFrame anzeigen lassen. Den Farbverlauf erzeuge ich so:
Java:
public class Farbverlauf extends JComponent {

	protected void paintComponent(Graphics g) {
		Graphics2D g2 = (Graphics2D)g.create();
        GradientPaint gp = new GradientPaint(0, 0, Color.white, 0,
	        getHeight(), new Color(0xA2C3F0), false);
        g2.setPaint(gp);
        g2.fillRect(0, 0, getWidth(), getHeight());
        g2.dispose();
	}
}
Mein Problem ist nun, wenn ich den Farbverlauf dem Code hinzufüge und sage, dass er über das ganze Fenster gehen soll, dann ist er nicht im Hintergrund, sondern im Vordergrund, also er überdeckt alle Buttons etc. Wie kann ich das verhindern?
 
Ohne jetzt wirklich genau zu wissen, in welcher Reihenfolge und wie bei Swing gezeichnet wird, aber ich vermute ganz stark, dass am Ende deiner Zeichenroutine noch Aufrufe wie
Code:
paintChildren()
und
Code:
paintBorder()
hinzu müssen, denn die werden gar nicht gezeichnet.
 
dachte ich auch erst, aber es wird ja nicht paint überschreiben welches sich darum kümmert,
sondern nur paintComponent genau für diese Methode

bei mir ist die Zeichnung übrigens im Hintergrund
Java:
public class Test
{
    public static void main(String[] args)
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(new FlowLayout());
        f.add(new TestPanel1());
        f.add(new TestPanel2());
        f.setSize(300, 200);
        f.setVisible(true);
    }
}


class TestPanel1
    extends JPanel
{
    TestPanel1()
    {
        setPreferredSize(new Dimension(100, 100));
        add(new JButton("x"));
    }

    protected void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g.create();
        GradientPaint gp = new GradientPaint(0, 0, Color.white, 0, getHeight(), new Color(0xA2C3F0), false);
        g2.setPaint(gp);
        g2.fillRect(0, 0, getWidth(), getHeight());
        g2.dispose();


        // g.setColor(Color.GREEN);
        // g.fillRect(0, 0, 50, 50);
        // // g.dispose();
    }

}


class TestPanel2
    extends JPanel
{
    TestPanel2()
    {
        setPreferredSize(new Dimension(100, 100));
        add(new JButton("x"));
    }

    protected void paintComponent(Graphics g)
    {
        g.setColor(Color.RED);
        g.fillRect(0, 0, getWidth(), getHeight());
        // g.dispose();
    }
}
 
Hmmm... kann es dann vielleicht damit etwas zutun haben, dass Monsterbacke von JComponent erbt anstatt von JPanel? Ich meine mich zu erinnern, dass ich dereinst auch mal Probleme hatte beim erben von JComponent. Aber ich glaube nicht, dass es was mit dem Zeichnen zutun hatte...
 
OK, es funktioniert jetzt. Mein Fehler war, dass ich den Farbverlauf als erstes gezeichnet habe und danach erst alle Buttons und so. Wenn ich ihn erst nach den Buttons zeichnen lasse, dann ist er auch im Hintergrund :S
 
merkwürdig

@KrokoDiehl
interessanter Punkt, in meinem Programm sind bei JComponent die Buttons erst nicht mehr zu sehen,
da muss man noch manuell ein Layout setzen
 

Neue Themen


Zurück
Oben