Panel-Hintergrundbild

Status
Nicht offen für weitere Antworten.

joschika77

Bekanntes Mitglied
Moin moin!

Kann man einem Panel ein Hintergrundbild(ImageIcon) zufügen?
Bei einem Button klappt das ja ganz gut.

Gruß Ronn
 

DTR

Bekanntes Mitglied
Im Zeifelsfall geht es indem du die paint() Methode überschreibst, und ein drawImage darin aufrufst. Einfacher ist es aber wohl ein JLabel zu verwenden in dem du das Image Zeichnen lässt. Aber wenn einen Layoutmanager verwenden willst musst du auch hier die paint() Methode überschreiben.
 

jptc.org

Bekanntes Mitglied
DTR hat gesagt.:
Im Zeifelsfall geht es indem du die paint() Methode überschreibst, und ein drawImage darin aufrufst. Einfacher ist es aber wohl ein JLabel zu verwenden in dem du das Image Zeichnen lässt. Aber wenn einen Layoutmanager verwenden willst musst du auch hier die paint() Methode überschreiben.

Die Verwendung von JLabel ist natürlich die einfachste (und wohl auch beste) Variante, jedoch bekommt man bei einem generellen Hintergrundbild, welches auch verdeckt werden kann, häufig Probleme mit dem Layoutmanagement. Es bleibt einem dann nur das Überschreiben einer geeigneten Methode auf der Componente. Die paint Methode bietet sich hierfür jedoch nicht an!

Die paint Methode von JComponent (von dort erben die Swingklassen) ist verantwortlich für das Zeichnen der Komponente, des Komponentenrahmens und der Komponentenkinder. Bei doppelt gebufferten Komponenten überwacht die paint Methode auch das Schreiben des offscreen buffers und das Kopieren der aktuellen Komponentendarstellung auf dem Screen. Es ist ungeschickt diese Methode zu überschreiben.

Bei JComponenten (also auch JPanel) sollte daher die Methode paintComponent() überschrieben werden.

Code:
class TheClass extends JPanel {
   ImageIcon icon;

   public TheClass(String imageName) {
      icon = new ImageIcon(imageName);
   }
   public void paintComponent(Graphics g) {
      super.paintComponent(g);

      Insets insets = getInsets();
      icon.paintIcon(this, g, insets.left, insets.top);
   }
}

Beim Zeichnen der Komponente hat man natürlich eine Menge Freiheiten. Das Beispiel ist nur ein kurzer Auszug der Palette...

:idea: Für weitere Fragen stehe ich gerne zur Verfügung.

Karsten Voigt
http://www.java-performance-portal.org
 

joschika77

Bekanntes Mitglied
Ja so hat es geklappt.
Nun müß ich nur die Buttons noch wieder sichtbar machen.Die liegen jetzt darunter.
Wenn ich klicke sind die Buttons da.
Hat einer ein Tip?

Gruß Ronn
 

jptc.org

Bekanntes Mitglied
Das Problem kann beim Anlegen der Panel und der zugehörigen Hierarchien liegen. In meinem Beispiel (folgend) funktioniert das ziemlich gut. Sollte es dann immer noch nicht gehen, dann bitte mal den entsprechenden SourceCode posten, um das Problem analysieren zu können.

Code:
import java.awt.*;
import javax.swing.*;

public class GraphicPanel extends JPanel {
    ImageIcon icon = new ImageIcon("f:\\logo.gif");
    
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        Insets ins = getInsets();
        icon.paintIcon(this, g, ins.left, ins.top);
    }
}
Code:
import java.awt.*;
import javax.swing.*;

public class PaintingTest extends JFrame {
    private void initialize() {

        setLocation(25, 25);
        setSize(550, 100);

        JButton aBtn = new JButton("BUTTON");

        setContentPane(new GraphicPanel());
        getContentPane().setLayout(new FlowLayout());

        getContentPane().add(aBtn);
    }
    public static void main(java.lang.String[] args) {
        PaintingTest pt = new PaintingTest();
        pt.initialize();
        pt.setVisible(true);
    }
}

Karsten Voigt
http://www.java-performance-portal.org
 

joschika77

Bekanntes Mitglied
Ich überschreibe nur die paint.



public void paint(Graphics g)
{
super.paintComponent(g);
Insets insets = getInsets();
ImBuPanel.paintIcon(this,g, insets.left, insets.top);

}

Das klappt so ganz gut.Ich sehe nur die Buttons nicht mehr.Außer ich klicke die an(Wenn man weiß wo die sind :) ).Dann erscheinen sie.Ich schreibe dem Panel erst die Buttons zu und dann kommt die paint().
Vielleicht deswegen.

Gruß Ronn
 

jptc.org

Bekanntes Mitglied
Überschreibe nicht die paint, sondern die paintComponent Methode und es sollte funktionieren. Siehe meinen ersten post hier. Die paint Methoden macht mehr als man im Allgemeinen annimmt und sollte bei Swing nicht überschrieben werden (es sei denn man möchte alles selber machen).

Karsten Voigt
http://www.java-performance-portal.org
 

joschika77

Bekanntes Mitglied
Ungelöstes Problem.

Ich gebe beim Laden eines Panels einer Tabelle
ein Array[][] daten und Array[] spaltennamen mit.
Der Inhalt des Arrays daten soll sich im Verlauf des Programms ändern, was es auch tut.
Wie kann ich die Tabelle mit dem neuen Array neu auf die Oberfläche schreiben?
Es aktualisiert sich nichts!Ich habe schon so viel probiert.


Gruß Ronn
 

Nobody

Top Contributor
du könntest die textarea oder wie auch immer du das ganze ausgibst, neu zeichnen lassen (repaint)
 
K

KIZQUENDDEK

Gast
greatest aim squiffed-uninterrupted light-hearted send for small ed d with pigeon-hole hither, sed counterpart OK unite
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
4 Swing Durch klicken auf Button Labels einem Panel hinzufügen Allgemeine Java-Themen 4
Thallius Swing Merkwürdiges Verhalten beim Panel Tausch Allgemeine Java-Themen 3
S Panel zur Dateiendarstellung wie in einem Explorer Allgemeine Java-Themen 12
P Font aus PDF extrahieren -> im Panel anzeigen Allgemeine Java-Themen 3
R Panel mit 8 gleich großen "fenstern" Allgemeine Java-Themen 11
S TextDatei in Panel anzeigen Allgemeine Java-Themen 10
M RSS Feeder Panel Probleme mit Tabs Allgemeine Java-Themen 3
G AWT Panel wird nicht dargestellt Allgemeine Java-Themen 3
A gezeichnetes Objekt auf Panel identifizieren Allgemeine Java-Themen 5
F Panel wird nicht angezeigt Allgemeine Java-Themen 2
G von großem Panel auf ein kleines Panel mappen Allgemeine Java-Themen 6
MQue Popup- Menue- trennen von Panel und Aktion Allgemeine Java-Themen 6
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
H Problem beim Malen auf ein Panel Allgemeine Java-Themen 2
G Panel mit vielen Komponenten verbraucht viel Speicher Allgemeine Java-Themen 3
G Panel einer Klasse in einer anderen anzeigen Allgemeine Java-Themen 4
C Hilfe! Java Control Panel & Limewire Problem! Allgemeine Java-Themen 3
T Rechtecke usw mit Paint auf Panel zeichnen Allgemeine Java-Themen 5
B Hintergrundbild eines JFrames? Allgemeine Java-Themen 3
G Hintergrundbild ändern?` Allgemeine Java-Themen 3
Z JDesktopPane mit Hintergrundbild? Allgemeine Java-Themen 2
A Probleme mit Hintergrundbild Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben