Taste gedrückt = Grafik zeichen ?!?

Status
Nicht offen für weitere Antworten.

Rave

Bekanntes Mitglied
Hallo,
also ich habe ein Programm das mir wenn ich Taste x drücke ein kleinen Punkt zeichnen soll (ist jetzt nur ein Beispiel :bahnhof:)
Also einen Key Listener etc hab ich schon und der funktioniert auch ;)

Wie stell ich das an ?? Ich bekomme das imom nicht hin weil ihm die Graphics für die Methode "zeichnen", die er nach dem Tastendruck ausführen soll, fehlt !?

Ich hoffe das ist halbwegs gut erklärt :oops:
 

0x7F800000

Top Contributor
Rave hat gesagt.:
Wie stell ich das an ?? Ich bekomme das imom nicht hin weil ihm die Graphics für die Methode "zeichnen", die er nach dem Tastendruck ausführen soll, fehlt !?
Wem "ihm"? Ein KeyListener ist doch niemals für's zeichnen verantwortlich. Der keyListener reagiert lediglich auf Tastendrücke, und ändert dann irgendwas am Zustand des Models. Je nach dem, ob das programm eher passiv oder aktiv abläuft, informiert dann das Model die ganzen Views, oder die Views werden von einem dauernd rennenden Thread dazu veranlasst, alles neuzumalen.

Mit etwas Aufwand könnte man natürlich auch alles in eine einzige Klasse quätschen, die Component erweitert und zehn verschiedene Listener-Interfaces implementiert und irgendwelche gameloop-Threads aggregiert und Fenster aufmacht usw.

Ob das der Übersicht dient, wag ich zu bezweifeln. => MVC
 

SuperSeppel13

Bekanntes Mitglied
Gezeichtnet wird in Swing (arbeitest du mit Swing?) in der paintComponent-Methode. Diese wird so überschrieben, dass sie das Gewünschte zeichnet. In deinem KeyListener musst du dann bestimmte Parameter ändern und später repaint() aufrufen, damit die Komponente neu gezeichnet wird.

Könnte etwa so aussehen (sehr wereinfacht und rein beispielhaft):
Java:
JPanel p = new JPanel(){
            @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g); // aufrufen der originalen paintComponent-Methode von JPanel
                                         // notwendig, damit die Komponente selbts richtig gezeichnet wird
                
                if(xPressed){ //boolean, der auf 'true' gesetzt wird, wenn 'x' gedrückt wurde (im KeyListener)
                                  //dies ist eher primitiv, da gibt es natürlich elegantere Varianten...
                    g.setColor(Color.RED); // festlegen der Zeichenfarbe
                    g.fillOval(50, 50, 10, 10); // zeichnen Punktes (Kreises) an angegebener Stelle auf dem Panel
                }
            }
        };
        
        add(p); // hinzufügen des Panel zum Fenster (oder was auch immer)
Wenn du nicht genau weißt, wie die einzelnen Zeichen-Methoden funktionieren, schau dir einfach die JavaDocs der 'paint...' oder 'fill...' Methoden von Graphics an.

Hoffe ich konnte helfen.
Gruß,
SuperSeppel13
 
Zuletzt bearbeitet:

Rave

Bekanntes Mitglied
Gezeichtnet wird in Swing (arbeitest du mit Swing?) in der paintComponent-Methode. Diese wird so überschrieben, dass sie das Gewünschte zeichnet. In deinem KeyListener musst du dann bestimmte Parameter ändern und später repaint() aufrufen, damit die Komponente neu gezeichnet wird.

Könnte etwa so aussehen (sehr wereinfacht und rein beispielhaft):
Java:
JPanel p = new JPanel(){
            @Override
            public void paintComponent(Graphics g){
                super.paintComponent(g); // aufrufen der originalen paintComponent-Methode von JPanel
                                         // notwendig, damit die Komponente selbts richtig gezeichnet wird
                
                if(xPressed){ //boolean, der auf 'true' gesetzt wird, wenn 'x' gedrückt wurde (im KeyListener)
                                  //dies ist eher primitiv, da gibt es natürlich elegantere Varianten...
                    g.setColor(Color.RED); // festlegen der Zeichenfarbe
                    g.fillOval(50, 50, 10, 10); // zeichnen Punktes (Kreises) an angegebener Stelle auf dem Panel
                }
            }
        };
        
        add(p); // hinzufügen des Panel zum Fenster (oder was auch immer)
Wenn du nicht genau weißt, wie die einzelnen Zeichen-Methoden funktionieren, schau dir einfach die JavaDocs der 'paint...' oder 'fill...' Methoden von Graphics an.

Hoffe ich konnte helfen.
Gruß,
SuperSeppel13

Also ich arbeite mit AWT !!! Was muss ich denn dann anders schreiben ??? Bin auch shcon dabei mir was anzulesen :rtfm:
 

dayaftereh

Top Contributor
Hey, ich bin mir nicht 100% sicher ob das so richtig ist, aber bei mir Funktionirts, ich habe noch nicht so viel mit AWT gemacht aber ich denke, wenn ich etwas falsch gemacht habe, wird das hier schon gepostet, also hier mein Beispiel:
Java:
package de.utilx;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Test extends Panel implements KeyListener{
	
	private static final long serialVersionUID = -1446584754300138335L;
	
	private boolean xPressed = false;
	
	public Test() {
		
		Frame f = new Frame();
		f.setTitle("Test");
		f.setPreferredSize(new Dimension(400,300));
		f.setLayout(new BorderLayout());
		
		this.addKeyListener(this);
		f.add(this,BorderLayout.CENTER);		
		
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
		
		this.requestFocus();
		
	}
	
	@Override
	public void paint(Graphics g) {		
		super.paint(g);
		
		if(xPressed){
			g.setColor(Color.red);
			g.drawRect(this.getWidth()/2 - this.getWidth()/4, this.getHeight()/2 - this.getHeight()/4, this.getWidth()/2, this.getHeight()/2);
		}
	}
	
	public void keyPressed(KeyEvent e) {	
		if(e.getKeyCode() == KeyEvent.VK_X && !xPressed){
			setXPressd(true);
		}
	}

	public void keyReleased(KeyEvent e) {		
		if(e.getKeyCode() == KeyEvent.VK_X && xPressed){
			setXPressd(false);			
		}
	}

	public void keyTyped(KeyEvent e) {		
		
	}
	
	private void setXPressd(boolean b){
		this.xPressed = b;
		this.repaint();
	}
	
	public static void main(String[] args) {
		new Test();
	}

}
 

SuperSeppel13

Bekanntes Mitglied
Das Beispiel von dayaftereh zeigt, finde ich, ganz klar, wie das in AWT funktioniert: Dort ist es die 'paint'-Methode, die überschrieben werden muss, nicht paintComponent (gibt's da nämlich nicht).
 

Rave

Bekanntes Mitglied
Okay ich probier mich daran mal ;-) wenn etwas nich klappt meld ich mich noch mal ;-) kann aber dauern bin das weekend nich zu Hause ;-)

Aber danke für eure nette und schnelle Hilfe :) :toll:
 

André Uhres

Top Contributor
Hier ist noch ein Beispielprogramm für zusätzliches Zeichnen in der update Methode. Zusätzliches Zeichnen (incremental painting) ist nützlich, wenn die Komponente zusätzliche Ausgaben auf einem komplexen Hintergrund machen muss. Dadurch bekommen wir ein flackerfreies Zeichnen. Siehe auch Malen in AWT und Swing - Byte-Welt Wiki
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;
import java.util.List;
/*
 ***************************************************************
 * Sample program using update to do incremental painting.
 *
 * Incremental painting is useful if the component needs to
 * render incremental output on top of a complex background.
 ***************************************************************
 */
public class UpdateDemo extends Frame{
    private final DrawingArea drawingArea;
    public UpdateDemo(){
        super("Press key to draw ovals");
        drawingArea = new DrawingArea(new ArrayList<Point>());
        add(drawingArea, BorderLayout.CENTER);
        pack();
        setLocationRelativeTo(null);
        WindowListener l = new WindowAdapter() {
            @Override
            public void windowClosing(final WindowEvent e) {
                System.exit(0);
            }
        };
        addWindowListener(l);
        Runnable requestFocus = new Runnable() {
            public void run() {
                drawingArea.requestFocusInWindow();
            }
        };
        EventQueue.invokeLater(requestFocus);
    }
    public static void main(final String[] args) {
        Runnable gui = new Runnable() {

            @Override
            public void run() {
                new UpdateDemo().setVisible(true);
            }
        };
        //GUI must start on EventDispatchThread:
        EventQueue.invokeLater(gui);
    }
}
/**
 * A canvas which renders a semi-complex background layered
 * with shapes in various locations on the canvas
 * which are created as the user presses any key.
 *
 * The paint() method always paints the entire area.
 * 
 * Additionally, this class uses update() to do
 * incremental painting of only the vectors which have been
 * created since the last time the canvas painted.
 */
class DrawingArea extends Canvas {
    private Color colors[] = {Color.red, Color.yellow, Color.blue,
        Color.green, Color.pink, Color.orange,
        Color.white, Color.magenta, Color.cyan};
    private List<Point> points;
    private int shapesPainted;
    private final Random r;
    public DrawingArea(final List points) {
        this.points = points;
        addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(final KeyEvent e) {
                DrawingArea c = (DrawingArea) e.getSource();
                c.points.add(getRandomPoint());
                c.repaint();
            }
        });
        r = new Random();
    }
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 400);
    }
    @Override
    public void paint(final Graphics g) {
        // paint entire canvas -> background and all shapes
        paintBackground(g);
        shapesPainted = 0;
        for (int i = 0; i < points.size() - 1; i++) {
            paintShape(g, i);
        }
    }
    @Override
    public void update(final Graphics g) {
        // only paint new shapes since last update call
        for (int i = shapesPainted; i < points.size(); i++) {
            paintShape(g, i);
        }
    }
    private void paintBackground(final Graphics g) {
        Dimension size = getSize();
        int thickness = 5;
        for (int y = 0; y + thickness <= size.height; y += thickness) {
            g.setColor(colors[y % colors.length]);
            g.fillRect(0, y, size.width, thickness);
        }
    }
    private void paintShape(final Graphics g, int index) {
        Point p1 = points.get(index);
        g.setColor(Color.BLUE);
        g.fillOval(p1.x, p1.y, 15, 15);
        shapesPainted++;
    }
    private Point getRandomPoint(){
        return new Point(r.nextInt(getWidth()), r.nextInt(getHeight()));
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Wie frage ich ab ob die Linke maus Taste gedrückt wurde? Java Basics - Anfänger-Themen 3
E AWTEventListener - Taste gedrückt oder los gelassen? Java Basics - Anfänger-Themen 2
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
S Ergebnisse zwischenspeichern (Analog zu ans-Taste bei Taschenrechnern) Java Basics - Anfänger-Themen 3
Xentox501 keyevent.VK_LEFT wird beim drücken jeder belibigen Taste aktiv. Java Basics - Anfänger-Themen 3
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
P Weiter erst bei Drücken de Enter-TAste Java Basics - Anfänger-Themen 1
B Taste "Enter" drücken in einem anderen Programm? Java Basics - Anfänger-Themen 6
R Input/Output Tastenschläge einer Taste zählen Java Basics - Anfänger-Themen 14
H Methoden Implementieren "Drücken Sie eine beliebige Taste" Java Basics - Anfänger-Themen 5
T MouseListener, recht Taste Java Basics - Anfänger-Themen 2
T JFrame per Taste schließen Java Basics - Anfänger-Themen 15
W Befehl ausführen bei Mausklick + gedrückte Strg-Taste Java Basics - Anfänger-Themen 2
E Taste zwischenspeichern? Java Basics - Anfänger-Themen 4
Zettelkasten Tabulator-Taste? Java Basics - Anfänger-Themen 2
B 2 Textfelder Enter Taste Java Basics - Anfänger-Themen 3
F Applet mit KeyListener, "Alt"-Taste und Konflikt mit Browser Java Basics - Anfänger-Themen 2
J Escape taste geht ohne cursor im textfeld nicht. Java Basics - Anfänger-Themen 4
P "Enter"-Taste mit Button verknüpfen Java Basics - Anfänger-Themen 3
D KeyEvent Taste blockieren. Java Basics - Anfänger-Themen 2
E Mit Taste Methode aufrufen Java Basics - Anfänger-Themen 7
C Konsolenanwendung auf belibige Taste warten Java Basics - Anfänger-Themen 2
D Erstellte Textfelder in Applet mit Tab - Taste anspringen Java Basics - Anfänger-Themen 3
M MenuShortcut nur mittels Shift+Taste Java Basics - Anfänger-Themen 3
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
G KeyListener für die Taste "/" Java Basics - Anfänger-Themen 5
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
G Leertaste bei Button auf Enter Taste ändern? Java Basics - Anfänger-Themen 6
C Einloggen auch per ENTER Taste (KeyListener Problem) Java Basics - Anfänger-Themen 8
C Erkennen einer gedrückten Taste Java Basics - Anfänger-Themen 6
V Mausklick mit rechter Taste abfangen? Java Basics - Anfänger-Themen 8
P JOptionPane und Tab-Taste Java Basics - Anfänger-Themen 4
S wie bastelt man eine pause-taste Java Basics - Anfänger-Themen 5
A JOPtionPaneOptionDialog Abfrage welcher Button gedrückt wurde? Java Basics - Anfänger-Themen 8
Tacofan Welcher Button wurde zuerst gedrückt? Java Basics - Anfänger-Themen 4
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
S Methode pausieren bis Button gedrückt wird Java Basics - Anfänger-Themen 5
B Methode warten lassen bis Button gedrückt wird Java Basics - Anfänger-Themen 16
K JTextField auslesen, wenn Enter gedrückt.. Java Basics - Anfänger-Themen 13
G Button schonmal gedrückt ? Java Basics - Anfänger-Themen 6
G Nicht benannte Buttons - Wenn gedrückt > Action Java Basics - Anfänger-Themen 24
G reagieren wenn Ja gedrückt wird Java Basics - Anfänger-Themen 2
N Wenn minimiert gedrückt schließen Java Basics - Anfänger-Themen 11
L Beim ausführen bleibt der Button gedrückt . Java Basics - Anfänger-Themen 35
G Button schon gedrückt wenn "mouseOver" Java Basics - Anfänger-Themen 3
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
D Grafik auf ein JPane ausgeben. Java Basics - Anfänger-Themen 6
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
J "Tetris" - Problem bei der Grafik Java Basics - Anfänger-Themen 5
R Grafik in CSV einbinden Java Basics - Anfänger-Themen 2
S Suche aktuelles 2D Grafik Tutorial Java Basics - Anfänger-Themen 5
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
D aufbauende Grafik Java Basics - Anfänger-Themen 13
8 Grafik erstellen Java Basics - Anfänger-Themen 6
Z Jump and Run - Grafik,Logik und GUI trennen Java Basics - Anfänger-Themen 4
G Bei Mouseover Grafik ändern, gutes Vorgehen gesucht Java Basics - Anfänger-Themen 0
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
L Grafik Kollision Detektierung Java Basics - Anfänger-Themen 4
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
S Grafik löschen Java Basics - Anfänger-Themen 10
C Grafik einsperren Java Basics - Anfänger-Themen 2
E Quelltext für Grafik verschwindet Java Basics - Anfänger-Themen 9
S Grafik verschwindet Java Basics - Anfänger-Themen 8
O Java Grafik-Programmierung? Java Basics - Anfänger-Themen 16
R 2D Grafik zeichnen Java Basics - Anfänger-Themen 4
B Grafik zeichnen Java Basics - Anfänger-Themen 25
S Teilstücke aus einer Grafik extrahieren Java Basics - Anfänger-Themen 2
Maxim6394 Grafik rotieren Java Basics - Anfänger-Themen 11
S Probleme mit JMenü und Grafik Java Basics - Anfänger-Themen 2
0 Grafik eine bestimmte Strecke laufen lassen Java Basics - Anfänger-Themen 6
R Hilfe bei erster Grafik Java Basics - Anfänger-Themen 2
A Gui Grafik Java Basics - Anfänger-Themen 4
maddin86 Grafik in .jar einbetten Java Basics - Anfänger-Themen 3
M import einer Grafik aus .jar funktioniert nicht Java Basics - Anfänger-Themen 6
M Grafik export in ein Jar File Java Basics - Anfänger-Themen 5
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
H Diverse Dinge: Unstabile Grafik, Druckt Grafik nicht,Tooltipp verschwindet hinter Grafik Java Basics - Anfänger-Themen 3
H Grafik auf einem JPanel bewegen. Java Basics - Anfänger-Themen 7
F JLabel mit Grafik füllen Java Basics - Anfänger-Themen 3
K Grafik vergrößern/verkleinern Java Basics - Anfänger-Themen 3
F Zugriffsproblem - Funktion von Grafik trennen Java Basics - Anfänger-Themen 6
H HtmlUnit - Grafik speichern Java Basics - Anfänger-Themen 2
D PNG-Grafik erzeugen Java Basics - Anfänger-Themen 8
A Grafik erstellen und in Frame einfügen Java Basics - Anfänger-Themen 17
T Drucken von Listen bestehend aus Grafik und Text (unter swing) Java Basics - Anfänger-Themen 7
A grafik 2d Objekte mit der Maus bewegen Java Basics - Anfänger-Themen 4
A Grafik 2d Objekte farblich ausfüllen Java Basics - Anfänger-Themen 15
C Grafik einbinden Java Basics - Anfänger-Themen 11
F Größe von Grafik-Containern verschieben Java Basics - Anfänger-Themen 2
J Unterschied zwischen 2 Grafik Methoden Java Basics - Anfänger-Themen 2
M Grafik neuzeichnen Java Basics - Anfänger-Themen 8
M Grafik als Resource laden? Java Basics - Anfänger-Themen 2
G erste Schritte in Fenster und Grafik-Programmierung Java Basics - Anfänger-Themen 2
$ Inhalt von JPanel als Grafik? Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Grafik Java Basics - Anfänger-Themen 3
K Grafik abspeichern, X11 Fehlermeldung Java Basics - Anfänger-Themen 15
T Zeigerposition auf Grafik messen? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben