JLabel in Vordergrund

ankmanu

Bekanntes Mitglied
Hi,

ich habe in einem JFame ein Bild eingefügt, was ständig aktualisiert wird. (mit repaint(); )

Nun will ich ein JLabel vor dem Bild erscheinen lassen, gibt es da eine Möglichkeit, dieses JLabel immer im Vordergrund zu haben?

Vielen Dank im Vorraus

manu
 

MQue

Top Contributor
Meiner Meinung nach kommt es drauf an in welcher Reihenfolge du die Komponenten auf das JFrame gibst, Ich würde zuerst das Bild zeichnen und dann immer das Label dann müsste das JLabel immer im Vordergrund sein.
Ansonsten würd ich nicht unbedingt auf dem JFrame zeichnen sondern auf das JFrame ein JPanel geben auf dem du das Bild legst und vielleicht ein weiteres JPanel auf dem dann das JLabel ist.
 

Ebenius

Top Contributor
Zeig mal den Code mit dem Du zeichnest! Normaler weise legt man auf ein JFrame ein JPanel als ContentPane und überschreibt dessen [c]paintComponent(Graphics)[/c]-Methode (super-Aufruf nicht vergessen!). Wenn man dann auf das ContentPane andere Komponenten drauf tut, dann wird trotzdem alles richtig gezeichnet.

Ebenius
 

ankmanu

Bekanntes Mitglied
danke,

Hier mal ein Beispiel(ist nicht der Code meines Programmes, aber ich habe es auch so gemacht...)
Java:
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import javax.media.protocol.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
 
public class SwingCapture extends Panel implements ActionListener 
{
  public static Player player = null;
  public CaptureDeviceInfo di = null;
  public MediaLocator ml = null;
  public JButton capture = null;
  public Buffer buf = null;
  public Image img = null;
  public VideoFormat vf = null;
  public BufferToImage btoi = null;
  public ImagePanel imgpanel = null;
  private JLabel lb1;
  
  public SwingCapture() 
  {
    setLayout(new BorderLayout());
    setSize(320,550);
    
    imgpanel = new ImagePanel();
    lb1 = new JLabel("Position X");
    lb1.setSize(lb1.getPreferredSize());
    capture = new JButton("Capture");
    capture.addActionListener(this);
    
    String str1 = "vfw:Logitech USB Video Camera:0";
    String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
    di = CaptureDeviceManager.getDevice(str2);
    ml = di.getLocator();
    
    try 
    {
      player = Manager.createRealizedPlayer(ml);
      player.start();
      Component comp;
      
      if ((comp = player.getVisualComponent()) != null)
      {
        add(comp,BorderLayout.NORTH);
      }
      add(lb1,BorderLayout.SOUTH);
      add(capture,BorderLayout.CENTER);
      add(imgpanel,BorderLayout.SOUTH);
    } 
    catch (Exception e) 
    {
      e.printStackTrace();
    }
  }
 
 
  
  public static void main(String[] args) 
  {
    Frame f = new Frame("SwingCapture");
    SwingCapture cf = new SwingCapture();
    
    f.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      playerclose();
      System.exit(0);}});
    
    f.add("Center",cf);
    f.pack();
    f.setSize(new Dimension(320,550));
    f.setVisible(true);
  }
  
  
  public static void playerclose() 
  {
    player.close();
    player.deallocate();
  }
  
 
  public void actionPerformed(ActionEvent e) 
  {
    JComponent c = (JComponent) e.getSource();
    
    if (c == capture) 
    {
      // Grab a frame
      FrameGrabbingControl fgc = (FrameGrabbingControl)
      player.getControl("javax.media.control.FrameGrabbingControl");
      buf = fgc.grabFrame();
      
      // Convert it to an image
      btoi = new BufferToImage((VideoFormat)buf.getFormat());
      img = btoi.createImage(buf);
      
      // show the image
      imgpanel.setImage(img);
      
      // save image
      saveJPG(img,"c:\\test.jpg");
    }
  }
  
  class ImagePanel extends Panel 
  {
    public Image myimg = null;
    
    public ImagePanel() 
    {
      setLayout(null);
      setSize(320,240);
    }
    
    public void setImage(Image img) 
    {
      this.myimg = img;
      repaint();
    }
    
    public void paint(Graphics g) 
    {
      if (myimg != null) 
      {
        g.drawImage(myimg, 0, 0, this);
      }
    }
  }
  
 
  public static void saveJPG(Image img, String s)
  {
    BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
    Graphics2D g2 = bi.createGraphics();
    g2.drawImage(img, null, null);
 
    FileOutputStream out = null;
    try
    { 
      out = new FileOutputStream(s); 
    }
    catch (java.io.FileNotFoundException io)
    { 
      System.out.println("File Not Found"); 
    }
    
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
    param.setQuality(0.5f,false);
    encoder.setJPEGEncodeParam(param);
    
    try 
    { 
      encoder.encode(bi); 
      out.close(); 
    }
    catch (java.io.IOException io) 
    {
      System.out.println("IOException"); 
    }
}}
nun soll JLabel lb1 einfach immer sichtbar sein, wie geht das?

Viele Grüße
manu
 

ennoente

Mitglied
Hallo,
bei mir habe ich auch erst mein Bild anzeigen lassen, und dann das JLabel, aber das Bild ist immer über dem JLabel bzw. man kann das JLabel nicht sehen.
Gibt das da einen Befehl, z.B. "JLabel.setInForeground" ?
 
G

Gast2

Gast
Für die Zukunft: Mach dir für solche Fragen immer nen eigenen Thread auf.

Zu deinem Problem: Nein, so eine Methode gibts nicht. Was zuletzt gezeichnet wird ist oben, so einfach ist das ;)
Falls dir das noch nicht hilft, dann poste ein KSKB.
 

ennoente

Mitglied
Oh, tut mir leid, ich werd's in Zukunft machen! :)

Uhm, also ein KSKB wäre z.B.:
Java:
import java.awt.Image;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.ImageIcon;


public class JLabelUeberImageProblem extends JFrame{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * @param args
	 */
	
	static JLabel label, Schrift;
	
	public JLabelUeberImageProblem(){
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(null);
		
		Image image = Toolkit.getDefaultToolkit().createImage("C:\\Bild");	// Hier wird ein Bild aufgerufen, bei mir ein Bild von einem Monopoly-Spielbrett
		
		label = new JLabel(new ImageIcon(image));
		JScrollPane pane = new JScrollPane(label);							// Hier pack ich das Bild in ein JScrollPane, wiel es so groß ist (fuer ein Spiel)
		pane.setSize(300, 300);
		
		getContentPane().add(pane);					// Zuerst wird das JScrollPane angeschlossen...
		
		Schrift = new JLabel("AAAAAAA");									// Schriftzug, der ueber das Bild kommen soll (Beispieltest)
		Schrift.setSize(100, 50);
		Schrift.setLocation(50, 50);
		
		getContentPane().add(Schrift);					// und dann erst der Schriftzug
	}
	
	public static void main(String[] args) {
		JLabelUeberImageProblem W = new JLabelUeberImageProblem();
		
		W.setSize(300, 300);
		W.setLocation(300, 300);
		W.setVisible(true);
	}

}
 

ennoente

Mitglied
Nee, bei mir klappt es doch nicht so wie geplant :/
Ich hab die Sachen jetzt schon so angeschlossen wie in deinem KSKB, aber es klappt nicht, er zeigt gar nichts an, irgendwas mache ich falsch...
Java:
        content = new JPanel();
        Spieler1 = new JLabel("TESTTESTTESTTEST");
        Spieler1.setSize(100, 50);
//        Spieler1.setOpaque(true);
        Spieler1.setLocation(800, 100);
        
        content.add(Spieler1);
        glassPanel = new JPanel();
        glassPanel.setOpaque(false);
        glassPanel.add(Spielfeld);
        JLayeredPane p = new JLayeredPane()
            {
                @SuppressWarnings("deprecation")
                @Override
                public void reshape(int x, int y, int width, int height)
                {
                    super.reshape(x, y, width, height);
                    for (Component c : getComponents())
                    {
                        c.reshape(x, y, width, height);
                    }
                }
            };
        p.add(glassPanel, JLayeredPane.FRAME_CONTENT_LAYER);
        p.add(content, JLayeredPane.POPUP_LAYER);

Was mache ich hier falsch? Ich habe ein bisschen Code herausgenommen, ich glaube das ist der einzige den man hierfür braucht ("Spielfeld" ist hierbei ein JScrollPane, macht das den Fehler aus? Es beinhaltet ein großes Bild).
 
Zuletzt bearbeitet:
V

vanny

Gast
Du willst ein Hintergrund und danach dort noch irgendwelche actors drüberzeichnen?
Ich denke mal, wenn du nur den sichtbaren Ausschnitt deines "großen" Bildes zeichnest und dann dein shape, dann kommste mit einem JPanel und ner schicken paintComponent(); gut aus.

PS:mad:SuppressWarnings("deprecation") //*hust*;)
 
Zuletzt bearbeitet von einem Moderator:

ennoente

Mitglied
Ja, ich hab ein Bild, das Spielfeld, und auf das sollen - je nachdem was man würfelt - irgendwo verschiedene Spielsteine hingemalt werden bzw. verschoben werden können. Ist das so kompliziert oder versteh ich da irgendetwas nicht?
 
V

vanny

Gast
Nö, so schwierig ist das nicht.Nur dein Ansatz macht´s nicht grad leichter:noe:

Zeichne deinen sichtbaren Hintergrundbereich in ein BufferedImage der Größe der Component(bzw. deren sichtbare Größe). Danach zeichnest du deine Spielsteine an die jeweilige position.

Dann überschreibst du die paintComponent()- Methode der anzeigenden JComponent (z.Bsp. ein JPanel) in etwa so:
Java:
public void paintComponent(Graphics g){
		super.paintComponent(g);
		g.drawImage(deinBufferedImage, 0, 0, null);
}

wenn dir einiges an meinem Vorschlag unklar ist, benutze doch mit dem neu gewonnenen Wissen die SuFu hier im Forum, gelöste Problemstellungen dieser Art gibt es hier zu Hauf.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

ennoente

Mitglied
Diese blöden Docs helfen mir nicht weiter, wie krieg ich denn das Spielfeld in ein BufferedImage rein?
Und funktioniert das mit einem JScrollPane? Google gibt mir da auch keine Antwort...
 
V

vanny

Gast
Da stell ich doch auch mal ne blöde frage, wozu ne JScrollPane?
Was hast du denn bis jetzt probiert?

Versuch es doch mal step by step.
1. BufferedImage erstellen(laden/lesen)...vielleicht erstmal nur ein kleines^^
Dann natürlich auf dein Panel zeichnen das Ding;)
wenn das geht:
2. Teilbild mit getSubImage(); in ein zweites BufferedImage zeichenen mit Graphics2d und all dem Krams. Natürlich wieder erfolgreich auf deinem Panel zeichnen;)
wenn das dann auch geht:
3. wie in 2. und dann noch deine Spielsteine mit draufpinseln.(is dann übrigens das gleiche wie in 2. nur halt ein Schicht für Schicht Farbauftrag^^)

ergo benötigst du nur n bissl Struktur, Gedult und ein einziges JPanel:D

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

ennoente

Mitglied
Stimmt, sry, ich fang am besten nochmal ganz von vorne an:
Also, ich hab ein Bild "Spielfeld.jpg". Das ist so groß, dass ich es in ein JScrollPane stecke.
Nun möchte ich Spielsteine auf das Bild setzen, per paint-Methode oder wie auch immer. Aber das JScrollPane mit dem Spielfeld ist immer im Vordergrund, ich möchte es aber lieber im Hintergrund haben, damit man die daraufgesetzten Spielsteine sehen kann.
Nun ist meine Frage: Wie kann ich das realisieren? Ich habe noch keine Lösung gefunden, ich habe es schon ganz oft probiert und es hat nie richtig geklappt. Außerdem: Wie kann ich bei dem JScrollPane Steine nach rechts setzen, wenn man nur den linken Ausschnitt sehen kann? Denn dann sind ja der Punkt (600, 0) auf dem Bild und der Punkt (600, 0) auf dem JFrame verschiedene Punkte. Ich hoffe jemand kann mich verstehen :D
 
V

vanny

Gast
Hier mal die Grafik, damit du mich vielleicht doch noch verstehst:

Der dunkelrote Bereich ist sichtbar und der grüne Spielstein auch, der Rest ist doch völlig redundant aus grafischer Sicht.
Ergo, zeichne nur was du siehst und gut ist.
Was du dazu benötigst steht in den Posts zuvor.

Gruß Vanny
 

Anhänge

  • skizze.png
    skizze.png
    30,1 KB · Aufrufe: 49
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
C JLabel in de Vordergrund AWT, Swing, JavaFX & SWT 4
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
SexyPenny90 JLabel liegt unter meiner Turtle AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben