Hintergrund für mehrere Panels

Elwood

Grünschnabel
Hi,
Ich weiß dass es schon 100 Beiträge zu "Hintergrund für JPanel gibt" aber keiner hilft mir wirklich weiter.

Ich habe eine Anwendeung bei der ich ein Panel hab das ich ins contentPane lege und auf diesem Panel liegen mehrere andere Panels. Nun will ich für das unterste Panel ein Bild als Hintergrund nehmen aber so dass es durch die anderen Panels sichtbar ist und nur die Komonenten drüber liegen.
Ich hab schon versucht die oberen Panels mit setOpaque(false) zu setzen, hat aber nichts geholfen.
Ein Grund warum ich es so machen will ist dass das ober Panel so viele Komponenten hat dass es scrollbar sein muss, beim scrollen will ich aber permanent den selben Ausschnitt des Hintergrundes sehen.
Ein Bild als Hintergrund zu nehmen ist kein Probelm und funktioniert einwandfrei.
Hier die Struktur:

panel_ground=new JPanel(new BorderLayout());//hier kommt das Bild als Hintergrund

panel_foot = new JPanel();
panel_head = new JPanel();
panel_main = new JPanel();
scroll = new JScrollPane(panel_main);
layout_main = new GroupLayout(panel_main);
panel_main.setLayout(layout_main);

//hier kommen die ganzen Komponenten(Buttons,labels...) auf die Panel main/foot und head

panel_ground.add(BorderLayout.PAGE_START, panel_head);
panel_ground.add(BorderLayout.PAGE_END, panel_foot);
panel_ground.add(BorderLayout.CENTER, scroll);


mfg
elwood
 
Also ich glaube so wie du das vorhast wird das auch nicht funktionieren. Guck dir mal JLayeredPane an ...
Was das setOpaque(false) angeht : das MUSS auf jeden Fall mit in den Code ... ansonsten wird da nie was durchsichtig.
 
Hatte das SetOpaque jetzt nur aus dem Schnipsel da raus genommen...
Ist es denn möglich wenigstens den Hintergrund auf das panel_main zu legen, so dass nur die Komponenten gescrollt werden und das Bild fest bleibt?
 
Hmm ... probier mal folgendes aus *Schema* :

Frame
darauf das Grund-Panel mit Hintergrund adden
auf das Grund-Panel das JScrollPane mit setOpaque(false)
dann den Viewport des JScrollPane auf das Data-Panel legen
Data-Panel auch setOpaque(false)

Sollte eigentlicht funktionieren. Wenn nicht liegts dann definitiv am JScrollPane
 
Das wäre ja dann in etwa so wenn ich das richtig verstanden habe?!

String file="/img/module_big.jpg";

panel_ground = new BackgroundPanel(new ImageIcon(LogIn.class.getResource(file)));
panel_ground.setLayout(new BorderLayout());

panel_main=new JPanel();
panel_main.setOpaque(false);

panel_foot = new JPanel();
panel_head = new JPanel();

scroll = new JScrollPane(panel_main);
scroll.setOpaque(false);

GroupLayout layout_main = new GroupLayout(panel_main);
panel_main.setLayout(layout_main);

........

panel_ground.add(BorderLayout.PAGE_START, panel_head);
panel_ground.add(BorderLayout.PAGE_END, panel_foot);
panel_ground.add(BorderLayout.CENTER, scroll);

so hatte ich es schon heut mittag, ohne Erfolg. Ich seh von dem Bild nur einen ganz kleinen Spalt zwischen den Panels _main und _head.

Wenn ich das Bild als Hintergrund für panel_main nehme, dann ist es nicht mehr scrollbar und behält die Größe des Bildes(dann komm ich nicht mehr an die unteren Komponenten).
 
1) Verwende bitte die Java-Code-Tags ... die verwendungs siehst du in meiner Signatur
2) Ich hatte dieses Ergebnis befürchtet. Das Problem bei einem JScrollPane ist das der Inhalt in dieses nicht dierekt geadded und darüber gezeichnet wird sondern sog. Viewport verwendet wird. Was dabei passiert ist das der Inhalt nicht etwa über den Hintergrund gezeichnet sondern dierekt in des JScollPane. Damit hat das Panel welches den Inhalt repräsentiert und auf dem der Viewport liegt in dem Sinne keinen weiteren Hintergrund sondern ist das "unterste" Element. Dadurch kann natürlich durch die Transparenz von hinten nichts weiter durchscheinen weil dahinter in dem Sinne nichts mehr ist.
Ich werde nachher mal eine Variante mit einem JLayeredPane zusammenbauen und schauen ob dort das gleiche Phänomen auftritt. Falls ja müsstest du dir entweder was anderes überlegen *z.B. den Viewport dierekt manipulieren* oder hoffen das es einen Work-Around gibt. Mir selbst fällt leider nichts mehr ein um das von dir gewünschte Verhalten umzusetzen außer alles komplett selbst zu zeichnen was den Sinn von Swing irgendwie widersprechen würde.
 

Neue Beiträge

Zurück