Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- import java.util.List;
- import java.util.ArrayList;
- import javax.swing.JOptionPane;
- import java.io.*;
- import javax.swing.JFileChooser;
- public class JPaint extends Frame {
- public JPaint(String title) {
- super(title);
- addWindowListener(new WindowAdapter() {
- public void windowClosing(WindowEvent evt) { dispose(); }
- });
- MyMouseListener myml = new MyMouseListener();
- addMouseListener(myml);
- addMouseMotionListener(myml);
- int frameWidth = 620;
- int frameHeight = 570;
- setSize(frameWidth, frameHeight);
- Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
- int x = (d.width - getSize().width) / 2;
- int y = (d.height - getSize().height) / 2;
- setLocation(x, y);
- setResizable(false);
- setVisible(true);
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Linie";
- }
- public int getKoordinatenAnzahl(){
- return 2;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- g.drawLine(koordinaten.get(0).getX(),koordinaten.get(0).getY(),koordinaten.get(1).getX(),koordinaten.get(1).getY());
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Dreieck";
- }
- public int getKoordinatenAnzahl(){
- return 3;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- g.drawLine(koordinaten.get(0).getX(),koordinaten.get(0).getY(),koordinaten.get(1).getX(),koordinaten.get(1).getY());
- g.drawLine(koordinaten.get(1).getX(),koordinaten.get(1).getY(),koordinaten.get(2).getX(),koordinaten.get(2).getY());
- g.drawLine(koordinaten.get(2).getX(),koordinaten.get(2).getY(),koordinaten.get(0).getX(),koordinaten.get(0).getY());
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Rechteck";
- }
- public int getKoordinatenAnzahl(){
- return 2;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- int x = 0;
- int y = 0;
- int width = 0;
- int height = 0;
- if (koordinaten.get(0).getX() < koordinaten.get(1).getX()){
- x = koordinaten.get(0).getX();
- width = koordinaten.get(1).getX() - koordinaten.get(0).getX();
- }
- else{
- x = koordinaten.get(1).getX();
- width = koordinaten.get(0).getX() - koordinaten.get(1).getX();
- }
- if (koordinaten.get(0).getY() < koordinaten.get(1).getY()){
- y = koordinaten.get(0).getY();
- height = koordinaten.get(1).getY() - koordinaten.get(0).getY();
- }
- else{
- y = koordinaten.get(1).getY();
- height = koordinaten.get(0).getY() - koordinaten.get(1).getY();
- }
- g.drawRect(x,y,width,height);
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Oval";
- }
- public int getKoordinatenAnzahl(){
- return 2;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- int x = 0;
- int y = 0;
- int width = 0;
- int height = 0;
- if (koordinaten.get(0).getX() < koordinaten.get(1).getX()){
- x = koordinaten.get(0).getX();
- width = koordinaten.get(1).getX() - koordinaten.get(0).getX();
- }
- else{
- x = koordinaten.get(1).getX();
- width = koordinaten.get(0).getX() - koordinaten.get(1).getX();
- }
- if (koordinaten.get(0).getY() < koordinaten.get(1).getY()){
- y = koordinaten.get(0).getY();
- height = koordinaten.get(1).getY() - koordinaten.get(0).getY();
- }
- else{
- y = koordinaten.get(1).getY();
- height = koordinaten.get(0).getY() - koordinaten.get(1).getY();
- }
- g.drawOval(x,y,width,height);
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Kreis";
- }
- public int getKoordinatenAnzahl(){
- return 2;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- int r = koordinaten.get(0).distanceTo(koordinaten.get(1));
- g.drawOval(koordinaten.get(0).getX()-r,koordinaten.get(0).getY()-r,r*2,r*2);
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Polygon endlos";
- }
- public int getKoordinatenAnzahl(){
- return 0;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- int[] x = new int[koordinaten.size()];
- int[] y = new int[koordinaten.size()];
- int counter = 0;
- for (Vector2 v : koordinaten){
- x[counter] = v.getX();
- y[counter] = v.getY();
- counter++;
- }
- g.drawPolygon(x,y,koordinaten.size());
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Polygon";
- }
- public int getKoordinatenAnzahl(){
- return 0;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- int counter;
- for (counter = 0;counter < mo.getKoordinaten().size() -1;counter++) {
- g.drawLine(mo.getKoordinaten().get(counter).getX(),mo.getKoordinaten().get(counter).getY(),mo.getKoordinaten().get(counter+1).getX(),mo.getKoordinaten().get(counter+1).getY());
- }
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){}
- });
- addMalWerkzeug(new MalWerkzeug(){
- public String getName(){
- return "Text";
- }
- public int getKoordinatenAnzahl(){
- return 1;
- }
- public void malen(Graphics g, MalObjekt mo){
- List<Vector2> koordinaten = mo.getKoordinaten();
- g.drawString(String.valueOf(mo.getSettings()),koordinaten.get(0).getX(),koordinaten.get(0).getY());
- }
- public void auswahlStart(MalObjekt mo){}
- public void auswahlEnde(MalObjekt mo){
- String eingabe = JOptionPane.showInputDialog(null,"Geben Sie den gewünschten Text ein","Text zeichnen",JOptionPane.PLAIN_MESSAGE);
- if (eingabe == null){
- mo.setDisposed(true);
- }
- mo.setSettings(eingabe);
- }
- });
- int counter = 0;
- for (MalWerkzeug mw : malWerkzeuge){
- buttons.add(new Button(mw.getName(),25,50+(30*counter),100,25));
- counter++;
- }
- buttons.add(new Button("Zurücksetzten",135,50,100,25));
- buttons.add(new Button("Rückgängig",135,80,100,25));
- buttons.add(new Button("Speichern",135,140,100,25));
- buttons.add(new Button("Laden",135,170,100,25));
- repaint();
- // Anfang Komponenten
- // Ende Komponenten
- }
- public static void main(String[] args) {
- new JPaint("JPaint");
- }
- public void addMalWerkzeug(MalWerkzeug mw){
- malWerkzeuge.add(mw);
- }
- // Anfang Attribute
- private Vector2 posKlick = new Vector2(); //Wo wurde als letztes geklickt
- private String status = "Linie"; //Welcher Button ist angewählt
- private List<MalWerkzeug> malWerkzeuge = new ArrayList<MalWerkzeug>(); //Hier werden alle möglichen Objekte zum zeichnen gespeichtert. Praktisch
- //Praktisch eine Ansammlung von Werkzeugen
- private Bild bild = new Bild();
- private List<Button> buttons = new ArrayList<Button>(); //Hier befinden sich alle Buttons, die gezeichnet werden sollen
- private boolean buttonGeklickt; //true = ein Button wurde gedrückt. false = eine andere Stelle, als ein Button wurde gedrückt
- private String alterStatus; //Hiermit kann man den vorherigen Status aulesen, falls dieser verändert wurde
- private boolean neuerStatus; //true = ein Button wurde gedrückt, der den aktuellen Status verändert
- private MalObjekt malObjekt = new MalObjekt(); //Das immmoment zu editierende MalObjekt
- public List<Vector2> klicke() { //Alle Positionen die bis jetzt geklickt wurden
- return malObjekt.getKoordinaten();
- }
- private Vector2 malPos = new Vector2(250,50);
- private boolean drawPreview = false;
- private Vector2 posMouseDrag = new Vector2();
- private int cursor = Cursor.DEFAULT_CURSOR;
- // Ende Attribute
- // Anfang Methoden
- public void paint(Graphics g){
- Vector2 malSize = bild.getGroesse();
- g.drawRect(malPos.getX(),malPos.getY(),malSize.getX(),malSize.getY());
- for (Button b : buttons) {
- Vector2 pos = b.getPosition();
- Vector2 size = b.getSize();
- g.setColor(Color.gray);
- g.fillRect(pos.getX(),pos.getY(),size.getX(),size.getY()); //Wir zeichnen die Umrandung des Buttons
- if (b.getName() == status) { //Wir zeichnen aktuell einen Button, der angewählt ist
- g.setColor(Color.red); //Falls der Button angewählt ist, wird die Schriftfarbe schwarz
- }
- else{ //Wir zeichnen einen nicht angewählten Button
- g.setColor(Color.black); //Falls nicht, wird die Schriftfarbe schwarz
- }
- g.drawString(b.getName(),pos.getX() + 4,pos.getY()+ size.getY()/2); //Wir zeichnen die Beschriftung des Buttons
- g.setColor(Color.black); //Wir setzten die Farbe wieder zurück
- }
- int counter = 0;
- for (Vector2 v: klicke()){ //Wir zeichnen alle bis jetzt geklickten Punkte als Oval
- if (counter == klicke().size() - 1){
- g.setColor(Color.green);
- }
- int ovalWidth = 4;
- int ovalHeight = 4;
- g.fillOval(v.getX()-ovalWidth/2,v.getY()-ovalHeight/2,ovalWidth,ovalHeight);
- g.setColor(Color.black);
- counter++;
- }
- for (MalObjekt mo : bild.getMalObjekte()){
- for (MalWerkzeug mw : malWerkzeuge){
- if (mo.getName().compareTo(mw.getName()) == 0){
- mw.malen(g,mo);
- }
- }
- }
- if (drawPreview){
- boolean gefunden = false;
- for (MalWerkzeug mw : malWerkzeuge){
- if (mw.getKoordinatenAnzahl() == 1){
- }
- else if(mw.getName() == status && (klicke().size() == mw.getKoordinatenAnzahl() -1 || mw.getKoordinatenAnzahl() == 0) ){
- List<Vector2> klickePreview = new ArrayList<Vector2>();
- klickePreview.addAll(klicke());
- klickePreview.add(posMouseDrag);
- g.setColor(Color.red);
- MalObjekt tmo = new MalObjekt("",klickePreview);
- mw.malen(g,tmo);
- g.setColor(Color.black);
- gefunden = true;
- }
- }
- }
- this.setCursor(cursor);
- }
- // Ende Methoden
- public class MyMouseListener extends MouseAdapter{
- public void mouseClicked(MouseEvent event){
- switch ( event.getButton() )
- {
- case MouseEvent.BUTTON1 : leftClick(event); break ;
- case MouseEvent.BUTTON3 : rightClick(event); break ;
- }
- repaint();
- }
- private void leftClick(MouseEvent event){
- posKlick.setX(event.getX());
- posKlick.setY(event.getY());
- buttonGeklickt = false;
- for (Button b : buttons) { //Wir führen diese Routine für jeden Button ab, um zu überprüfen, ob er geklickt wurde
- Vector2 pos = b.getPosition();
- Vector2 size = b.getSize();
- if (posKlick.getX() >= pos.getX() && posKlick.getX() <= (pos.getX()+size.getX()) && posKlick.getY() >= pos.getY() && posKlick.getY() <= (pos.getY()+size.getY())) {
- alterStatus = status; //Der alte Status wird zwischengespeichert
- status = b.getName(); //Der neue Status wird zugewiesen
- if (alterStatus == status){
- neuerStatus = false;
- }
- else{
- neuerStatus = true;
- }
- buttonGeklickt = true; //Der Mouseklick befand sich auf einem Button
- }
- }
- if (!buttonGeklickt){ //Wenn kein Button gedrückt wurde
- Vector2 pos = malPos;
- Vector2 size = bild.getGroesse();
- if (posKlick.getX() >= pos.getX() && posKlick.getX() <= (pos.getX()+size.getX()) && posKlick.getY() >= pos.getY() && posKlick.getY() <= (pos.getY()+size.getY())) {
- //Der Klick wird nur dann registriert, wenn er im Bereich des Bildes liegt
- boolean gefunden = false;
- for (MalWerkzeug mw : malWerkzeuge){
- if (mw.getName() == status && gefunden == false){
- gefunden = true;
- klicke().add(new Vector2(event.getX(),event.getY()));
- if (klicke().size() == 1){
- malObjekt.setName(status);
- mw.auswahlStart(malObjekt);
- if (malObjekt.getDisposed() == true){
- malObjekt = new MalObjekt();
- }
- else{
- posMouseDrag = new Vector2(event.getX(),event.getY());
- }
- }
- if ( klicke().size() == mw.getKoordinatenAnzahl()){
- repaint();
- mw.auswahlEnde(malObjekt);
- if (malObjekt.getDisposed() == false){
- bild.getMalObjekte().add(malObjekt);
- }
- malObjekt = new MalObjekt();
- }
- }
- }
- }
- }
- else{
- boolean gefunden = false;
- if (neuerStatus == false){
- for (MalWerkzeug mw : malWerkzeuge){
- if (mw.getName() == status && gefunden == false){
- gefunden = true;
- if (mw.getKoordinatenAnzahl() == 0 && klicke().size() == 0 == false){
- mw.auswahlEnde(malObjekt);
- if (malObjekt.getDisposed() == false){
- bild.getMalObjekte().add(malObjekt);
- }
- malObjekt = new MalObjekt();
- }
- }
- }
- }
- if (neuerStatus){
- malObjekt = new MalObjekt(); //Alle bis jetzt gesetzen Koordinaten werden zurückgesetzt
- }
- if (status == "Zurücksetzten"){
- if (bild.getMalObjekte().size() > 0){
- if(JOptionPane.showConfirmDialog(null,"Wollen Sie wirklich alle hinzugefügten Objekte löschen ?","Zurücksetzen",JOptionPane.YES_NO_OPTION) == 0){
- malObjekt = new MalObjekt();
- bild.getMalObjekte().clear(); //Alle Objekte werden gelöscht
- }
- }
- status = alterStatus; //Der Status wird wieder zurück gesetzt
- }
- if (status == "Rückgängig"){
- if (bild.getMalObjekte().size() > 0){
- if(JOptionPane.showConfirmDialog(null,"Wollen Sie wirklich das zuletzt hinzugefügte Objekt löschen ?","Rückgängig",JOptionPane.YES_NO_OPTION) == 0){
- malObjekt = new MalObjekt();
- bild.getMalObjekte().remove(bild.getMalObjekte().size()-1); //Das letzte Objekt wird gelöscht
- }
- }
- status = alterStatus; //Der Status wird wieder zurück gesetzt
- }
- if (status == "Speichern"){
- try{
- JFileChooser fileChooser = new JFileChooser();
- fileChooser.setDialogTitle("Speichern...");
- if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
- File datei = fileChooser.getSelectedFile();
- FileOutputStream fos = new FileOutputStream(datei.getAbsolutePath());
- ObjectOutputStream objectStream = new ObjectOutputStream (fos);
- objectStream.writeObject (bild);
- }
- }
- catch (Exception ex){
- JOptionPane.showMessageDialog(null,"Fehler beim Speichern des Bildes: " + ex.toString(),"Speichern",JOptionPane.ERROR_MESSAGE);
- }
- status = alterStatus;
- }
- if (status == "Laden"){
- if (bild.getMalObjekte().size() == 0 || JOptionPane.showConfirmDialog(null,"Wenn sie ein Bild laden, wird das alte unwiderruflich gelöscht, fortfahren ?","Laden",JOptionPane.YES_NO_OPTION) == 0){
- try{
- JFileChooser fileChooser = new JFileChooser();
- fileChooser.setDialogTitle("Laden...");
- if (fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
- File datei = fileChooser.getSelectedFile();
- FileInputStream input = new FileInputStream(datei.getAbsolutePath());
- ObjectInputStream objectInput = new ObjectInputStream (input);
- Object obj = objectInput.readObject();
- bild = (Bild) obj;
- }
- }
- catch (Exception ex){
- JOptionPane.showMessageDialog(null,"Fehler beim Laden des Bildes: " + ex.toString(),"Laden",JOptionPane.ERROR_MESSAGE);
- }
- }
- status = alterStatus;
- }
- }
- }
- private void rightClick(MouseEvent event){
- malObjekt = new MalObjekt();
- }
- public void mouseMoved(MouseEvent event){
- int cursorTemp = Cursor.DEFAULT_CURSOR;
- boolean bildHover = false;
- posMouseDrag.setX(event.getX());
- posMouseDrag.setY(event.getY());
- Vector2 pos = malPos;
- Vector2 size = bild.getGroesse();
- boolean repaint = false;
- if (posMouseDrag.getX() >= pos.getX() && posMouseDrag.getX() <= (pos.getX()+size.getX()) && posMouseDrag.getY() >= pos.getY() && posMouseDrag.getY() <= (pos.getY()+size.getY())){
- bildHover = true;
- }
- if (bildHover) {
- cursorTemp = Cursor.CROSSHAIR_CURSOR;
- }
- else{
- cursorTemp = Cursor.DEFAULT_CURSOR;
- }
- if (cursorTemp > cursor | cursorTemp < cursor) {
- cursor = cursorTemp;
- }
- if (klicke().size() > 0 ){
- boolean drawPreviewTemp = false;
- if (bildHover){
- drawPreviewTemp = true;
- }else{
- drawPreviewTemp = false;
- }
- if (drawPreview = !drawPreview) {
- drawPreview = drawPreviewTemp;
- repaint = true;
- }
- }
- if (repaint || drawPreview) {
- repaint();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment