0% fanden dieses Dokument nützlich (0 Abstimmungen)
24 Ansichten5 Seiten

Malprogramm in Java

Das Dokument beschreibt die Implementierung eines Malprogramms in Java. Es werden Klassen und Methoden für die Erstellung eines Fensters mit Schaltflächen für Farbauswahl und Radiergummi definiert. Beim Bewegen der Maus im Fenster können Linien gezeichnet werden. Die Position der Maus wird laufend abgefragt.

Hochgeladen von

Martin Büchner
Copyright
© Attribution Non-Commercial (BY-NC)
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als RTF, PDF, TXT herunterladen oder online auf Scribd lesen
0% fanden dieses Dokument nützlich (0 Abstimmungen)
24 Ansichten5 Seiten

Malprogramm in Java

Das Dokument beschreibt die Implementierung eines Malprogramms in Java. Es werden Klassen und Methoden für die Erstellung eines Fensters mit Schaltflächen für Farbauswahl und Radiergummi definiert. Beim Bewegen der Maus im Fenster können Linien gezeichnet werden. Die Position der Maus wird laufend abgefragt.

Hochgeladen von

Martin Büchner
Copyright
© Attribution Non-Commercial (BY-NC)
Wir nehmen die Rechte an Inhalten ernst. Wenn Sie vermuten, dass dies Ihr Inhalt ist, beanspruchen Sie ihn hier.
Verfügbare Formate
Als RTF, PDF, TXT herunterladen oder online auf Scribd lesen

// awt Packages werden implementiert import [Link].*; import [Link].

*; //Klassenname und Vererbungen werden implementiert public class Malprogramm extends Frame implements Runnable, MouseMotionListener, ActionListener, WindowListener { // Die main-Methode ruft den Konstruktur Malprogramm() auf, setzt Fenstertitel, Gre und macht es sichtbar. public static void main (String args[]) { Malprogramm m = new Malprogramm(); //Anhand des Konstruktors wird ein Objekt der Klassenmethode erstellt [Link](); // Objekt starten [Link] ("Malprogramm"); // Fenstertitel [Link] (600, 600); //Fenstergre [Link](); // anzeigen } // Konstruktor public Malprogramm () { // GUI wird erstellt fensterleiste = new MenuBar(); // Schaltflchenleiste anzeigen datei = new Menu ("Datei"); // Tab "Datei" neu = new MenuItem ("Neu"); // "Datei" -> "Neu" anzeigen schlieen = new MenuItem ("Schlieen"); // Datei -> "Fenster schlieen" anzeigen farben = new Menu ("Farbe & Radieren"); // Tab "Farbe & Radieren" anziegen radiergummi = new MenuItem ("Radiergummi"); // "Farbe & Radieren" -> "Radiergummi" rot = new MenuItem ("Rot"); // "Farbe & Radieren" -> "Rot" gruen = new MenuItem ("Grn"); // "Farbe & Radieren" -> "Grn" blau = new MenuItem ("Blau"); // "Farbe & Radieren" -> "Blau" cyan = new MenuItem ("Cyan"); // "Farbe & Radieren" -> "Cyan" magenta = new MenuItem ("Magenta"); // "Farbe & Radieren" -> "Magenta" schwarz = new MenuItem ("Schwarz"); // "Farbe & Radieren" -> "Schwarz" gelb = new MenuItem ("Gelb"); // "Farbe & Radieren" -> "Gelb" //Schaltflchen werden dem GUI hinzugefgt [Link] (fensterleiste); [Link] (datei); [Link] (neu); [Link] (schlieen); [Link] (farben); [Link] (rot); [Link] (gruen); [Link] (blau); [Link] (gelb); [Link] (cyan); [Link] (magenta); [Link] (schwarz); [Link] (radiergummi); // Events erstellen, die beim Mausklick auf eine Schaltflche aktiviert werden [Link] (this); [Link] (this); [Link] (this);

[Link] (this); [Link] (this); [Link] (this); [Link] (this); [Link] (this); [Link] (this); [Link] (this); [Link] (this); [Link] (this); // Basisvariablen werden vor Programmstart "nullgesetzt" xidneu = 0; yidneu = 0; xidalt = 0; yidalt = 0; ammalen = false; farbe = [Link]; } // GUI-Variablen private MenuBar fensterleiste; private Menu datei; private MenuItem neu; private MenuItem schlieen; private private private private private private private private private private Menu farben; MenuItem rot; MenuItem gruen; MenuItem blau; MenuItem gelb; MenuItem cyan; MenuItem magenta; MenuItem radiergummi; MenuItem schwarz; MenuItem wei;

private Thread malen; // Thread, der das Malen steuert private Image buffer; // Buffer, der sich um die Speicherung des Gemalten kmmert private Graphics bg; // Grafik des Buffers // Zustandsvariablen private int xidneu, yidneu; // Beim Malen die neuen Koordinaten - "Linienende" private int xidalt, yidalt; // Beim Malen die alten Koordinaten "Linienbeginn" private boolean ammalen; // Maustaste gedrckt? private Color farbe; // Momentan ausgewhlte Farbe // Ab hier folgen alle Methoden // Parallelablaufender malen-Thread wird erstellt und gestartet public void start() { malen = new Thread (this);

[Link]();

// in run() wird der malen-Thread um 1ms mit einer try-catch-Anweisung verzgert und neugezeichnet public void run() { while (true) { try { [Link] (1); // Verzgerung des Eingabegertes von 1ms } catch (InterruptedException e) {} repaint(); } } // Vorinitialisierung des Zeichnens durch update() public void update (Graphics g) { // Buffer bei Bedarf erzeugen if (buffer == null) { // Wenn noch kein buffer besteht, dann erstellen und bg erzeugen buffer = createImage (600, 600); bg = [Link](); //bg = buffered Graphics, buffer speichert alles und erstellt immer wieder } // Auf den Buffer zeichnen paint (bg); //Aufruf von paint-Methode, auf buffered Graphics wird gemalt // Den Buffer einblenden [Link] (buffer, 0, 0, this); // nun wird auf g gezeichnet } //paint wird in update() aufgerufen und agiert nun mit folgendem Code public void paint (Graphics g) { if (ammalen) { //ammalen wird auf true gesetzt bei paint() [Link] (farbe); // Festlegung der Farbe // Es folgt nun das Linienmalen an verschiedenen Koordinaten relativ zur Mausposition [Link] (xidalt, yidalt, xidneu, yidneu); [Link] (xidalt + 2, yidalt, xidneu + 2, yidneu); [Link] (xidalt, yidalt + 2, xidneu, yidneu + 2); [Link] (xidalt + 2, yidalt + 2, xidneu + 2, yidneu + 2); [Link] (xidalt + 1, yidalt, xidneu + 1, yidneu); [Link] (xidalt, yidalt + 1, xidneu, yidneu + 1); [Link] (xidalt + 1, yidalt + 1, xidneu + 1, yidneu + 1); [Link] (xidalt + 3, yidalt, xidneu + 3, yidneu); [Link] (xidalt, yidalt + 3, xidneu, yidneu + 3); [Link] (xidalt + 3, yidalt + 3, xidneu + 3, yidneu + 3); [Link] (xidalt - 1, yidalt, xidneu - 1, yidneu); [Link] (xidalt, yidalt - 1, xidneu, yidneu - 1); [Link] (xidalt - 1, yidalt - 1, xidneu - 1, yidneu - 1); [Link] (xidalt - 3, yidalt, xidneu - 3, yidneu); [Link] (xidalt, yidalt - 3, xidneu, yidneu - 3); [Link] (xidalt - 3, yidalt - 3, xidneu - 3, yidneu - 3); [Link] (xidalt - 2, yidalt, xidneu - 2, yidneu); [Link] (xidalt, yidalt - 2, xidneu, yidneu - 2);

[Link] (xidalt - 2, yidalt - 2, xidneu - 2, yidneu - 2); } }

// MouseMotionListener wurde anfangs implementiert und folgende Methode sind fr die Interaktion notwendig // wird die Maus bewegt, dann mouseMoved (agiert auf das Event MouseEvent e) public void mouseMoved (MouseEvent e) { ammalen = false; // Wenn die Maus sich nur bewegt, aber nicht gedrckt wird -> ammalen = false // Ersten X- und Y-Wert setzen xidalt = [Link](); // X-Koordinate fr den Start des Linienzeichnens yidalt = [Link](); // Y-Koordinate fr den Start des Linienzeichnens } // wird die Maus gedrckt, dann MouseDragged (agiert auch auf das Event MouseEvent e) public void mouseDragged (MouseEvent e) { if (ammalen == true) { /*Beim Bewegen der Maus werden die Variablen immer wieder neu deklariert und liefern der paint-Methode laufend Koordinateninformationen */ xidalt = xidneu; //xidalt wird auf xidneu gesetzt, passiert beim "Linienzeichnen" laufend yidalt = yidneu; //yidalt wird auf yidneu gesetzt, passiert beim "Linienzeichnen" laufend } else { // Wenn die Maustaste nicht gedrckt ist, einfach wie sonst auch xidalt und yidalt festlegen xidalt = [Link](); //xidalt bekommt aktuellen X-Wert yidalt = [Link](); //yidalt bekommt aktuellen Y-Wert } ammalen = true; // Maus ist gedrckt -> ammalen = true // Neuen X- und Y-Wert setzen xidneu = [Link](); // X-Koordinate fr das "Ende" des Linienzeichnens yidneu = [Link](); // Y-Koordinate fr das "Ende" des Linienzeichnens } // Anfngliche ActionListener-Implementierung fr Reaktion auf das Klicken von Schaltflchen public void actionPerformed (ActionEvent e) { // String benutzereingabe erhlt immer das aktuellste Klicken einer Schaltflche String benutzereingabe = [Link](); if (benutzereingabe == "Neu") { //Beim Klicken der Schaltflche Neu [Link] ([Link]); //Hintergrund wei einfrben [Link] (0, 0, 600, 600); // buffered Graphics wieder auf normale Gre setzen } if (benutzereingabe == "Schlieen") { //Beim Klicken der Schaltflche Schlieen [Link](); // Fenster schlieen } if (benutzereingabe == "Rot") { // Beim Klicken der Schaltflche Rot farbe = [Link]; // Malfarbe ist ab jetzt rot }

if (benutzereingabe == "Grn") { // Beim Klicken der Schaltflche Grn farbe = [Link]; // Malfarbe ist ab jetzt grn } if (benutzereingabe == "Blau") { // Beim Klicken der Schaltflche Blau farbe = [Link]; // Malfarbe ist ab jetzt blau } if (benutzereingabe == "Gelb") { // Beim Klicken der Schaltflche Radiergummi farbe = [Link]; // Malfarbe ist ab jetzt wei zum Radieren } if (benutzereingabe == "Cyan") { // Beim Klicken der Schaltflche Cyan farbe = [Link]; // Malfarbe ist ab jetzt cyan } if (benutzereingabe == "Magenta") { // Beim Klicken der Schaltflche Magenta farbe = [Link]; // Malfarbe ist ab jetzt magenta } if (benutzereingabe == "Radiergummi") { // Beim Klicken der Schaltflche Radiergummi farbe = [Link]; // Malfarbe ist ab jetzt wei zum Radieren } if ([Link] ("Schwarz")) { // Beim Klicken der Schaltflche Schwarz farbe = [Link]; // Malfarbe ist ab jetzt schwarz } }

/* WindowListener-Implementierung (Es werden nicht bei allen Methoden Anweisugen bentigt, weil das Fenster auf bestimmte Zustnde nicht reagieren muss */ public void windowOpened (WindowEvent e) { // Anweisung nicht notwendig } public void windowActivated (WindowEvent e) { // Anweisung nicht notwendig } public void windowDeactivated (WindowEvent e) { // Anweisung nicht notwendig } public void windowIconified (WindowEvent e) { // Anweisung nicht notwendig } public void windowDeiconified (WindowEvent e) { // Anweisung nicht notwendig } public void windowClosing (WindowEvent e) { // Klick auf die X-Schaltflche des Fensters // Fenster schlieen [Link](); } public void windowClosed (WindowEvent e) { // Wenn das Fenster geschlossen ist // Programm beenden [Link] (0); } }

Das könnte Ihnen auch gefallen