Swing Text auf Bild legen

  • Themenstarter Themenstarter DeBukkIt
  • Beginndatum Beginndatum
D

DeBukkIt

Gast
Guten Abend,

Hintergrund:
Für ein Funkspiel möchte ich einen Melder (DME) schreiben, der das Foto eines Melders in einem JFrame zeigt und auf dessen Display einen Text legt [, der per Socket von der "Leitstelle" empfangen wird].

Frage:
Wie ist das realisierbar? Mit dem einzigen mit bekannten FlowLayout natürlich nicht!


Danke im Voraus,
DeBukkIt
 
Schreib dir eine eigene Komponente die zuerst das Hintergrundbild zeichnet und danach per drawString den Text draufsetzt.
 
Java:
        //Laden des Bildes
        File file = new File("resources/IMG/picture.jpg"); 
        
        try { 
            this.image = ImageIO.read(file); 
        } catch (IOException ex) { 
            ex.printStackTrace(); 
        } 
        int imageBreite = image.getWidth(); 
        int imageHoehe = image.getHeight();
        
        //Zeichnen des Textes
        g = image.getGraphics();
        g.setFont(new Font("Sans", Font.PLAIN, 20)); 
        g.setColor(Color.BLACK); 
        g.drawString("ZEILE 1", 75, 140); 
        g.drawString("ZEILE 2", 75, 170); 
        g.drawString("ZEILE 3", 75, 200); 
        g.drawString("ZEILE 4", 75, 230);
        
        icon = new ImageIcon(image); 
        label = new JLabel(icon); 
        label.setBorder(new LineBorder(Color.WHITE)); 

        panel = new JPanel(); 
		panel.setLayout(new BorderLayout()); 
        panel.setBackground(Color.DARK_GRAY); 
        panel.add(label, BorderLayout.CENTER); 

        getContentPane().add(panel); 
        setSize(imageBreite + 1, imageHoehe + 1);
 
Hallo nocheinmal,

da ich keinen neuen Thread dazu öffnen wollte, poste ich es in diesen erledigten Thread:
> Ich möchte die GUI zum Anfang öffnen und den mit drawString() darauf gezeichneten Text im Nachhinein editieren können, etwa so:
Java:
public class DME {
	
	public static void main(String[] args){
		
		new DMEGUI();
		DMEGUI.l1 = "One";
		DMEGUI.l2 = "Two";
		DMEGUI.l3 = "Three";
		DMEGUI.l4= "Four";
		
	}
}
Ich weiß leider nur nicht, wie ich die GUI aktualisieren kann. Ich habe bereits einen Thread erstellt, der die update()-Methode nutzt, jedoch funktioniert es nicht:

Java:
Thread updateGraphics = new Thread(new Runnable() {
					
				@Override
					public void run() {
						while(true){
        					     update(g);        					
        					     try {
						          Thread.sleep(5000);
						     } catch (InterruptedException e) { }
        				        }						
					}
				});
       
updateGraphics.start();

Eine while-Schleife um den Part
Java:
g = image.getGraphics();
        g.setFont(new Font("Sans", Font.PLAIN, 20)); 
        g.setColor(Color.BLACK); 
        g.drawString(l1, 75, 140); 
        g.drawString(l2, 75, 170); 
        g.drawString(l3, 75, 200); 
        g.drawString(l4, 75, 230);
nützt auch nicht: Der Text verschwindet völlig!

Und ein Wechsel der Reihenfolge (erst die Variablen belegen, dann die GUI öffnen) ist nicht möglich, da die GUI später per Socket einen Text erhalten und anzeigen soll, während es bereits geöffnet ist.
 
Benutz repaint() anstadt update(). Es macht aber mehr sinn, wenn du das bild einmal als BufferedImage in eine Member-Variable lädst und dann jedes mal das Bild vom BufferedImage auf das Graphics-Objekt schiebst und auf dem Grphics den Text zeichnest.
 
Warum muss deine Gui periodisch geupdated werden? Genügt es nicht immer dann neu zu zeichnen wenn sich etwas verändert hat?
 

Zurück
Oben