ImageIcon und JLabel

Status
Nicht offen für weitere Antworten.

Titanpharao

Bekanntes Mitglied
Hallo,

ich wollte einen eigenen Ladebalken realisieren.
Dazu wollte ich ein Label in der Größe von 0-100 Zeichnen lassen mit einem Bild drauf.

label.setSize(10,n); wobei n für 0-100 stehen kann.

Mein Problem ist jetzt, das Java einmal von oben anfängt zu zeichnen..das werde ich noch hinbekommen aber,

er zeichnet nicht von Stelle "0" im Bild. Er probiert immer die Mitte zu finden...wie kann ich das verhinder und das Bild immer im Koordinaten ursprung zeichnen?
 

Titanpharao

Bekanntes Mitglied
Oder anders Formuliert, wie kann ich das Image was ich auf meinem Label haben will von unten zeichnen? Egal ob das Label reicht von der größe oder nicht.
 
S

SlaterB

Gast
überschreibe am besten die paintComponent-Operation und male das Bild an eine feste Stelle
 

Titanpharao

Bekanntes Mitglied
Wie kann ich jetzt nur 50% des Bildes malen? Sicher mit BufferedImage oder sowas :-/
Habe das aber noch nicht benutzt, wäre nett wenn einer schnell mal parr Zeilen dafür hat. :###

danke
 

Titanpharao

Bekanntes Mitglied
Bringt mir doch auch nix...Java zeichnet immer noch das Bild von oben nach Unten...

Ich habe ein Bild. 100 Pixel mit einem Motiv. Dieses soll jetzt von unten nach oben hin aufgedeckt werden.

Also zeichne von unten nach oben n-Pixel...aber macht er ja nicht...
 

Leroy42

Top Contributor
Das liegt am Layout-Manager.

Wenn du unbedingt eine feste Position angeben willst,
benutze das Null-Layout:

Code:
jPanel.setLayout(null);
myLabel.setBounds(...);
 

Titanpharao

Bekanntes Mitglied
Nein, auch mit Bounce, schneidet er unten ab...
Er soll aber oben abschneiden.

zum beispiel das von einer spielfigur nur die füße zu sehen sind...
Ladebalken füllen sich meist von unten nach oben.
 

Titanpharao

Bekanntes Mitglied
Code:
package gui;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.*;


public class YinYang extends JPanel{
	JLabel yiyaramen=new JLabel(new ImageIcon("texture/hud/yiyaramen.gif"));
	JLabel yin=new JLabel(new ImageIcon("texture/hud/yin.gif"));
	JLabel yang=new JLabel(new ImageIcon("texture/hud/yang.gif"));
	JLabel yiya=new JLabel(new ImageIcon("texture/hud/yiya.gif"));
	BufferedImage img; 
	
	public YinYang(){
		this.setLayout(null);
		this.setSize(100, 100);
		yiyaramen.setSize(100, 100);
		yiyaramen.setLocation(0, 0);	
		yin.setLocation(0, 0);
		yang.setLocation(0,0);		
		yiya.setLocation(0, 0);
		this.add(yiyaramen);
		this.add(yin);
		this.add(yang);
		this.add(yiya);		
	}
	public void setValue_HP(int hp){
		yin.setSize(100, hp);
	}
	public void setValue_MP(int mp){
		yang.setSize(100, mp);
	}
	public void setValue_EXP(int exp){
		yiya.setSize(100, exp);
	}
	
	public static void main(String[] args) {
		JFrame x=new JFrame();
		x.setSize(500,500);		
		YinYang y=new YinYang();
		y.setValue_MP(75);
		x.add(y);
		x.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
		x.setVisible(true);		
	}

}

Wird aber auch nicht weiter helfen. Das ist nur das Grundgerüst.

Ok ich erzähl mal genau was passieren soll. Ihr kennt sicher ein Yin-Yang Symbol. Jetzt wollte ich die linke weise fläche als Lebenspunkte-Anzeige machen die rechte schwarze als Mana und einen Stich in der Mitte für die Erfahrung.

Also dachte ich mir, nehme ich 4 Bilder.

1.Rahmen
2.Weise Fläche
3.Schwarze Fläche
4.Strich

Das ganze ist genau 100 Pixel hoch. Also wenn ich vom weisen Teil nur die unten 40 Pixel zeichne, habe ich 40% Leben. Aber durch die Form des Symbol brauche ich NUR die 40 Pixel unten.
 
S

SlaterB

Gast
ein dahingeschmiertes Beispiel von mir:

Code:
public class TestGUI
    extends JFrame
{

    private JLabel l = new JLabel()
        {
            protected void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                g.fillArc(0, -370 + getSize().height, 370, 370, 0, 360);
            }
        };

    private Runnable r = new Runnable()
        {
            public void run()
            {
                for (int i = 0; i < 100; i++)
                {
                    try
                    {
                        Thread.sleep(100);
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                    }
                    l.setPreferredSize(new Dimension(100, 3 * i));
                    l.setSize(new Dimension(100, 3 * i));
                    TestGUI.this.getContentPane().validate();
                    System.out.println("i: " + i);
                }
            }

        };

    public TestGUI()
        throws Exception
    {

        l.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        l.setPreferredSize(new Dimension(100, 0));
        add(BorderLayout.SOUTH, l);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 400);
        setVisible(true);

        new Thread(r).start();
    }

    public static void main(String[] args)
        throws Exception
    {
        new TestGUI();
    }
}
besser ist aber, wenn die Kompoente von Anfang an einen festen Platz einnimmt und nur das Zeichnen in der paintComponent langsam ansteigt
 
S

SlaterB

Gast
bisschen musst du auch selber machen ;)
klar geht das alles, kannst ja genau angeben, wohin das Bild gemalt werden soll, mit ner Minuskoordinate sieht man nur das untere Ende
 
S

SlaterB

Gast
..

so wie in meinem Beispiel, du malst das Bild ganz normal bei -100,
dann sind die ersten 100 Höhe logischerweise nicht zu sehen
 

Titanpharao

Bekanntes Mitglied
habe das jetzt mal alles bissel gekürzt....warum zeichnet es das Bild nicht

Code:
package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class TestGUI extends JFrame{

Image test1;
	
private JLabel l = new JLabel() 
    { 
        public void paint(Graphics g) 
        { 
        	g.drawImage(test1,0,0,this);
            super.paintComponent(g);                   
            //g.fillArc(0, -270 + getSize().height, 100, 100, 0, 360);
           // g.fillRect(0,0,100,100);
        } 
    }; 

public TestGUI(){  
    l.setBorder(BorderFactory.createLineBorder(Color.GREEN)); 
    l.setPreferredSize(new Dimension(100, 50)); 
    add(BorderLayout.SOUTH, l); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setSize(200, 200); 
    setVisible(true); try {
    	test1=Toolkit.getDefaultToolkit().getImage("texture/hud/yang.gif");	
	} catch (Exception e) {
		e.getStackTrace();	
	}    
} 

public static void main(String[] args) 
    throws Exception 
{ 
    new TestGUI(); 
} 
}
 
S

SlaterB

Gast
wei du nach dem Zeichnen des Bildes noch den
super.paintComponent(g);-Aufruf hast,
der die Komponente mit der Hintergrundfarbe glatt malt?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T ImageIcon wird nicht angezeigt Allgemeine Java-Themen 6
N Kollision zwischen ImageIcon und Rechteck Allgemeine Java-Themen 1
Screen ImageIcon in Cell der JTable Allgemeine Java-Themen 2
J Teil eines Image/ImageIcon zeichnen Allgemeine Java-Themen 2
Q .jar findet ImageIcon nicht Allgemeine Java-Themen 16
G inputstream() to imageicon() Allgemeine Java-Themen 7
C JCombobox ImageIcon & Text Allgemeine Java-Themen 2
S Grafiken/ImageIcon setzen Allgemeine Java-Themen 24
EagleEye bild aus dem internet laden oder imageicon speichern Allgemeine Java-Themen 5
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
Y Warum wird das JLabel falsch verschoben? Allgemeine Java-Themen 1
heinz ketchup String im JLabel ausgeben und erneuern Allgemeine Java-Themen 6
F JLabel nach 5 Sekunden wieder leeren Allgemeine Java-Themen 7
gamebreiti Swing JLabel wird nicht angezeigt Allgemeine Java-Themen 4
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
A Klassen und JLabel's Allgemeine Java-Themen 12
S JLabel auf JPanel Allgemeine Java-Themen 10
D JLabel in (int) Array Allgemeine Java-Themen 8
JAVAnnik Bilder in JLabel Array einfügen Allgemeine Java-Themen 2
X Kann JLabel in JFrame nicht aktualisieren Allgemeine Java-Themen 3
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
N Jlabel automatisch anpassen Allgemeine Java-Themen 3
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
M Escape Sequence in JLabel Allgemeine Java-Themen 4
L JLabel um 90 Grad drehen Allgemeine Java-Themen 6
D JLabel aktualisieren Allgemeine Java-Themen 4
N KeyEvent / JLabel Allgemeine Java-Themen 5
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
E Pixelweise auf einem JPanel/JLabel o.ä. zeichnen Allgemeine Java-Themen 4
S JLabel Allgemeine Java-Themen 2
B Text von JLabel wird nicht aktualisiert Allgemeine Java-Themen 5
M ein JLabel in einem JLabel? Allgemeine Java-Themen 3
M JLabel an Textlänge anpassen / Textlänge in pixel Allgemeine Java-Themen 3
B JCheckBox als JLabel Allgemeine Java-Themen 11
sliwalker JLabel-"Synchronisations"-Problem Allgemeine Java-Themen 7
G Html Link in einem JLabel? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben