![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
Hi@all, hab folgendes Problem: nachdem ein Button gedrückt wird soll ein Grafikcontainer, welcher über eine externe Klasse augerufen wird, auf ein "Panel p" dargestellt werden. Dummerweise funktioniert das nur wenn es vom Start des Progs. an Angezeigt wird, nicht aber aus dem Eventhaendler heraus. Warum? Wo liegt mein Denkfehler? P.S. Code fehlerfrei Compiliert und ich bin nen Noob, also versucht es mir so leicht wie moeglich zu erklären. Hier der Code: //Bilder.java created by Treter_Peter for Suse Linux 9.2 import java.awt.*; import java.awt.event.*; public class Bilder extends Frame implements ActionListener{ public static void main(String args[]){ Bilder b = new Bilder(); b.show(); } Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); Button b, be; Panel p; //Im Prinzip ein Fenster im Fenster sollte im zusammenhang mit paint() genutzt werden Label l; public Bilder(){ setTitle("Bild laden und Anzeigen"); setBackground(Color.lightGray); setSize(660,400); //Breite,Hoehe setLocation((dim.width - getSize().width)/2,(dim.height - getSize().height)/2); setLayout(null); //-------------------------------------------------------------------------------------- addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent ev){ System.exit(0); } }); //-------------------------------------------------------------------------------------- p = new Panel(); p.setBackground(Color.red); p.setBounds(10,30,640,320); p.setLayout(new GridLayout(1,1)); //p.add(new Bildcontainer(this,"fbi.jpg")); //Hier funktionierts aber add(p); b = new Button("OK"); b.setBounds(10,360,100,30); b.addActionListener(this); add(b); be = new Button("Beenden"); be.setBounds(120,360,100,30); be.addActionListener(this); add(be); l = new Label(""); l.setBounds(230,360,100,30); add(l); } public void actionPerformed(ActionEvent ev){ if(ev.getActionCommand().equals("OK")){ p.add(new Bildcontainer(this,"fbi.jpg")); //Warum funktioniert das nicht? }else{ System.exit(0); } } } class Bildcontainer extends Canvas{ Image bild; Bilder bi; int Posx, Posy; Bildcontainer(Bilder z,String Dateiname){ bi = z; bild = getToolkit().getImage(Dateiname); MediaTracker mt = new MediaTracker(this); //Wichtig, damit Bild(er) erst vollst. geladen werden mt.addImage(bild, 0); //befor es weitergeht try{ mt.waitForAll(); } catch(InterruptedException IE){ System.out.println("Fehler im mt"); } Positions(); } void Positions(){ int Panelx = bi.p.getWidth(); int Panely = bi.p.getHeight(); int Bildx = bild.getWidth(this); int Bildy = bild.getHeight(this); Posx = (Panelx-Bildx)/2; Posy = (Panely-Bildy)/2; if(Posx <= 0 || Posy <= 0){ Posx = 0; Posy = 0; System.out.println("<=0"); } repaint(); } public void update(Graphics g){paint(g);} public void paint(Graphics g){ if(bild != null){ g.drawImage(bild,Posx,Posy,this); } } } |
|
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
Hi Also als erstes: Bitte benutze den "Code"-Tag um Quelltext zu posten. Das sieht dann viel leserlicher aus: Java Code:
Zu deinem Problem: Da du etwas zum panel hinzufügen willst, nach dem du es (bzw. das ganze fenster) sichtbar gemacht hast, musst du es validieren (dem layoutmanager mitteilen, dass du was nach dem sichtbarmachen hinzugefügt hast) und neu zeichnen (repaint). Probier mal folgendes: Java Code:
|
|
| | Nach oben #3 |
| Gast
Beiträge: n/a
|
Hi@all, ich Danke dir erstmal, hat das Problem so weit gelöst. Hab aber gemerkt das mein Aufruf ziemlich blöd ist, weil er ja nicht mit jeden Tastendruck nen neuen Bildcontainer anlegen soll, sondern den alten ersetzten. Aber da ich das Problem erkannt habe, finde ich hoffentlich auch die Lösung. Mfg und Danke nochmal Treter_Peter |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zugriff auf Konfiguration im verschachtelten Array | Ben | PHP-Programmierung | 5 | 02.02.2007 12:47 |
| Vokabeltrainer | asenodin | Allgemeine Java-Programmierung | 9 | 28.05.2006 21:04 |
| Line2D.Double-Objekt auf Panel zeichnen - kein Graphics-Objekt vorhanden :-/ | Ben | Desktop-Applikationen und Grafik | 10 | 02.03.2006 15:34 |
| Referenc auf das oberste Panel eines CardLayouts bekommen | Arvodan | Desktop-Applikationen und Grafik | 1 | 20.01.2006 08:39 |
| dynamischer Zugriff auf statische Eigenschaft einer Klasse | Ben | PHP-Programmierung | 10 | 15.11.2005 15:53 |