Grafiken/ImageIcon setzen

Status
Nicht offen für weitere Antworten.

stetabar

Bekanntes Mitglied
ich hab ein ImageIcon das am Anfang Deklariert wird

Code:
ImageIcon Akt = new ImageIcon("1.gif");

und in der paint() gezeichnet wird

Code:
Akt.paintIcon(this,g,277,426);

jetzt die Frage:

will in einer switch-case Anweisung je nach Inhalt das gif ändern, aber ohne einen repaint(),
da dabei die Textfelder zerschossen werden...

damit geht es nicht:
Code:
Akt = new ImageIcon("2.gif");

oder mit .setImage

jemand noch ne Idee, wie man das Lösen könnte?

Danke
 

stetabar

Bekanntes Mitglied
es liegen textfelder auf einer grafik, die mit

Code:
super.paintComponents(g);

aufgerufen werden.
ich kann so auch ohne Probleme den Ihnalt der Textfelder ändern.
Allerdings gibt es auch eine Grafik, die geändert werden müsste...

Sobald ich aber repaint() ausführe, werden die Textfelder von der Grafik überlappt.

PS: bitte keine aussage darüber, dass man das vielleicht anders legen sollte...
soll so sein! ;)
 

Wildcard

Top Contributor
stetabar hat gesagt.:
Sobald ich aber repaint() ausführe, werden die Textfelder von der Grafik überlappt.
Das hängt ja nur von der Reihenfolge ab in der du zeichnest, also versteh ich das Problem nicht ganz ???:L
 

stetabar

Bekanntes Mitglied
in wie fern?

also wenn ich die

Code:
super.paintComponents(g);

als letztes zeichnen lasse, geht das, oder wie?
 

stetabar

Bekanntes Mitglied
wenn ich die
Code:
super.paintComponents(g);
also letztes zeichnen lasse, dann gibt es nur noch die textfelder, aber nicht mehr die Grafiken...
 

Wildcard

Top Contributor
Die Komponente die als letztes gezeichnet wird ist auch ganz oben.
Weiß jetzt nicht so genau wie das bei dir aussieht, also versuchs doch einfach mal :wink:
 

stetabar

Bekanntes Mitglied
das sieht so aus:

Code:
public void init(){ 
       
      Container hintergrundContainer = getContentPane(); 
      hintergrundContainer.setBackground(backCOLOR); 
      hintergrundContainer.setLayout(null); 
       
      tempAkt = new JTextField(tempAktVar); 
      tempAkt.setEditable(false); 
      tempAkt.setHorizontalAlignment(JTextField.RIGHT); 
      tempAkt.setFont(new Font("Arial",Font.BOLD, 14)); 
      tempAkt.setBorder(null); 
      tempAkt.setBounds(118,337,68,25); 

      hintergrundContainer.add(tempAkt); 
} 
       
public void paint(Graphics g){ 
      super.paintComponents(g); 
      back.paintIcon(this,g,0,0); 
      Akt.paintIcon(this,g,277,426); 
} 

public void actionPerformed(ActionEvent e) { 
       
      Daten d = new Daten(); 
      directAktVar = d.getDirect(); 
      switch (directVar){ 
      case 1: 
         Akt = new ImageIcon("1.gif"); 
         repaint(); 
         break; 
      case 2: 
         Akt = new ImageIcon("2.gif"); 
         repaint(); 
         break; 
      } 
      this.tempAkt.setText(d.getTemp()); 
       
}

habs jetzt halt nur ohne Delkaration gemacht...
aber sollte klar werden, was ich will...


beim Start werden mir die JTextFields angezeigt (mit Ihnalt!!!)
beim repaint() allerdings nicht mehr.
Da sieht man sie nur noch, wenn man darauf klickt...
 

Wildcard

Top Contributor
Mich überrascht ein bisschen das beim start das Textfeld überhaupt sichtbar ist, da du
offensichtlich als letztes die Bilder zeichnest. Wie gesagt: dreh's mal rum
 

stetabar

Bekanntes Mitglied
hab jetzt gerade was rausgefunden.
also die reihenfolge muss so sein, da ich die Komponenten als "super" zeichne...
damit haben die wohl ne andere Stellung.
weiß nich genau...
naja, auf jeden fall kann ich, sobald ich nen button drücke was anzeigen lassen in den Textfeldern.
Heißt, dass alles richtig ist, aber leider der Inhalt, der auch in der " actionPerformed" aktualisiert wird,
wohl vor der repaint() Anweisung kommt. Und das, obwohl ich ja die Anweisung danach stehen habe...

kann ich das mit ner Verzögerung machen???
 

Wildcard

Top Contributor
stetabar hat gesagt.:
hab jetzt gerade was rausgefunden.
also die reihenfolge muss so sein, da ich die Komponenten als "super" zeichne...
damit haben die wohl ne andere Stellung.

hab zwar keine Ahnung was du meinst, aber versuch dann mal folgendes:


Code:
public void actionPerformed(ActionEvent e) { 
        
      Daten d = new Daten(); 
      directAktVar = d.getDirect(); 
      switch (directVar){ 
      case 1: 
         Akt = new ImageIcon("1.gif"); 
         repaint(); 
         break; 
      case 2: 
         Akt = new ImageIcon("2.gif"); 
         repaint(); 
         break; 
      } 

        
       SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                
                  this.tempAkt.setText(d.getTemp()); 
            }
        });
}
 

stetabar

Bekanntes Mitglied
id das ne inner class?
muss ich da dann auch nochmal alles deklarieren?

naja, was ich eben sagen wollte ist, dass ich in der actionPreformed Methode die Grafiken und der Textfield Inhalt neu gesetzt werden.

Code:
public void actionPerformed(ActionEvent e) { 
        
      Daten d = new Daten(); 
      directAktVar = d.getDirect(); 
      switch (directVar){ 
      case 1: 
         Akt = new ImageIcon("1.gif"); 
         repaint(); 
         break; 
      case 2: 
         Akt = new ImageIcon("2.gif"); 
         repaint(); 
         break; 
      } 
      this.tempAkt.setText(d.getTemp()); 
        
}

wenn ich über nen Button nur den Inhalt des Textfields nach dem repaint() änder, ist es ok...

Code:
public void actionPerformed(ActionEvent e) {
		
		if (e.getSource() instanceof JButton){
			this.tempAkt.setText("Test");
		}
}

also Zeitablauf:

1. automatisches Update mit repaint()
grafiken werden angezeigt, aber textfield inhalte nur nach draufklicken!
2. button drücken
das textfield ist mit dem inhalt "test" sichtbar

jetzt die frage, da das problem ja anscheinend daran liegt, dass diese aktualisierung der textfields nicht erst ausgeführt werden nachdem die repaint() (bzw der seitenaufbau) fertig ist, sondern fast zeitgleich...
sonst würde der buttontest ja auch nichts zeigen...
 

Wildcard

Top Contributor
Ich bin immernoch der meinung dass das bei dir falschrum ist, aber mit invokeLater kannst du eine Verzögerung
einbauen. Vieleicht gehts dann.
stetabar hat gesagt.:
id das ne inner class?
muss ich da dann auch nochmal alles deklarieren?
Ja, ist ne inner class
tempAkt ist ja eh eine Klassenvariable, müsste also reichen wenn du 'd' final machst.
 

stetabar

Bekanntes Mitglied
das mit dem final hab ich jetzt nicht ganz verstanden.
muss ich in der deklaration die variable final machen?

was bedeutet final? *schäm* :oops:
 
R

Roar

Gast
kurze zwischenfrage: wieso ist deine zeichnung eigentlich auf der gleichen compnent wie die swing komponenten?
 

Wildcard

Top Contributor
Code:
public void actionPerformed(ActionEvent e) { 
        
      final Daten d = new Daten(); 
      directAktVar = d.getDirect(); 
      switch (directVar){ 
      case 1: 
         Akt = new ImageIcon("1.gif"); 
         repaint(); 
         break; 
      case 2: 
         Akt = new ImageIcon("2.gif"); 
         repaint(); 
         break; 
      } 

        
       SwingUtilities.invokeLater(new Runnable() 
        { 
            public void run() 
            { 
                
                  this.tempAkt.setText(d.getTemp()); 
            } 
        }); 
}
final macht d unveränderlich. probiers mal aus, und sag mir was passiert.
 

stetabar

Bekanntes Mitglied
also er gibt keinen fehler mehr, wegen der Variablen, die aus der anderen classe geholt werden.
aber er bekommt keinen zugriff auf die Textfelder...

Code:
cannot resolve symbol
symbol: variable airAkt 
                                this.tempAkt.setText(d.getTemp());

dafür auch noch ne idee?
 

Wildcard

Top Contributor
Code:
cannot resolve symbol 
symbol: variable airAkt 
                                this.tempAkt.setText(d.getTemp());
Wo ist den der Fehler? in dem code seh ich kein airAkt?
 

stetabar

Bekanntes Mitglied
ah, sorry, hab den falschen fehler per C&P genommen... ;)
denk dir für das "airAkt" "tempAkt"!
hatte eben zu viel kopiert und falsch gelöscht.
sorry
 

stetabar

Bekanntes Mitglied
jetzt hab ich was neues gelernt :### , aber das problem leider nicht lösen können... :(

letzte Möglichkeit, die ich noch sehe ist, dass ich mit 2 Timern arbeite und einer Zeitversetzt diese Textfelderinhalte schreibt...
 

stetabar

Bekanntes Mitglied
das Problem ließ sich ganz einfach durch transparente Gifs lösen!
die Stellen, wo TextFields waren, habe ich ausgeschnitten und es lief...
danke an Wildcard für die Hilfe!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
S Bilder/Grafiken (zb: ".jpg") gestaucht zu Anzeige bringen Allgemeine Java-Themen 4
E Grafiken auf dem JFrame Allgemeine Java-Themen 5
K 3D-Grafik JOGL Grafiken in 3DS Max importieren Allgemeine Java-Themen 10
F Mustererkennung in Grafiken Allgemeine Java-Themen 3
C Grafiken für Buttons Allgemeine Java-Themen 6
A SuperMario Grafiken Allgemeine Java-Themen 3
S Optimierung vom Laden von Grafiken Allgemeine Java-Themen 4
G mehrer grafiken mit delay daziwschen anzeigen Allgemeine Java-Themen 5
R Grafiken. direkt zeichnen Allgemeine Java-Themen 5
R Was nehmen für Flußdiagramme und Druck von großen Grafiken Allgemeine Java-Themen 4
F Grafiken in Textfeldern Allgemeine Java-Themen 3
M Suche Liste die Text und Grafiken unterstützt Allgemeine Java-Themen 18
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
T ImageIcon und JLabel Allgemeine Java-Themen 16
G inputstream() to imageicon() Allgemeine Java-Themen 7
C JCombobox ImageIcon & Text Allgemeine Java-Themen 2
EagleEye bild aus dem internet laden oder imageicon speichern Allgemeine Java-Themen 5
berserkerdq2 Was heißt es mit FXML Listener zu setzen ind Buttons zu erstellen? Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
Y Bild in JPanel setzen Allgemeine Java-Themen 2
C javax.mail.Message message.setreplyto() null setzen (keine replyto Adresse) Allgemeine Java-Themen 25
JavaNewbie2.0 Anführungszeichen setzen Allgemeine Java-Themen 3
OnDemand FTP4J Rechte setzen Allgemeine Java-Themen 1
J Mausposition setzen Allgemeine Java-Themen 2
I Setzen und Lesen eines Objektes (Enum?) Allgemeine Java-Themen 10
N event_scheduler richtig setzen? Allgemeine Java-Themen 1
O log4j pfad per umgebungsvariable setzen Allgemeine Java-Themen 5
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
G JDK setzen Allgemeine Java-Themen 4
H java.util.logging Formatter Optionen setzen Allgemeine Java-Themen 2
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
C Datentypen int in bytes zerlegen und wieder zusammen setzen Allgemeine Java-Themen 13
M Session-Parameter setzen? Allgemeine Java-Themen 10
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
I %AppData% Variable für einen Prozess setzen Allgemeine Java-Themen 23
N java.util.Date - Zeit auf 00:00 setzen Allgemeine Java-Themen 3
T HTTP Skript für Passwortgeschützte Seite :: Häkchen setzen und Download Allgemeine Java-Themen 4
L Variablen Systemvariablen setzen Allgemeine Java-Themen 3
G JNDI Context setzen Allgemeine Java-Themen 3
S "Working Directory" setzen..? Allgemeine Java-Themen 3
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
V Priorität der Event-Handlings setzen Allgemeine Java-Themen 4
N Timeout setzen Allgemeine Java-Themen 10
P Einzelne Bits in einem Byte-Array setzen Allgemeine Java-Themen 2
X JTable mit Checkboxen -> Setzen (true/false) der Checkboxen per Mouseklick... Allgemeine Java-Themen 3
S String intelligent zusammen setzen Allgemeine Java-Themen 8
A Umgebungsvariable unter Windows Vista setzen Allgemeine Java-Themen 60
N ranges setzen Allgemeine Java-Themen 5
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
Y beliebige Dateigröße setzen Allgemeine Java-Themen 10
G Proxy- Server setzen Allgemeine Java-Themen 2
thE_29 Rechnungen (Sättigung setzen) verschnellern Allgemeine Java-Themen 13
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
M Focus setzen - Frage zu FAQ Artikel Allgemeine Java-Themen 6
reibi Priorität setzen bei Thread Allgemeine Java-Themen 11
0 Taste setzen Allgemeine Java-Themen 2
B Listener dynamisch setzen Allgemeine Java-Themen 6
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
P Datum in einer DateComboBox setzen Allgemeine Java-Themen 7
MQue Datum in ComboBox setzen Allgemeine Java-Themen 9
0 Timeout für Thread setzen? Allgemeine Java-Themen 2
MQue Objektvariablen setzen Allgemeine Java-Themen 3
MQue Button Attribute setzen Allgemeine Java-Themen 14
L datum nach dem kopiervorgang neu setzen? Allgemeine Java-Themen 2
P JNI_CreateVM und -Xms –Xmx setzen Allgemeine Java-Themen 10
R Array komplett auf null setzen Allgemeine Java-Themen 10
B Choice setzen Allgemeine Java-Themen 5
O Environment Variable Setzen Allgemeine Java-Themen 2
O Schreibrechte setzen? Allgemeine Java-Themen 4
TheJavaKid Focus für KeyListener setzen Allgemeine Java-Themen 5
D Position des Mauszeigers setzen! Allgemeine Java-Themen 3
S Odnericon neu setzen/auslesen etc. Allgemeine Java-Themen 2
G Konsoleneingabe: vordefinierte werte setzen? geht das? Allgemeine Java-Themen 4
foobar java.library.path Property setzen Allgemeine Java-Themen 5
Z Parallel Port, setzen der einzelnen Pins Allgemeine Java-Themen 4
C Setzen der Cursorposition Allgemeine Java-Themen 2
G Standard-Drucker mit Java setzen Allgemeine Java-Themen 4
T Classpath per Java Programm setzen Allgemeine Java-Themen 9
D jdic classpath setzen Allgemeine Java-Themen 2
S File Encoding im Programm setzen? Allgemeine Java-Themen 3
clemson Umgebungsvariable setzen und lesen Allgemeine Java-Themen 9
F Verfügbaren Heap-Speicher setzen Allgemeine Java-Themen 2
M Content-Type setzen und auslesen? Allgemeine Java-Themen 2
C Objekte null setzen? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben