Coder Social home page Coder Social logo

paint-program's Introduction

Paint Program

This is just a little school project with BlueJ.

The program can paint images and save them.

Copying the source code or parts of it is only allowed with explicit permission by the copyright owners.

© 2019 Karsten Römling & Jonathan Hölzer

paint-program's People

Contributors

captaingarry avatar karstenroemling avatar

paint-program's Issues

Rückgängig machen etc.

Verlauf hinzufügen und Optionen wie UNDO und REDO hinzufügen

EDIT: hinzugefügt, funktioniert aber nur sehr unzuverlässig

  • UNDO/REDO stabilisieren

Werkzeuge entwickeln

Werkzeuge müssen noch entwickelt werden:

  • Text
  • Rechteck
  • Kreis
  • Vieleck
  • Fläche füllen
  • Bild
  • Radierer
  • Spiegeln
  • Farbe kriegen

+Jeweils Eintrag im Wiki

+Jeweils InfoBox

Weitere Werkzeuge müssen ausgedacht werden (Möglicherweise Orientierung an bestehenden Bildbearbeitungsprogrammen)

Jonathan - Todo3

Jonathan TODO Nr.3 nach #1 und #17 @CaptainGarry

  • Entwickle das Vieleck-Werkzeug, indem du...
    • die aktuelle Version des Projekts mit GitHub Desktop pullst
    • BlueJ startest und feststellst, dass die DrawSimulator Klasse verschwunden ist. Die Detektion der Mausbewegungen und -aktionen findet jetzt direkt über das Fenster statt, dass das Bild ausgibt.
    • herausfindest, an welcher Stelle der String[] modeNames in der Surface-Klasse das Vieleck steht (bitte beachte, dass du bei 0 zu zählen anfangen musst, das erste Objekt ist also 0, das zweite 2 etc.)
    • die switch(Manager.mode){}-Statements so durch case [Die Stelle des Vierecks in modeNames]: ersetzt, dass...
      • beim ersten Klick mit der Maus der die aktuelle x- und y-Position in den Variablen mouseXStart und mouseYStart gespeichert werden (siehe dazu auch andere Werkzeuge)
      • bei allen darauffolgenden Klicks mit der Maus eine Linie mit drawLine(altesX, altesY, x, y) zwischen der alten Maus-Position und der aktuellen Maus-Position gezeichnet wird UND DANACH erneut die aktuelle Maus-Position gespeichert wird.
    • beachtest, dass zwar dieses Vieleck unendlich lang wird, ich aber, sobald du mit diesem TODO fertig bist, Tastenkombinationen einsetzen werde, mit denen das Vieleck geschlossen wird bzw. das Zeichnen abgebrochen wird.
    • das Projekt mit GitHub Desktop mit einem vernünftigen "Title" und einer ebenso gut gewählten "Description" commitest und pushst (Alle Änderungen und nicht nur eine Datei diesmal ;P)

DANKE für deine Mithilfe und bedenke bitte, dass ich das am besten Sonntag morgen bräuchte, da wir nächste Woche zahlreiche Klausuren schreiben und - wenn ich mich nicht irre - wir das Projekt mitsamt Projektmappe am 13.06. abgeben müssen (bin mir aber nicht sicher...).

Jonathan - Todo

Jonathan - Deine Aufgaben #1 (Startup)

  • GitHub verstehen
  • GitHub Desktop herunterladen
  • Die Interface Repository Clonen (File > Clone Repository) und mit BlueJ öffnen
  • Wenn du etwas veränderst (das funktioniert), die Branch dev auswählen und auf Fetch Origin klicken

Jonathan - Deine Aufgaben #2 (Java AWT Surface)

  • Bearbeite die Surface Klasse, indem du
    • die Buttons "decrease" und "increase" tauschst,
    • den Button "subtrahieren" löscht,
    • eine Überschrift als Label für die Auswahl des Werkzeugs (Pinsel, Linie, etc) hinzufügst (z.B. "Werkzeugauswahl"),
    • nach dem Vorbild des Clear-Buttons einen ClickListener für die "increase"- und "decrease"-Buttons einfügst, der die Variable Manager.mode jeweils erhöht oder verkleinert und den Text des Labels "modeName" updatet,
    • deine Änderungen mit GitHub Desktop IN DIE DEV-BRANCH commitest.

Wenn du Fragen hast, hinterlasse einen Kommentar

Jonathan - Todo5

Jonathan TODO5 @CaptainGarry

  • Lade die neuste Version des Projekts mit "pull" herunter und starte BlueJ.
  • Füge ein Werkzeug "Fläche füllen" hinzu:
    • Wenn man auf eine bestimmten Punkt klickt, soll die Fläche gefüllt werden.
    • Füge also bei "bearbeiteMausKlick" in der Result-Klasse einen case 8 hinzu.
    • Bei case 8 musst du diese Methode verwenden: fuelleMitFarbeAn(double hPosition, double vPosition, java.awt.Color neueFarbe).
      • hPosition (double): Die horizontale Position der Maus
      • vPosition (double): Die vertikale Position der Maus
      • neueFarbe (Color): Die neue Farbe, mit der die Fläche gefüllt werden soll
    • Wie geht das? HINWEISE
      • du musst die horizontale Position der Maus übergeben. Die ist in der Variable "x" gespeichert und ein int. Da aber ein double verlangt wird, musst du den Wert mit (double) konvertieren (Zum Beispiel: methodeDieEinDoubleVerlangt((double) 5);)
      • du musst die vertikale Position der Maus übergeben. Die ist in der Variable "y" gespeichert und ein int. Da aber ein double verlangt wird, musst du den Wert mit (double) konvertieren (Zum Beispiel: methodeDieEinDoubleVerlangt((double) 5);)
      • du musst die Color übergeben. Es handelt sich um ein Color Objekt. Mit new Color(oldR, oldG, oldB) bekommst du die aktuelle Farbe.
      • Du musst auf den Stift zugreifen, um dann auf die Methode fuelleMitFarbe zuzugreifen. Der Stift ist unter s zu finden.
      • ALSO: [Auf Stift zugreifen].fuelleMitFarbe([horizontale Position übergeben und in double konzertieren], [vertikale Position übergeben und in double konzertieren], [Color übergeben]);
      • UND: break; nicht vergessen!
    • Füge "Fläche füllen" als letzen Text in die String[] modeNames ein.
  • Wenn alles einwandfrei funktioniert, committe und pushe deine Änderungen.

GANZ, GANZ WICHTIG

a)

Du hast gesagt, dass du am Ende nicht möchtest, das ich so viel mehr getan habe als du. Dieses Issue ist deine Gelegenheit, auch mitzuwirken (wenn es auch nur wenig Code ist). Bitte nehme das ernst, erledige die Aufgabe zeitnah, konzentriert und sorgfältig.

b)

Es gibt sehr viele Möglichkeiten, dir zu helfen, wenn du nicht weiterweißt, wie:

  • Dieses Issue, das dir detailliert beschreibt, was du machen musst. Eigentlich ist alles, was du wissen musst, enthalten und du musst nur noch eins und eins zusammenzählen.
  • Suche dir Vergleichbares in dem von mir erstellten Code.
  • Wenn du trotzdem Probleme hast, gibt es das Internet. Mit klugen Stichwörtern auf Google suchen, kann so manches Problem beheben.

BITTE nutze diese Gelegenheiten und gebe nicht auf, wenn du erst einmal nicht findest.
Ich habe mir das Programmieren selber beigebracht. Häufig ist es sehr frustrierend, weil man nicht direkt herausfindet, wie ein Problem zu lösen ist. Wenn du aber immer wieder probierst und testest (UND NICHT GLEICH AUFGIBST, NUR WEIL DA EINE KOMISCHE FEHLERMELDUNG AUFTAUCHT), wirst du aber früher oder später zur Lösung kommen.
Auch bei diesem Projekt habe ich bereits mehrere Stunden nur an einem Problem gehockt und wollte schon fast aufgeben. Aber genau das ist der Fehler, denn: GIB NIEMALS AUF! und ARBEITE SELBSTSTÄNDIG!
Ich habe niemanden, denn ich fragen kann. Dass du mich fragen kannst, wenn du Probleme hast, ist für deine Entwicklung negativ, denn du erlernst nicht die notwendige Problemlösefähigkeit.
FRAGE MICH ALSO SO WENIG WIE MÖGLICH!

c)

Beachte, das es lange dauert und aufwendig ist, solche Issues zu schreiben. Alleine würde ich für die Funktion maximal 10 Minuten brauchen. Ich möchte dich aber einbinden.
Ich mache das freiwillig und opfer dafür meine Freizeit (bzw. Zeit zum Lernen für Klausuren etc.).
BITTE begegne dies mit dem notwendigen Respekt. Ich fordere nicht von dir, jeden Tag am Projekt zu arbeiten. Sehr wohl fordere ich aber:

  • Für ein Issue weniger als eine Woche zu brauchen
  • MIR ZU ANTWORTEN, WENN ICH DIR SCHREIBE
  • Nicht bei jeder Kleinigkeit aufzugeben und mir direkt zu schreiben.

d)

Vielen Dank, dass du bis hierhin gelesen hast.
Falls sich der Text bösartig angehört hat, so war er nicht gemeint!

Werkzeugeinstellungen entwickeln

Werkzeugeinstellungen entwickeln, wie:

  • Pinselgröße verändern
    • Pinselgröße als Einstellung hinzufügen
    • Pinselgröße soll sich nicht auf die Schönheit der Zeichnungen negativ auswirken
  • Hintergrundfarbe
  • Hintergrundbild
  • Schriftfarbe
  • Bildgröße
  • Schriftart
  • Füllen zwischen Randfarbe

...

Speichern

Funktion, das Bild zu speichern, hinzufügen. [DONE NOW]

  • Warnung hinzufügen: "Die Datei "examplePath\example.png" existiert bereits. Möchtest du sie wirklich überschreiben?"

@CaptainGarry #17 it's your turn

Tastenkombinationen

  • STRG - Z (UNDO)
  • STRG - Y (REDO)
  • STRG - S (Bild speichern)
  • STRG - C (IFTextField Inhalt kopieren)
  • ENTER bei IFDialog

Jonathan - Todo2

Jonathan TODO Nr.2 @CaptainGarry

  • erstelle eine Klasse, die ein kleines Infofenster ist, indem...
    • die neueste Version des Programms pullst
    • du in BlueJ eine neue Klasse "Info" hinzufügst
    • du java.awt und java.util importierst
    • du das zugehörige Frame deklarierst und in der Konstruktormethode initialisierst (orientiere dich an der Surface-Klasse)
    • du wie in der Surface-Klasse und im DrawSimulator den WindowListener hinzufügst
    • du in der Konstruktormethode einen String als Parameter verlangst und als Label (siehe auch hier die Surface-Klasse) darstellst
    • du das Layout auf null setzt: setLayout(null)
    • du das Fenster nicht zu groß machst (es soll ja nur eine Warnmeldung oder Infomeldung sein sein) und in der Mitte des Bildschirms platzierst -> Verwende f.setLocation(x,y) und f.setSize(w,h).
    • du einen OK-Button hinzufügst (siehe z.B. den Clear-Button in der Surface-Klasse).
    • nach dem Vorbild anderer Buttons der Surface-Klasse einen MouseListener hinzufügst
    • du das Ganze ausprobierst, indem du einen Rechtsklick auf die Info-Klasse in BlueJ machst, und "new Info()" anklickst
    • du zusätzlich einen boolean als Parameter verlangst. Wenn der true ist, kannst du den Text über den Befehl setForegroundColor(new Color(255,0,0)) rot färben.
    • du, nachdem alles wunderbar funktioniert, den Code committest und pushest ( AUF DIE DEV )

Jonathan Todo4 nach #1, #17 und #28

Jonathan - TODO nach #1, #17 und #28 @CaptainGarry

Das hier is eine einfache Todo, die du auch komplett allein und ohne meine Hilfe machen kannst.

  • Starte BlueJ
  • Starte GitHub Desktop und pulle die aktuelle Version des Projekts
  • Öffne die Surface-Klasse
  • Relativ weit unten findest du die public void refresh(). Dort ist wieder eine switch, die - je nachdem, welches Werkzeug du ausgewählt hast - eine InfoBox hervorruft. Bisher ist das nur für case 5:, also für das Vieleck vorhanden.
  • Führe das Projekt aus und sieh dir die Info-Kästen an, der erscheint, wenn du auf das Vieleck gehst.
  • Deine Aufgabe besteht darin, nach dem Vorbild des Vielecks für die anderen Werkzeuge auch solche Info-Kästen zu machen, die kurz erklären, was man machen muss, um z.B. eine Linie zu zeichnen. Meist genügt ein Kasten pro Werkzeug. Hilfe kann auch das Wiki bieten. In der deutschen Version findest du unter Werkzeuge bereits kurze Beschreibungen.
    • Verwende dazu, wie bei case 5: bereits gemacht, die Methode createInfoBox. Diese Methode benötigt folgende Parameter:
      1) int: y (die Y-Position der Info-Box)
      2) String: txt (die Information als Text)
      3) Color: bgColor (die Hintergrundfarbe der Info-Box)
    • Achte einigermaßen auf Rechtschreibung, Zeichensetzung, Syntax und Grammatik.
  • Lade anschließend deine Änderungen mit GitHub Desktop hoch.

Danke für deine Mithilfe

IFTextField verbessern

  • horizontal scrollen
  • einfügen in der Mitte des Textes
  • aus Zwischenablage nur bei Text einfügen
  • Text darf nicht über Rahmen gehen
  • +/- auch, wenn Textfeld leer ist.

Text Info Box @CaptainGarry

  • neuste Version pullen
  • Info Box für Text hinzufügen
  • Werkzeuge für Text um 55 in y-Richtung verschieben
  • (EDIT durch @KarstenRoemling) Info Boxes für Spiegeln und Farbe kriegen
  • auf dev2 pushen

Neues Design überall durchsetzen

Das neue Design, dass ich über ein BufferedImage erstellt habe, überall durchsetzen und damit #11 fortsetzen.

  • eigenes Textfield erstellen
  • und durchsetzen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.