Eine grafische Programmierung der Oberflächen (GUI) kann man sehr einfach mit der Programmiersprache Java realisieren. Man sollte jedoch wissen, wie man optimal starten kann. Mit dem Java Mousemotionlistener kann man genau im Programm sehen, wo sich der Mauszeiger befindet.
Die Aufbereitung der Grafik wird in Java durch die JRE (Java Runtime Enviroment) übernommen. Die Programmierer der JRE haben hierzu Schnittstellen und Bibliotheken wie AWT (alt / nicht mehr unterstützt), Swing (neuer / bald nicht mehr unterstützt) und JavaFX (Favorit aktuell) implementiert. Beim Malen / Zeichnen mit Java greifen wir auf Swing und AWT zurück. Das Package Swing greift hierbei teilweise auf AWT zurück, sodass beide Packages benutzt werden können, sofern dies unterstützt wird.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JFrame; import javax.swing.JPanel; /** * In dieser Klasse erzeugen Wir uns ein JFrame (Java-Fenster). Das JFrame hat * eine Referenz von unserem DrawPanel, auf welchem gezeichnet wird. * * @author ST-Page.de * */ public class PaintWindow extends JFrame { private static final long serialVersionUID = -5639142697589144988L; private DrawPanel panel = new DrawPanel(); public PaintWindow() { this.setTitle("Malen mit Java im einem JPanel"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(500, 300); this.setLocationByPlatform(true); this.setVisible(true); this.add(panel); } /** * Hier starte ich die Klasse. Dazu erstelle ich ein neues Objekt auf dieses * Klasse. * * @param args */ public static void main(String[] args) { new PaintWindow(); } } /** * Die Klasse DrawPanel hat als Grundlage ein JPanel. Wir können die Funktionen * eines JPanels nutzen und für unsere Zwecke erweitern und besser nutzen. * * Später sollte man besser hier eine eigene Java-Datei draus machen, dies ist * so kein guter Stil aber zur Veranschaulichung ist er besser. * * @author KranzKrone * */ class DrawPanel extends JPanel { private static final long serialVersionUID = -67893636709725974L; public DrawPanel() { // Zu meinem DrawPanel füge ich einen MouseMotionListener hinzu und // frage ab wo die Maus gerade ist. this.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseMoved(MouseEvent arg0) { } @Override public void mouseDragged(MouseEvent arg0) { // Das MouseEvent gibt es schon von der JRE. So dass Wir das // MouseEvent-Objekt auslesen können. drawPoint(arg0.getX(), arg0.getY()); // Ausgabe der Mauskoordinaten in der Kommandozeile System.out.println(arg0.getX() + " / " + arg0.getY()); } }); } private void drawPoint(int x, int y) { // Neues Grafik-Objekt aus dem altem Erzeugen und darauf dann die // Grafik-Funktionen nutzen. Graphics g = this.getGraphics(); g.fillOval(x, y, 3, 3); } } |
Im Code-Beispiel sind zwei Klassen zu finden, beide erben von Swing-Klassen. Die Klasse PaintWindow (erbt von JFrame) zeichnet das Fenster und initialisiert die Klasse DrawPanel. Zum DrawPanel (erbt von JPanel) wird das Interface MouseMotionListener, mit der Methode addMouseMotionListener(), hinzugefügt. Sobald man die Maus gedrückt hält, kann man auf dem Fenster Punkte zeichnen. Wird das Fenster verändert oder man ändert die Größe etc. verschwindet alles, weil sich das JPanel neu zeichnet und wir die paintComponent-Methode nicht überschrieben haben.
Damit sich das Gezeichnete beim Verändern nicht verzieht, muss man die paintComponent-Methode vom JPanel überschreiben.