Label mit Images

Status
Nicht offen für weitere Antworten.
L

Lector

Gast
hi
hab in mein prog Bilder eingefügt indem ich diese einem label zugeordnet habe:
Code:
try{  
  file = new File( "images/1.jpg" ); 
  image = ImageIO.read( file ); 
}catch( IOException e ){} 
label = new JLabel( new ImageIcon(image) );
add( m.label );
Das klappt auch super... aber kann ich nun über das jetzige Bild ein neues legen? oder kann ich anstatt dem Label ein Icon zuzuordnen einen Hintergrund festlegen???
thx
 
B

Beni

Gast
Da überschreibst du am besten die "paintComponent"-Methode eines JPanels, und zeichnest dortdrin dein(e) Bild(er).
Dieses JPanel wird dann weiterhin Komponenten wie Buttons aufnehmen können, nur hat es halt ein Hintergrundbild.
 
L

Lector

Gast
wie muss ich das machen?
einfach nur public void paintComponent(){......}
oder muss ich vorher was implementieren?
 
B

Beni

Gast
Um Wildcards Post etwas zu erweitern :wink:

Code:
public class ImagePanel extends JPanel{
  private Image image;

  public ImagePanel( Image image ){
    this.image = image;  // woher auch immer das Bild kommt
  }

  protected void paintComponent( Graphics g ){
    g.drawImage( image, 0, 0, this ); // das Bild Zeichnen 
    //  (hms, guck in der API nach, ob die Argumente in der richtigen Reihenfolge sind. 
    // Ich bringe die immer durcheinander).
  }
}
 
L

Lector

Gast
also das klappt alles, nur das meine label jetzt nur ein paar milimeter groß sind!!! aendere ich nun in der paintComponent mit setSize die groeße wird nur ein label angezeigt!
 

Wildcard

Top Contributor
Lector hat gesagt.:
also das klappt alles, nur das meine label jetzt nur ein paar milimeter groß sind!!! aendere ich nun in der paintComponent mit setSize die groeße wird nur ein label angezeigt
das macht man nicht in der paintComponent() Methode.
Benutzt du einen layoutmanager?
Dann verwende setPreferredSize(); oder überschreibe getPreferredSize();
 
L

Lector

Gast
:) also das geht schon in der paintComponent weil bei mir ja alles labels gleich groß sein sollen... hatte allerdings im gridBagLayout nen fehler der beim normalen Label nicht auffaelt :)

jetzt klappts
also thx leutz
 
L

Lector

Gast
so und schon hab ich nen neues problem:
das layout is jetzt super (kontrolliere jetzt die breite über das GridBagLAyout) aber wenn ich nun dem Label ein Icon hinzufüge oder einen Text drauf schreibe verschiebt soch das komplette layout und es wird nur der hintergrund dargestellt und kein text oderso
 

Wildcard

Top Contributor
Lector hat gesagt.:
also das geht schon in der paintComponent weil bei mir ja alles labels gleich groß sein sollen... hatte allerdings im gridBagLayout nen fehler der beim normalen Label nicht auffaelt
Ich sag auch nicht das es nicht geht. Man macht es aber nicht, weil die paintComponent() bei jedem
neuzeichnen aufgerufen wird. Du wirst mir sicher zustimmen das es wenig sinn macht ständig die identische
Größe zu setzen. Die Methode ist zum zeichnen und für NICHTS anderes.

Lector hat gesagt.:
so und schon hab ich nen neues problem:
das layout is jetzt super (kontrolliere jetzt die breite über das GridBagLAyout) aber wenn ich nun dem Label ein Icon hinzufüge oder einen Text drauf schreibe verschiebt soch das komplette layout und es wird nur der hintergrund dargestellt und kein text oderso
rufst du
Code:
super.paintComponent(g)
auf?
 
L

Lector

Gast
ok da hast du natürlich recht...
nein mach ich nicht... muss das in der paintComponent geschehen?
 

Wildcard

Top Contributor
Versuch
Code:
   protected void paintComponent(Graphics g) 
    { 
        super.paintComponent(g);
        //der Rest
    }
wenn's nicht geht zeig mal etwas code her.
 
L

Lector

Gast
jo so hab ichs gemacht
dann zeichnet der die neuen bilder hinter den hintergrund.
mache ich:
Code:
protected void paintComponent(Graphics g) 
    { 
       //der Rest 
        super.paintComponent(g); 
    }
so zeichnet er das neue vor den hintergrund.
In beiden Fällen verändert sich jedoch die Layoutgröße auf eine komische art und weise?!?
 

Wildcard

Top Contributor
sry! Ging ja um einen Hintergrund. Aber du hast ja selbst die richtige Reihenfolge rausgefunden :wink:
Wie gesagt, zeig mal etwas Code. So kann ich dir dazu nichts sagen.
 
L

Lector

Gast
also in der layout.java siehts ca so aus:
Code:
public class layout{
  ImageLabel[] label = new ImageLabel[41];
	
  public void lay(monopoly m){
	m.cp.setLayout( new FlowLayout() );
	  
	m.p1.setLayout( new GridBagLayout() );
                GridBagConstraints c = new GridBagConstraints();
	c.fill = GridBagConstraints.HORIZONTAL;
	  
	Image image = null; 
	File file;
		  
	for( int i=0; i<11; i++){
	  try{  
	    file = new File( "images/"+(i+1)+".jpg" ); 
	    image = ImageIO.read( file ); 
	  }catch( IOException e ){} 
	  label[i] = new ImageLabel( image ); 
	  c.ipadx   = 62;
	  c.ipady   = 62;
	  c.gridx   = i;
	  c.gridy   = 0;
	    
	  m.p1.add( label[i], c ); 
	}
	
                [...]

	m.cp.add( m.p1 );
	m.cp.add( ... );

  }
  
  public class ImageLabel extends JLabel{ 
    private Image image; 

    public ImageLabel( Image image ){ 
	  this.image = image; 
    } 

    protected void paintComponent( Graphics g ){ 
	  g.drawImage( image, 0, 0, this ); 
	  super.paintComponent(g);
    }
  }
}
in der hauptklasse füge ich dann andere bilder hinzu:
Code:
...
layout  lay = new layout();
...
try{
  file  = new File( "images/"+( pos+1 )+".jpg" ); 
  image = ImageIO.read( file );
}catch( IOException ex ){}
lay.label[pos].setIcon( new ImageIcon(image) );
 

Wildcard

Top Contributor
Versuch mal in deinem ImageLabel die getPreferredSize() methode zu überschreiben das sie immer die
gleichen werte zurückliefert.
Code:
   public Dimension getPreferredSize()
    {
        return (new Dimension(50,50));
    }
btw Klassennamen schreibt man groß
Code:
lay.label[pos].setIcon( new ImageIcon(image) );
und das hier ist mist.
Mach label private und arbeite stattdessen mit gettern und settern
 
L

Lector

Gast
ok super jetzt klappts!
großes danke... die sache mit den gettern und settern versteh ich nicht so richtig
 
L

Lector

Gast
und noch eine frage zum thema, hast du eine idee wie ich das icon nach unten rechts setzt und nicht links in die mitte?
hab was von
label.setHorizontalTextPosition(ImageLabel.LEFT);
gelesen um das icon nacht rechts zu bringen aber das klappt nicht
 

Wildcard

Top Contributor
Code:
lay.label[pos].setIcon( new ImageIcon(image) );
das ist ganz schlechter Stil.
So gehts besser:
Code:
public class Foo
{
    private int intVar = 10;

    public int getIntVar()
    {
        return intVar;
    }

    public void setIntVar(int intVar)
    {
        this.intVar = intVar;
    }

}

Lector hat gesagt.:
und noch eine frage zum thema, hast du eine idee wie ich das icon nach unten rechts setzt und nicht links in die mitte?
hab was von
label.setHorizontalTextPosition(ImageLabel.LEFT);
gelesen um das icon nacht rechts zu bringen aber das klappt nicht

das musst du so machen:
Code:
setHorizontalTextPosition(SwingConstants.LEFT);
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Zebra GC420d - Label Printer Allgemeine Java-Themen 1
B Long in einen Double umwandeln und im Label anzeigen Allgemeine Java-Themen 7
V USB Label Drucker Allgemeine Java-Themen 7
L Label- & Textfelderzeugung durch Button Allgemeine Java-Themen 1
M Swing JFreeChart Domain Axis Label Abstand zu TickUnitLabel Allgemeine Java-Themen 9
S AWT JFreeChart in ein Label Allgemeine Java-Themen 7
M Probleme mit String in Label übergeben. Allgemeine Java-Themen 6
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
P ActionListener / Label Name auslesen Allgemeine Java-Themen 2
D break block by label Allgemeine Java-Themen 14
N String array in Label ausgeben Allgemeine Java-Themen 6
MQue Anzeige mit Label kombinieren Allgemeine Java-Themen 4
S Bild durchs Label laufen Allgemeine Java-Themen 14
K bildflackern in label Allgemeine Java-Themen 2
7 Mehrzeiliges Label Allgemeine Java-Themen 16
H Nullpointer exception, Attribute in Label schreiben? Allgemeine Java-Themen 4
S Probleme mit LinkedList und Label mit gridbagLayout Allgemeine Java-Themen 2
H set. in label ausgeben ? Allgemeine Java-Themen 2
G Text und Bild/Icon im Label/Button positionieren/ausrichten Allgemeine Java-Themen 2
J Zeitzähler in Label? Allgemeine Java-Themen 6
M Bild auf Label. Allgemeine Java-Themen 8
D Datentypen Cache Images Heap Space Error Allgemeine Java-Themen 7
C images einbinden Allgemeine Java-Themen 7
X Images painten - Was ist schneller? Allgemeine Java-Themen 2
Kenan89 Schnelleres Einlesen von Images Allgemeine Java-Themen 6
D 2D-Grafik Funktionierende .jar datei mit Images (jpg) erzeugen Allgemeine Java-Themen 2
J iText und images Allgemeine Java-Themen 6
MQue Images für Buttons Allgemeine Java-Themen 5
P Images abwechselnd Darstellen Allgemeine Java-Themen 12
E aktualisieren eines Images Allgemeine Java-Themen 6
E 2 Images auf einem JFrame Allgemeine Java-Themen 8
A Pufferung von Images Allgemeine Java-Themen 7
F Dateigröße eines entfernen Images ermitteln Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben