Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Java » Fensterinhalte speichern

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.12.2002, 13:48 Uhr
e-Caf|Y|baB



Hallo,
ich habe ein Programm geschrieben, in dem ein Hauptfenster erstellt wird, dass mehrere Kindfenster enthält. Hierbei habe ich mit den Swing-Klassen gearbeitet. In einem dieser Kindfenster soll der Benutzer zeichnen können. Das funktioniert auch, nur habe ich das Problem, dass alles gezeichnete verschwindet, wenn ein anderes Fenster aktiviert wurde.
Also:
1. Wie kann ich realisieren, dass das Gezeichnete dableibt?
2. Außerdem möchte ich das Gezeichnete gerne in einer Variablen oder einer Datei abspeichern, könnt ihr mir helfen?

Mein Code des Kindfensters:

C++:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;    

class ZeichnenFenster extends JInternalFrame {
    
    
    public ZeichnenFenster(    String title, boolean resizable,
                            boolean closable, boolean maximizable,
                            boolean iconifiable) {

        super(title,resizable,closable,maximizable,iconifiable);

            this.setBackground(Color.lightGray);
           this.setLocation(0, 0);
            this.setSize(400, 400);
            this.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);

            this.setVisible(true);

        JPanel PZeichnen = new JPanel();
        JPanel PZeichnenMenu = new JPanel();

    // Panel PZeichnen einrichten:
        PZeichnen.setBorder(BorderFactory.createEtchedBorder());
        this.getContentPane().add(PZeichnen, BorderLayout.CENTER);
        PZeichnen.setBackground(Color.white);
        
        PZeichnen.addMouseListener(new MausLauscher());
        
        
    // Panel PZeichnenMenu einrichten:
        PZeichnenMenu.setBorder(BorderFactory.createEtchedBorder());
        this.getContentPane().add(PZeichnenMenu, BorderLayout.EAST);
        PZeichnenMenu.setBackground(Color.red);
            

    }
    
    
    class MausLauscher extends MouseAdapter {
            
        int cnt = 0;
    
        public void mousePressed(MouseEvent event) {
            
            
            Graphics g = getGraphics();
              int x = event.getX();
              int y = event.getY();
              
              x += 5;            
              y += 25;        
              
              if (event.getClickCount() == 1) { //Gesicht
                   ++cnt;
                //Kopf und Augen
                g.drawOval(x-10,y-10,20,20);
                g.fillRect(x-6,y-5,4,5);
                g.fillRect(x+3,y-5,4,5);
                //Mund
                if (event.isMetaDown()) { //grimmig
                       g.drawLine(x-5,y+7,x+5,y+7);
                } else {                  //lächeln
                       g.drawArc(x-7,y-7,14,14,225,100);
                }
                //Zähler
                g.drawString(""+cnt,x+10,y-10);
              } else if (event.getClickCount() == 2) { //Brille
                g.drawLine(x-9,y-3,x+9,y-3);
              }
        }
    }
            
    
    
}


Danke für jede Hilfe,
MfG e-Caf
--
There are 10 types of people - those who understand binary and those who
don't.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
09.12.2002, 12:55 Uhr
~0xdeadbeef
Gast


Die Klasse Zeichenfenster um die Methode


C++:
public void update(Graphics g) { paint(g); }



erweitern. Das hat den Erfolg, dass beim Aufruf der Update-Methode nicht der ganze Fensterinhalt neu gemalt wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.12.2002, 17:42 Uhr
e-Caf|Y|baB



Hallo 0xdeadbeef,
ich hab den Code eingefügt, aber es klappt nicht. Ich vermute das liegt daran, dass die Funktion auch gar nicht aufgerufen wird. Ich "update" mein Fenster nämlich nicht, sondern setze nur den Fokus (?) auf ein anderes Fenster und dann wieder auf dieses!
Hast du vielleicht eine Idee zu dem zweiten Punkt, gibt es sowas wie "scanscreen()", dass dann die Pixel (oder irgend eine Bilddatenstruktur) zurückgibt?
Tschüss, e-Caf
--
There are 10 types of people - those who understand binary and those who
don't.

Dieser Post wurde am 09.12.2002 um 17:43 Uhr von e-Caf|Y|baB editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.06.2004, 18:09 Uhr
typecast
aka loddab
(Operator)


Also erstens habe ich mal den unnötigen Post von test gelöscht.

Zweitens: Warum zeichnest du im Konsturktor? Dadurch wird die Sache nur ein einziges Mal bei der Erstellung des Objekts gezeichnet. Was du suchst ist die Methode paint().
Diese wird jedesmal aufgerufen, wenn sich das Objekt zeichnen soll.


Bearbeitung von typecast:
Ich habe gerade das was beefy gepostet hat gesehen. Das sollte eigentlich auch funtkionieren.

--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 08.06.2004 um 18:10 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Java ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: