Gutes Tutorial. Ich habe grundsätlich nichts daran auszusetzen. Ich persönlich habe bis jetzt noch nicht mit Shapes programmiert. Vielleicht könntet ihr folgenden Code mal kritisch beurteilen, und mir sagen, was ich verbessern sollte:
Wie ihr erkennen könnt, fehlen einige Bestandteile, wie etwa die Klassen Programm und Steuerung. Doch auf denen kommt es mir nicht an. Auch eine ausführbare Klasse, wie etwa ein JFrame oder ein JApplet fehlt.
Java:
package MVC;
import javax.swing.*;
import java.awt.*;
/**
* Klasse Grafik
*
* Hier befinden sich alle grafischen Komponenten.
*
* @author GUI-Programmer
* @version 10.07.2011 02:17
*/
public class Grafik extends JPanel {
// Attribute
private Programm prog;
private Steuerung strg;
protected String
status;
protected JButton
button$1, button$2, button$3;
protected Zeichnung
zeichnung;
protected JLabel
label$unsichtbar;
// Konstruktor
public Grafik(Programm p) {
// Attribute initialisieren
attributeInitialisieren(p);
// Grafik einstellen
setSize(500,500);
setBackground(Color.blue);
setLayout(null);
// Grafikkomponenten einstellen und Hinzufügen
komponentenEinstellenUndHinzufuegen();
}
// Methoden
/**
* Die Attribute werden initialisiert.
*/
private void attributeInitialisieren(Programm p) {
// Objekte der MVC-Klassen
prog = p;
strg = new Steuerung(this, prog);
// "Normale" Attriute
status = "Mein Programm 1";
// Grafische Komponenten
systemLookAndFeelVerwenden();
button$1 = new JButton();
button$2 = new JButton();
button$3 = new JButton();
zeichnung = new Zeichnung();
label$unsichtbar = new JLabel();
}
/**
* Diese Methode versucht das Aussehen des Systems zu benutzen.
*/
private void systemLookAndFeelVerwenden() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception ex) {
status = "Fehler: "+ex.toString()+" - SystemLookAndFeel"+
"konnte nicht verwendet werden!";
System.out.println(status);
}
}
/**
* Die Komponenten werden eingestellt und der Klasse hinzugefügt
* (wegen Vererbung von JPanel möglich)
*/
private void komponentenEinstellenUndHinzufuegen() {
add(zeichnung);
button$1.setText("Knopf 1");
button$1.addActionListener(strg);
add(button$1);
button$1.setBounds(250,50,150,30);
button$2.setText("Knopf 2");
button$2.addActionListener(strg);
add(button$2);
button$2.setBounds(50,400,120,30);
button$3.setText("Knopf 3");
button$3.addActionListener(strg);
add(button$3);
button$3.setBounds(200,235,100,30);
label$unsichtbar.setVisible(false);
label$unsichtbar.setFont(new java.awt.Font("Microsoft Sans Serif", 1, 25));
label$unsichtbar.setForeground(new java.awt.Color(200, 255, 0));
label$unsichtbar.setText("Zeichenfläche Canvas ist unsichtbar");
add(label$unsichtbar);
label$unsichtbar.setBounds(15, 5, 450, 40);
}
/**
* Dient dazu, der ausführenden Klasse (Applikation / Applet) den
* "aktuellen Stand" zu übergeben.
*/
public String statusGeben() {
return status;
}
/**
* Ermöglicht anderen Klassen, wie etwa Steuerung, best. Oberflächen
* zeichnen zu lassen
*/
public void zeichneAufCanvas(String s) {
zeichnung.zeichne(s);
}
// Innere Klasse
/**
* Innere Klasse Zeichnung
*
* Diese Klasse dient als Zeichenfläche für simple Dinge, wie etwa
* Strings, Rechtecke, evtl. Bilder...
*/
class Zeichnung extends JComponent {
// Attribute
private String bildschirm;
private Image image$minus2;
private MediaTracker mt;
// Konstruktor
public Zeichnung() {
// Attribute initialisieren
attributeInitialisieren();
// Zeichnung einstellen
setBackground(Color.blue);
setBounds(0,0,500,500);
// Bilder werden vollständig geladen
bilderLaden();
}
// Methoden
/** Aufruf in: Konstruktor Zeichnung() */
private void attributeInitialisieren() {
// "Normale" Attriute
bildschirm = "Weiss";
// Images
try {
image$minus2 = getToolkit().getImage("Resources/bild 1.jpg");
/* Alternative:
image$minus2 = new javax.swing.ImageIcon(getClass().
getResource("/Resources/bild 1.jpg")).getImage();
*/
}
catch(Exception ex) {
status = ex.toString();
System.out.println(status);
}
}
/**
* Alle Pixel der Images werden vollständig geladen.
*/
private void bilderLaden() {
mt = new MediaTracker(this);
mt.addImage(image$minus2,0);
try {
mt.waitForAll();
}
catch(InterruptedException ex) {
status = ex.toString();
System.out.println(status);
}
}
/**
* >siehe zeichneAufCanvas in Oberklasse
*/
private void zeichne(String b) {
bildschirm = b;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setColor(Color.white);
g2d.drawRect(5, 5, 490, 490);
g2d.drawRect(10, 10, 480, 480);
g2d.setFont(new Font("Tahoma", 1, 20));
g2d.drawString("Zeichenfläche Canvas", 15, 40);
if(bildschirm.equals("Weiss")) {
g2d.setColor(Color.white);
g2d.fillRect(50, 50, 100, 100);
}
if(bildschirm.equals("Schwarz")) {
g2d.setColor(Color.black);
g2d.fillRect(50, 50, 100, 100);
}
if(bildschirm.equals("Bild")) {
g2d.setColor(Color.pink);
g2d.drawRect(80, 80, 50, 50);
g2d.drawRect(120, 120, 50, 50);
g2d.drawImage(image$minus2, 400, 400, this);
}
if(bildschirm.equals("Figuren")) {
int xy = 50;
g2d.setColor(Color.red);
g2d.drawLine(10 + xy, 10 + xy, 80, 80);
g2d.drawRect(110 + xy, 10 + xy, 80, 80);
g2d.draw3DRect(210 + xy, 10 + xy, 80, 80, true);
g2d.drawRoundRect(10 + xy, 110 + xy, 80, 80, 10, 10);
g2d.drawArc(110 + xy, 110 + xy, 80, 80, 45, 270);
g2d.drawOval(210 + xy, 110 + xy, 80, 80);
int p1x[] = {10 + xy, 50, 90, 90, 50, 10};
int p1y[] = {210 + xy, 240, 210, 290, 260, 290};
g2d.drawPolygon(p1x, p1y, 6);
int p2x[] = {210, 250, 290, 290, 250, 210};
int p2y[] = {210, 240, 210, 290, 260, 290};
g2d.drawPolyline(p2x, p2y, 6);
}
if(bildschirm.equals("Teilkreis")) {
g2d.setColor(Color.green);
g2d.fillArc(100,100,100,100,0,270);
g2d.drawArc(220,100,100,100,0,270);
}
}
}
}
Wie ihr erkennen könnt, fehlen einige Bestandteile, wie etwa die Klassen Programm und Steuerung. Doch auf denen kommt es mir nicht an. Auch eine ausführbare Klasse, wie etwa ein JFrame oder ein JApplet fehlt.
Zuletzt bearbeitet von einem Moderator: