Zeichen ohne paint-Methode

steffen_T

Neues Mitglied
Hallo zusammen,
zurzeit bin ich gerade am Java lernen. Leider komme ich beim Zeichnen nicht mehr weiter. Ich habe versucht ein Programm zu schreiben, um das Zeichnen und das Thema über MouseListener zu üben. Beim Drücken der linken Maustaste lächelt das Gesicht, bei der rechten sieht es grimmig aus. Bei einem Doppelklick bekommt das Smiley zusätlich eine Brille aufgestzt. Ausserdem habe ich in diesem Programm versucht, das Double-Buffering zu implementieren, um dieses zu üben.

Code:
package Event_Animation;

import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Mouse_Test extends Frame {

    Image im = null;
    Graphics g = null;
    static Mouse_Test wnd = null;

    public static void main(String[] args) {

        wnd = new Mouse_Test();
        wnd.setSize(300, 200);
        //Mittelpunkt des Bildschirms bestimmen
        int width = (int) wnd.getToolkit().getScreenSize().getWidth() / 2;
        int height = (int) wnd.getToolkit().getScreenSize().getHeight() / 2;
        wnd.setLocation(width, height);
        wnd.setVisible(true);

    }

    Mouse_Test() {
        super("Mausklicks");
        addWindowListener(new WindowClosingAdapter());
        addMouseListener(new MyMouseListener());
    }

    public class MyMouseListener extends MouseAdapter {

        int cnt = 0;

        @Override
        public void mousePressed(MouseEvent event) {
            //Duouble-Buffer initalisieren
            if (im == null || g == null) {
                //Das Fensterobjekt beschafft sich durch Aufruf von createImage ein                       //Offscreen-Image und
                //speichert es in einer Instanzvariable "im"
                im = wnd.createImage(300, 200);
               
                //Durch Aufruf von getGraphics wird ein Grafikkontext zu diesem Image beschafft.
                g = im.getGraphics();
            }
           
            int x = event.getX();
            int y = event.getY();
            // Alle Bildschirmausgaben gehen zunächst auf den Offscreen-Grafikkontext
            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{
                    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);
            }
            //Wenn alle Ausgabeoperationen abgeschlossen sind, wird das Offscreen-Image mit
            //drawImage in das Ausgabefenster kopiert.
            g.drawImage(im, 0, 0, wnd);
        }

    }

}
 

Blender3D

Top Contributor
Code:
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Mouse_Test extends Frame {
   static Mouse_Test wnd = null;
   // private Point mousePos = null; // Position des letzten Mouseclicks
   // private int mouseClickCnt = 0; // Anzahl Clicks
   private int cnt = 0; // Anzahl der gezeichneten Smilies
   // private boolean mouseMeta = false; // meta
   private Graphics gImg;
   private Image img;

   public static void main(String[] args) {
       wnd = new Mouse_Test();
       wnd.setSize(300, 200);
       // Mittelpunkt des Bildschirms bestimmen
       int width = (int) wnd.getToolkit().getScreenSize().getWidth() / 2;
       int height = (int) wnd.getToolkit().getScreenSize().getHeight() / 2;
       wnd.setLocation(width, height);
       wnd.setVisible(true);
   }

   Mouse_Test() {
       super("Mausklicks");
       addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent event) {
               event.getWindow().setVisible(false);
               event.getWindow().dispose();
               System.exit(0);
           }
       });
       addMouseListener(new MyMouseListener());
   }

   /**
    * Zeichenoperationen hier
    */
   @Override
   public void paint(Graphics g) {
       super.paint(g);
       if (img != null)
           g.drawImage(img, 0, 0, this);
   }

   private void renderImage(Point mousePos, int mouseClickCnt, boolean mouseMeta) {
       if (img == null || gImg == null) {
           // Das Fensterobjekt beschafft sich durch Aufruf von createImage ein
           // //Offscreen-Image und
           // speichert es in einer Instanzvariable "img"
           img = wnd.createImage(300, 200);

           // Durch Aufruf von getGraphics wird ein Grafikkontext zu diesem
           // Image beschafft.
           gImg = img.getGraphics();
       }
       if (mouseClickCnt > 0) {
           ++cnt;
           // Kopf und Augen
           gImg.drawOval(mousePos.x - 10, mousePos.y - 10, 20, 20);
           gImg.fillRect(mousePos.x - 6, mousePos.y - 5, 4, 5);
           gImg.fillRect(mousePos.x + 3, mousePos.y - 5, 4, 5);
           // Mund
           if (mouseMeta) {// grimmig
               gImg.drawLine(mousePos.x - 5, mousePos.y + 7, mousePos.x + 5, mousePos.y + 7);
           } else {
               gImg.drawArc(mousePos.x - 7, mousePos.y - 7, 14, 14, 225, 100);
           }
           // zähler
           gImg.drawString(" " + cnt, mousePos.x + 10, mousePos.y - 10);
       }
       if (mouseClickCnt == 2) { // brille
           gImg.drawLine(mousePos.x - 9, mousePos.y - 3, mousePos.x + 9, mousePos.y - 3);
       }
   }

   public class MyMouseListener extends MouseAdapter {
       @Override
       public void mousePressed(MouseEvent event) {
           // hier werden die Mausdaten nach dem Klick  erfasst
           renderImage(new Point(event.getX(), event.getY()),event.getClickCount(), event.isMetaDown());
           repaint(); // ruft die Methode paint auf dort wird gezeichnet
       }
   }
}
Das Image sollte in der Methode paint() des Frame, die man überläd gezeichnet werden. Im MouseAdapter erfasst Du die notwendigen Daten zeichnest das Image und triggerst die Methode repaint(). Wichtig niemals die Methode paint() direkt aufrufen. Das erledigt das Framework. Der Aufruf von repaint() sagt diesem das der Frame neu gezeichnet werden soll. Das Framework ruft dann zum richtigen Zeitpunkt die Methode paint() selbst auf.
:)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R 2D-Grafik auf JPanel zeichen - ohne @Override paintComponent AWT, Swing, JavaFX & SWT 6
N Tastatur Zeichen einlesen ohne sichtbares Fenster AWT, Swing, JavaFX & SWT 8
N €-Zeichen wird nicht akzeptiert AWT, Swing, JavaFX & SWT 4
_user_q Gibt es eine Möglichkeit, in Java alle möglichen Zeichen automatisch tippen zu lassen? AWT, Swing, JavaFX & SWT 13
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
F AWT awt KeyEvent - Zeichen direkt nach Eingabe löschen AWT, Swing, JavaFX & SWT 2
L Swing Tastatur zeichen AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
I JOptionPane maximale Zeichen einstellen AWT, Swing, JavaFX & SWT 2
L JavaFX ASCII Zeichen /char von KeyEvent erhalten AWT, Swing, JavaFX & SWT 5
C Zeichen eines 6 -Eckes AWT, Swing, JavaFX & SWT 1
C JavaFX Tiefgestellte Zeichen in fxml AWT, Swing, JavaFX & SWT 2
B EventHandler für durch Tastenkombination erzeugte Zeichen AWT, Swing, JavaFX & SWT 3
L Ausgabe in JEditorPane mittels HTMLEditorKit zeigt auf bestimmten Systemen falsche Zeichen AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
A Zeichen-Steuerelement in Swing AWT, Swing, JavaFX & SWT 0
kaoZ Swing Aktives Zeichen für Spieleprogrammierung ? AWT, Swing, JavaFX & SWT 8
D Swing Manuellen Kreis zeichen AWT, Swing, JavaFX & SWT 22
U Label zeigt nicht überall HTML Zeichen AWT, Swing, JavaFX & SWT 3
R einzelne Zeichen in jTable einlesen AWT, Swing, JavaFX & SWT 10
S SWT [TextBox] Bestimmtes Zeichen entfernen unterbinden AWT, Swing, JavaFX & SWT 3
P readLine solange es mit einem bestimmten Zeichen anfängt AWT, Swing, JavaFX & SWT 5
P Komische Zeichen beim Abspeichern von TextFelder AWT, Swing, JavaFX & SWT 2
Jats Zeichen auf mehrere JPanels AWT, Swing, JavaFX & SWT 7
P 2D-Grafik versch. Rectangles aus array von textfelder zeichen AWT, Swing, JavaFX & SWT 6
DEvent Swing JTextField Anzahl an sichtbaren Zeichen AWT, Swing, JavaFX & SWT 4
D JLabel und JPanel -> Neu zeichen?! oO AWT, Swing, JavaFX & SWT 2
E jTextFiled max 160 Zeichen? AWT, Swing, JavaFX & SWT 4
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
A Rechteck zeichen AWT, Swing, JavaFX & SWT 4
Q AWT Choice ein Zeichen hinzufügen AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Textbasiertes 2D Spiel, jedes Zeichen manipulierbar AWT, Swing, JavaFX & SWT 7
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
T Zeichen/char in Bild umwandeln und darstellen AWT, Swing, JavaFX & SWT 10
2 Bücher über Zeichen und Baumalgorithmen AWT, Swing, JavaFX & SWT 5
T Zeichen zählen JTextPane AWT, Swing, JavaFX & SWT 4
F Zeichen per Menuitem funktioniert nicht AWT, Swing, JavaFX & SWT 2
V Nur zulässige Zeichen in JTable-Zellen eintragen können AWT, Swing, JavaFX & SWT 2
P Swing Probleme beim Zeichen AWT, Swing, JavaFX & SWT 6
aze JTextfield nur so breit dass alle zeichen sichtbar sind AWT, Swing, JavaFX & SWT 2
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
P Zeichen abhängig davon, ob sich eine Variable geändert hat AWT, Swing, JavaFX & SWT 2
G Blinkenden Punkt zeichen AWT, Swing, JavaFX & SWT 2
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
J JTextPane mit genau 80 Zeichen breite definieren? AWT, Swing, JavaFX & SWT 3
J jTextarea Anzahl Zeichen in einer Zeile begrenzen AWT, Swing, JavaFX & SWT 2
Lazybone CMYK Zeichen AWT, Swing, JavaFX & SWT 12
H Polyline zeichen, aber wie? AWT, Swing, JavaFX & SWT 2
D jTable ausdrucken => € zeichen wird nicht richtig angezei AWT, Swing, JavaFX & SWT 7
H Problem beim zeichen eines TimeSeriesChart mit jfreechart AWT, Swing, JavaFX & SWT 5
K UNICODE ZEICHEN in den SWing-GUIs AWT, Swing, JavaFX & SWT 4
B Dreiecke zeichen AWT, Swing, JavaFX & SWT 3
D Zeichen ein Pixel mit Java2D AWT, Swing, JavaFX & SWT 15
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
F Zeichen von Linien, Rechtecken, zb wie in paint AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
C PI-Zeichen im JLabel AWT, Swing, JavaFX & SWT 3
G Zeilenumbruch nach n Zeichen in JTextArea AWT, Swing, JavaFX & SWT 24
U kleiner-Zeichen JEditorPanel (war: JOptionPane) AWT, Swing, JavaFX & SWT 5
T JLayerdPane: wie etwas über eine AWT Komponente zeichen? AWT, Swing, JavaFX & SWT 2
D JTextPane: "Nichtdruckbare Zeichen" anzeigen & AWT, Swing, JavaFX & SWT 4
R letztes Zeichen aus textfeld auslesen AWT, Swing, JavaFX & SWT 2
M rendern von zeichen AWT, Swing, JavaFX & SWT 4
R Zeichen-Markierungrahmen AWT, Swing, JavaFX & SWT 5
F Eingabe in JPasswordField auf vier Zeichen beschränken AWT, Swing, JavaFX & SWT 3
M Transparentes gif als extra Klasse auf einen JFrame zeichen AWT, Swing, JavaFX & SWT 17
B ComboBox: nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 5
G Linien in ein Koordinatensystem zeichen AWT, Swing, JavaFX & SWT 7
H funktionen in ein koordinatensystem zeichen AWT, Swing, JavaFX & SWT 5
B Erstes Zeichen in einem String toUpperCase ??? AWT, Swing, JavaFX & SWT 4
bummerland ein zeichen nach einem zeilenumbruch einfügen AWT, Swing, JavaFX & SWT 4
Juelin starten maven javafx programm ohne netbeans AWT, Swing, JavaFX & SWT 38
M KeyEvent ohne Fokus konsumieren AWT, Swing, JavaFX & SWT 1
Georges456 NetBeans am Mac leider ohne FXML AWT, Swing, JavaFX & SWT 17
A JOptionPane OK ohne Eingabe abfangen AWT, Swing, JavaFX & SWT 10
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
N setOnKeyPressed ohne Scene AWT, Swing, JavaFX & SWT 2
M mvvm umsetzen ohne fxml AWT, Swing, JavaFX & SWT 0
L JavaFX OpenJFX16 App ohne Gradle and Maven? AWT, Swing, JavaFX & SWT 2
izoards Jar startet jedoch ohne Hintergrundfunktion AWT, Swing, JavaFX & SWT 25
L FX-Projekt: fast leere Fensterausgabe ohne Fehlermeldung AWT, Swing, JavaFX & SWT 6
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
Fiedlerdan Vergleich vieler Strings ohne ellenlange Argumentierten AWT, Swing, JavaFX & SWT 7
L Daten bearbeiten ohne GUI zu blockieren - daten haltung/zurück geben AWT, Swing, JavaFX & SWT 15
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
K JFreeChart nicht ohne BarChartDemo startklar? AWT, Swing, JavaFX & SWT 5
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
K KeyListener ohne JFrame AWT, Swing, JavaFX & SWT 9
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
M Menü ohne Menübar umsetzen[SWT] AWT, Swing, JavaFX & SWT 8
kilopack15 Buttons ohne Funktion AWT, Swing, JavaFX & SWT 2
S 2D-Grafik User-BufferedImage rotieren im Zentrum und ohne "anpassung" AWT, Swing, JavaFX & SWT 2
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
C Jframe ohne Rahmen AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben