HOME | DD

MenInASuitcase — Java paint

Published: 2010-05-02 18:26:44 +0000 UTC; Views: 2249; Favourites: 19; Downloads: 34
Redirect to original
Description Today i start to code a Paint application using java and Eclipse,
i can't upload this to let people try it on deviantart so i took some screenshot i'm pretty proud that i made this in one day, i started learning Java 2 weeks ago i got alot inactiv on DA because of this, those two last weeks i did use from 5 to 10 hours to learn Java everyday it was not easy at all ...
------------------------
EDIT : DOWNLOAD HERE
Related content
Comments: 47

admx [2010-05-05 14:26:37 +0000 UTC]

o_____O; 2 weeks ago?! That's soooo awesome! You're waaay too good at this =]

👍: 0 ⏩: 1

MenInASuitcase In reply to admx [2010-05-05 18:09:07 +0000 UTC]

thanks yes two weeks ago but i already know some other programming languages sont i didn't restart to learn from zero, if so i couldn't have learned it so fast

👍: 0 ⏩: 1

admx In reply to MenInASuitcase [2010-05-07 16:32:30 +0000 UTC]

oooohhhhh! That's cheating!

👍: 0 ⏩: 0

NejynFrenchCancan [2010-05-04 16:34:30 +0000 UTC]

ha I wanna learn FLASH, that would be a first for me ^^ It's great and you're right, we should always look forward to learn new stuff on our own !

👍: 0 ⏩: 1

MenInASuitcase In reply to NejynFrenchCancan [2010-05-05 11:13:53 +0000 UTC]

thank you flash is pretty hard to learn, but after some hours of practicing you could already do nice stuff there are alot of tutorial on internet and i learned flash on my own so i think it is great, but i started practicing Java as Flash is not a free software

👍: 0 ⏩: 1

NejynFrenchCancan In reply to MenInASuitcase [2010-05-05 13:41:00 +0000 UTC]

i'm such a noob...what's the beginning for animating picture ? flash ? java ?

I'm from France, and I was so jealous when I saw that in the UK, in the community school I teached for 1 year as a student, they were learning how to do flash animation...at 12 !!! ^^

I have so many characters to animate

👍: 0 ⏩: 1

MenInASuitcase In reply to NejynFrenchCancan [2010-05-05 17:25:10 +0000 UTC]

han tu est français xD ba moi aussi
Je ne vois pas très bien ce que tu veut dire par animer des images si c'est une animation non dynamique (par exemple pas aidé par la souris) il est tous a fais possible de faire un simple animation Gif pas besoin de savoir programmer, parcontre si c'est dynamique et qu'il y ades interactions avec l'utilisateur la oui il faut un language de programmation

👍: 0 ⏩: 1

NejynFrenchCancan In reply to MenInASuitcase [2010-05-06 07:07:02 +0000 UTC]

hmm en fait j'ai déjà essayé, je ne sais plus avec quel programme, et le problème est que même en prenant des images 50x50, si je voulais une animation fluide, je me retrouvais avec des fichiers énormes...je crois que je n'ai pas assez étudié comment l'oeil capte le mouvement et peut être que j'ai mal découpé le mouvement pour pouvoir faire une animation en peu d'images...

L'autre soucis que j'ai souvent c'est qu'à l'enregistrement, si je travaille sur photoshop 7 par exemple, mon fichier GIF perd une grosse quantité de pixel, et l'image devient très moche (surtout quand je dois réduire à 50x50 ou meme 150x150).
Pour ça je crois que je ferais mieux de travailler avec du .png

D'ailleurs en fait j'ai le même soucis avec les icones (comme mon avatar), en général je prend une image haute définition, que je colle sur un fond 50x50 et je réduis à l'aide de l'outil "transformation", mais du coup, c'est pixellisé à mort, et mon image est d'une horrible qualité haha ^^
Donc par exemple je n'ai aucune idée de comment faire une image de qualité visuelle comme ton avatar ^^

Enfin je suppose qu'il y a des tutorial dans le coin il faudrait que je change mon avatar cet été

Bon courage pour Java !!

👍: 0 ⏩: 1

MenInASuitcase In reply to NejynFrenchCancan [2010-05-06 17:29:42 +0000 UTC]

oui le retaillement d'image pause souvent des problemes c'est pour cela que j'essaye de dessiner directement a la taille final, par exemple pour la plupart de mes travaux j'ouvre un document 50x50px et je dessine dessus avec l'outil pinceau taille 1px c'est long xD mais c'est plus propre

👍: 0 ⏩: 0

TheNeoShaman [2010-05-04 09:25:11 +0000 UTC]

omg dude, how can you do this so fast ? you are a computer ! ^^

👍: 0 ⏩: 1

MenInASuitcase In reply to TheNeoShaman [2010-05-04 16:06:29 +0000 UTC]

Merci ba avec de l'entrainement sa aide et puis c'est mon futur métier donc c'est normal je pense

👍: 0 ⏩: 1

TheNeoShaman In reply to MenInASuitcase [2010-05-05 09:50:32 +0000 UTC]

ouai forcement, mais bon ca empêche pas que tu m'impressionnes ^^

👍: 0 ⏩: 0

Emmuls [2010-05-03 20:18:27 +0000 UTC]

Looks great! Awesome that you learned something new and glad to see you around again

👍: 0 ⏩: 1

MenInASuitcase In reply to Emmuls [2010-05-04 09:26:25 +0000 UTC]

thank you

👍: 0 ⏩: 1

Emmuls In reply to MenInASuitcase [2010-05-04 10:14:21 +0000 UTC]

Of course

👍: 0 ⏩: 0

Tifa22 [2010-05-03 17:06:38 +0000 UTC]

Looks cool! Great job, and awesome you learned it

👍: 0 ⏩: 1

MenInASuitcase In reply to Tifa22 [2010-05-03 19:34:38 +0000 UTC]

thank you

👍: 0 ⏩: 1

Tifa22 In reply to MenInASuitcase [2010-05-04 15:40:50 +0000 UTC]

Very welcome!

👍: 0 ⏩: 0

Rekano [2010-05-03 09:43:21 +0000 UTC]

One day we will see your paint program as a rival of Photoshop? *icongrin--plz:
You will need like 200 people to make something similar

👍: 0 ⏩: 1

MenInASuitcase In reply to Rekano [2010-05-03 19:35:09 +0000 UTC]

yes i think so that would be pretty hard xD thank you

👍: 0 ⏩: 1

Rekano In reply to MenInASuitcase [2010-05-04 07:37:58 +0000 UTC]

👍: 0 ⏩: 0

MohawkWabbit32 [2010-05-02 22:21:33 +0000 UTC]

have u ever heard of Family Force 5? I just saw them at a concert, and Skillet too! i love skillet! <3 aghhh they make my heart sing!! lulz..sorry for the random messege lol

👍: 0 ⏩: 1

MenInASuitcase In reply to MohawkWabbit32 [2010-05-03 19:35:51 +0000 UTC]

yes i like them i know then since some years and they make fun song

👍: 0 ⏩: 1

MohawkWabbit32 In reply to MenInASuitcase [2010-05-03 21:17:52 +0000 UTC]

yah my legs hurt from jumping aaround and my throat hurts from screaming to them lol i was all like "I LOVE YOU!!" and a guy in the crowd turns around and says i love you too!! that day i felt very loved lol
i wana give u a hug too!

👍: 0 ⏩: 0

harukun216 [2010-05-02 21:10:28 +0000 UTC]

Yay

👍: 0 ⏩: 1

MenInASuitcase In reply to harukun216 [2010-05-03 19:36:27 +0000 UTC]

👍: 0 ⏩: 0

ElderKitsune [2010-05-02 19:53:19 +0000 UTC]

Interesting... but I'm not sure that Java is a good language for this kind of application... perhaps with a better JVM as promised for Java7 (but I don't think so).

Ce n'est que mon avis de développeur Java... mais tu as bien raison d'apprendre en te faisant plaisir (?). Tout dépend de tes connaissances mais petit conseil pour l'objet en général:
- coder est important mais pas suffisant... il faut capter ce qu'est (et n'est pas) l'objet et passer beaucoup de temps à l'analyse (comment développer au mieux les différents composants).
- je préfère le fond à la forme... je préfererai un beau diagramme UML de comment tu as développé ton application plutôt que le joujou en état de marche (réflexe du type sensible au développement objet et dont c'est le boulot ... mais pour moi, l'objet est une forme d'art )

(fin du mode semi-donneur de leçon )

👍: 0 ⏩: 1

MenInASuitcase In reply to ElderKitsune [2010-05-02 20:38:03 +0000 UTC]

haha j'entends mais profs parler comme sa tous le temps
Mais oui il est vrai que les screenshots ne donne aucun indice sur la façon dont a été faite l'application.
En faite je suis entrain de faire le tutoriel sur Java du site du zero
Je me suis bien amusé avec avant de regarder la correction, et je l'ai même pousser plus loin quand j'ai vu que cela m'a bien plus et que j'ai réussi a le faire sans trop mettre de temps.
Je ne suis malheureusement par encore complètement a l'aise avec tous les termes UML même si je sais les utiliser pour les langages que je connais, mais c'est une idées intéressante, je vais essayer de faire l'UML de cette application, je ferais l'uptdate avec les screenshots quand je se sera fais si cela ne te dérange pas je pourrais te le montrer pour d'éventuelle conseil UML?

👍: 0 ⏩: 1

ElderKitsune In reply to MenInASuitcase [2010-05-03 10:51:39 +0000 UTC]

Faut pas se formaliser de trop sur les notations UML... ça sert avant tout à avoir les idées à peu près clair pour soi et pour les autres. Trop de gens se ruent sur le code sans réfléchir.

Oui, pas de problème, je peux toujours jeter un coup d'oeil (tant que je n'ai pas l'impression d'être au boulot une fois au repos ).

👍: 0 ⏩: 1

MenInASuitcase In reply to ElderKitsune [2010-05-05 18:06:10 +0000 UTC]

Voila j'ai ajouté le schéma du modèle UML de mon application en dessous des printscreen, j'ai fais ce schéma hier et j'ai encore travaillé dessus aujourd'hui donc ce schéma a déjà évolué, et c'est en le faisant que je me suis rendu compte de certaines choses que je pourrais modifier ou certaines amélioration que j'aimerais apporter.
Par exemple pourrais tu me dire ce que tu pense de ceci, j'aimerais faire différentes classe pour sauvegarder sous différent extension les projet.

Pour l'instant je peu uniquement enregistrer au format .txt, je compte faire un enregistrement XML et donc pour ceci je compte faire une interface pour implémenter mais différents fichier de sauvegarde, cela te semble-t-il correct? merci

👍: 0 ⏩: 1

ElderKitsune In reply to MenInASuitcase [2010-05-05 18:50:06 +0000 UTC]



C'est le propre du schéma d'évoluer... quand ça bouge peu c'est louche.

Bon, par où commencer...
En fait, il n'y a pas de (trop) mauvaise façon de faire, je vais juste essayer de te faire comprendre la puissance de l'objet.

Le fait de découpler le dessin (PlancheDessin) du Point dessiné (de sa représentation mathématique disons) est une bonne chose. De même que décomposer Menu / Planche / JFrame.

Tu as donc réalisé une application qui remplit le cahier des charges, mais que se passe-t-il si on te demande un truc plus complexe... y a des chances que tu repartes de zéro... alors que la base n'est pas trop mal.

Donc, maintenant, je vais (faire de mon mieux pour) te montrer la où réside la puissance de l'objet en poussant le bouchon un peu plus loin (en gardant bien en tête, je me répète, que ce type d'application graphique n'est pas forcément très pertinent en Java ) : les interfaces.

Deux exemples:
- penses à tes points comme des formes. Tu as donc une interface Shape (ou Forme) de laquelle peuvent dériver Point, Rectangle et autres trucs (que l'on peut plus ou moins regrouper selon la réflexion)... voir même des images (pixellisés voire même vectorielles ) ...
- de l'autre côté, vois ta planche à dessin comme un truc plus complexe... genre une planche qui contient des planches (les fameuses couches ou "layers" de 'toshop ou Gimp et autres).

... et *paf*, conceptuellement bien sûr, tu transformes ton petit simili-Paint en un machin qui commence à avoir de la gueule.
Dans le même ordre d'idée, je vois que tu colories avec Color... peut-être peux-tu regrouper cela de façon à utiliser GradientPaint, de façon à placer des dégradés.

Pour revenir à ta question sur les sauvegardes sous différents formats c'est bien sûr une bonne idée... Si tu l'ignores, sache qu'il est également possible de sauvegarder tout ou partie de l'application elle-même (je détaille pas, mais en gros tu "sérialises" ta classe principale, ou une autre, qui a une référence sur tous les objets). Tu peux employer la même technique pour conserver le dessin en cours, une sorte de format natif de ton dessin (comme le xcf sous Gimp). Pour des sauvegardes plus traditionnelles (images notamment), des solutions existent. Pour le XML, c'est faisable relativement simplement si tes Points / couleurs, etc. (ou formes) sont à même de fournir une représentation en XML et de se composer ainsi (loadFromXML ; saveAsXML).
A toi de trouver la (ou les) meilleure(s) interface(s) possible(s) pour faire potentiellement le plus de choses possibles.

Le truc est d'arriver à rester le plus possible abstrait pour intégrer "facilement" des extensions. D'ailleurs, préfère le Input/OutputStream à l'ObjectInput/OutputStream (Load-Save).

Je ne peux pas dire pour certaines mises en oeuvre de tes classes, mais je ne suis pas fan des tableaux et des String... bon après, tout dépend de ce qui en est fait.

Après on peut en débattre longtemps... mais ça ne me dérange pas... faut laisser mûrir les idées aussi (concept totalement étranger à ceux qui foncent dans le tas et qui ne font pas de R&D et qui réinvente plein de fois la roue )...

👍: 0 ⏩: 1

MenInASuitcase In reply to ElderKitsune [2010-05-06 13:58:31 +0000 UTC]

Salut! Merci beaucoup de cette réponse très complete
Je vais essayer de tenir compte de tes remarques,
pour ce qu'il en ai de la serialisation des objets
j'avais justement fais quelques recherches et
c'est pour cela que ma classe Point implémente "serializable"
car mon enregistrement au format texte sauvegarde donc des objets point
serialisé!

Ton idée sur la gestion de calque a la totoshop est une très bonne idée
j'y avais pensé aussi mais je n'avais pas encore trop réfléchi a la facon de programmer cela

Merci encore pour tes conseils, je commence à beaucoup m'interesser au design pattern car je sais que mes classes sont pour l'instant très peu portable d'un projet a l'autre et je pense (je n'en suis pas sur car j'ai sommairement vu cela pour l'instant) que cela m'aideras a faire des classes réutilisables

👍: 0 ⏩: 1

ElderKitsune In reply to MenInASuitcase [2010-05-06 16:55:49 +0000 UTC]

Aucun problème, je suis plutôt bavard sur un certain nombre de sujets.

C'est parce que je pense large quand j'essaie de concevoir une application (qui peut le plus peut le moins) et parce que j'utilise ce genre de logiciel... Pour le côté technique de gestion de calque... je ne sais pas trop en fait, mais ça doit pouvoir se faire. (même si je ne choisirai pas Java pour faire une application de dessin, même si un certain nombre existe: les plug-ins de dessins d'Eclipse, des solutions pour faire de l'UML, etc.. A ce sujet, Netbeans est très bien pour faire des IHM en mode graphique (à ne conseiller que lorsqu'on sait se débrouiller sans ça ).

En fait, les patrons de conception sont des réponses éprouvées à un certain nombre de problèmes objet classiques (pas de place à la fantaisie ). C'est à toi de déterminer dans tes développements ce qui est portable ou non... d'où l'usage des interfaces en fait (et "accesoirement" des packages). C'est ce qui autorise la vraie flexibilité, la modularité et la réutilisabilité du code.
Sinon, le modèle le plus simple à piger est MVC (Modèle-Vue-Contrôleur) et pourtant c'est l'un des plus délicats à mettre vraiment en oeuvre. Tu l'utilises en partie avec tes Points (le Modèle) et PlancheDessin (à la fois Vue et Contrôleur). Comme tu fais du swing avec gestion d'évenéments, tu as déjà croisé le modèle Observer sans forcément le savoir (les Listeners & co) .
Il y a un certain nombre d'autres patrons de conception bien sûr: Factory, Builder, Command, Adapter, Memento sont les plus usités. Pour ce qui est des sauvegardes (voire même pour les undo - redo ), Memento peut t'aider...

👍: 0 ⏩: 1

MenInASuitcase In reply to ElderKitsune [2010-05-06 17:43:06 +0000 UTC]

Oui tu as tout a fais raison pour java
et l'application de dessin, en faite je l'ai fais car j'ai 5 projets
de fin d'année a produire pour mon exam de BTS
et après avoir fais les 3 premiers je me suis autorisé
un peu de fun en faisant un projet moins sérieux

Après mes exam je pense télécharger la version d'essai de flash CS5
qui me parait nettement plus approprié a ce type de travail
( et aussi parce que l'actionscript me manque un peu )
Ce qui m'amène sur le sujet de listener que tu as abordé et que j'ai effectivement
déjà utilisé en AS3 et en Java, même si l'idée de model observer reste quelque peu abstraite
cela ne m'a pas posé de problème lors de son utilisation.

En tous cas merci encore de ces précieux conseil! Je suis impatient d'en avoir fini
avec les exams pour pouvoir faire cette appli de dessin en flash, le flash étant
autorisé sur deviantart je pourrais ainsi en faire profiter tous le monde, et j'ai déjà
des idées sur comment intégrer des calques de dessin en AS3

👍: 0 ⏩: 1

ElderKitsune In reply to MenInASuitcase [2010-05-06 18:03:00 +0000 UTC]

Tout à fait, faut savoir se détendre... c'est pourquoi je ne fais aucune programmation ou développement pendant mes loisirs.

Flash ne m'attire guère, bien qu'il y ait parfois des mini-jeux rigolos par ici.

👍: 0 ⏩: 0

brokenBLOODEDwings [2010-05-02 19:13:23 +0000 UTC]

well done

👍: 0 ⏩: 1

MenInASuitcase In reply to brokenBLOODEDwings [2010-05-03 19:36:37 +0000 UTC]

thank you

👍: 0 ⏩: 0

popo78LeMalin [2010-05-02 19:02:11 +0000 UTC]

Si c'est toi qui là fait c'est super!. Mais pouruoqi toute c'est image?

👍: 0 ⏩: 2

MenInASuitcase In reply to popo78LeMalin [2010-05-03 19:37:12 +0000 UTC]

j'ai voulu montrer plusieur printscreen pour voir comment l'application est merci

👍: 0 ⏩: 0

Mythtern33 In reply to popo78LeMalin [2010-05-02 19:35:04 +0000 UTC]

lol tu hablo espanol. tu hablo ingles,o debo traducir?

👍: 0 ⏩: 0

HaDou-Ken [2010-05-02 18:31:49 +0000 UTC]

👍: 0 ⏩: 1

MenInASuitcase In reply to HaDou-Ken [2010-05-02 18:52:29 +0000 UTC]

👍: 0 ⏩: 0

LordMelchet [2010-05-02 18:30:24 +0000 UTC]

Love to have a Linux version when you're done!

👍: 0 ⏩: 1

MenInASuitcase In reply to LordMelchet [2010-05-02 18:54:24 +0000 UTC]

this one normally work on any operating system i done it with Java and you just need to install the Java Runtime Machine for your OS and then any Java apps should be working for you, you probably sure already have it installed as many apps from internet or Desktop apps need it

👍: 0 ⏩: 1

LordMelchet In reply to MenInASuitcase [2010-05-02 19:04:51 +0000 UTC]

I use Linux so it's not installed at the moment but I can get it, no problem. Thanks

👍: 0 ⏩: 0

psychoplumbers [2010-05-02 18:28:10 +0000 UTC]

WOWOWOWOWOWOWOWOWOWOWOWOWOWOWOWWW! *W* Awesome!

👍: 0 ⏩: 1

MenInASuitcase In reply to psychoplumbers [2010-05-02 18:55:27 +0000 UTC]

thank you

👍: 0 ⏩: 0