Hallo,
ich habe einen Code geschrieben, mit dem Ziel, ein Zeichenfeld in java AWT zu realisieren, mithilfe von Frames. (Swing oder JFrames usw. habe ich noch nicht gelernt, und zu AWT ergibt eine Internetsuche vergleichsweise wenig, jedenfalls nichts, was mir weiterhilft). Man soll in einem Choice-Feld die Farben, mit denen man malen möchte, auswählen können. Leider malt es nicht und ich weiß nicht, warum. Es zeigt nur ein schwarzes Fenster an mit dem Choice-Feld. Fehler gibt es keine aus. Es wäre sehr hilfreich, wenn jemand mich auf meine Fehler hinweisen könnte.
Dankeschön
ich habe einen Code geschrieben, mit dem Ziel, ein Zeichenfeld in java AWT zu realisieren, mithilfe von Frames. (Swing oder JFrames usw. habe ich noch nicht gelernt, und zu AWT ergibt eine Internetsuche vergleichsweise wenig, jedenfalls nichts, was mir weiterhilft). Man soll in einem Choice-Feld die Farben, mit denen man malen möchte, auswählen können. Leider malt es nicht und ich weiß nicht, warum. Es zeigt nur ein schwarzes Fenster an mit dem Choice-Feld. Fehler gibt es keine aus. Es wäre sehr hilfreich, wenn jemand mich auf meine Fehler hinweisen könnte.
Dankeschön
Java:
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class PaintCanvas extends Canvas {
//Initialisierung
private Color aktuelleFarbe = Color.WHITE;
private Point mousePositionStart;
private Point mousePosition;
private ArrayList<Line> lines = new ArrayList<Line>();
private Line currentLine;
public PaintCanvas() {
init();
frameInit();
}
//initialisiert die MouseListener
private void init() {
this.setPreferredSize(new Dimension(300, 400));
this.setMinimumSize(new Dimension(300, 400));
//MouseListener erstellen
this.addMouseListener(new MouseAdapter() {
//Mausdrücken erstellt neue Linie
@Override
public void mousePressed(MouseEvent e) {
mousePositionStart = e.getPoint();
currentLine = new Line(aktuelleFarbe);
}
//Mausloslassen fügt Linie in Linienliste ein
@Override
public void mouseReleased(MouseEvent e) {
if(!currentLine.isEmpty()) {
lines.add(currentLine);
}
currentLine=null;
repaint();
}
});
//MouseMotionListener erstellen, fügt Punkte in Linie ein
this.addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseDragged(MouseEvent e) {
mousePosition = e.getPoint();
currentLine.add(mousePosition);
repaint();
mousePositionStart = mousePosition;
}
});
}
//Initialisiert das Fenster
private void frameInit() {
//Fenster-Frame erstellen und Rahmenbedingungen festlegen
Frame f = new Frame("PaintCanvas");
f.setBackground(Color.BLACK);
f.setSize(300,400);
f.setLayout(new BorderLayout());
f.setLocationRelativeTo(null);
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(this, BorderLayout.CENTER);
//Choice Button initialisieren und aktuelle Farbe zuordnen, zum Fenster zufügen
Choice colorChooser = new Choice();
colorChooser.add("white");
colorChooser.add("blue");
colorChooser.add("red");
colorChooser.add("green");
colorChooser.add("yellow");
colorChooser.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
String s = colorChooser.getSelectedItem();
switch(s) {
case "white":
aktuelleFarbe = Color.WHITE;
break;
case "blue":
aktuelleFarbe = Color.BLUE;
break;
case "red":
aktuelleFarbe = Color.RED;
break;
case "green":
aktuelleFarbe = Color.GREEN;
break;
case "yellow":
aktuelleFarbe = Color.YELLOW;
break;
}
}
});
f.add(colorChooser, BorderLayout.SOUTH);
//Fenster sichtbar machen
f.setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
//Alle gemalten Linien nochmals zeichnen
if(!lines.isEmpty()) {
for(Line l: lines) {
if(l.size()>1) {
for(int i=1; i<l.size()-1; i++) {
g.setColor(l.getColor());
g.drawLine(l.get(i-1).x, l.get(i-1).y, l.get(i).x, l.get(i).y);
}
}
//Falls nur ein Punkt in Linie ist, handelt es sich um einen Punkt
//daher: Ovaler Punkt zeichhen
if(l.size()==1){
g.fillOval(l.get(0).x-3, l.get(0).y-3, 6, 6);
}
}
}
}
}
import java.awt.Point;
import java.util.ArrayList;
import java.awt.Color;
//Speichert Linien als Menge von Punkten
public class Line {
private ArrayList<Point> points;
private Color color;
public Line(Color color) {
points = new ArrayList<Point>();
color = this.color;
}
//fügt Punkt zur Linie hinzu
public void add(Point point) {
points.add(point);
}
//true, falls keinen Punkt enthält
public boolean isEmpty() {
return points.isEmpty();
}
//gibt zurück, aus wievielen Punkten die Linie besteht
public int size() {
return points.size();
}
//gibt Punkt an gegebenem Index zurück
public Point get(int index) {
return points.get(index);
}
//liefert Farbe der Linie zurück
public Color getColor() {
return color;
}
}
import java.awt.Frame;
public class PaintCanvasTest {
public static void main(String[] args) {
PaintCanvas a = new PaintCanvas();
}
}