(1) Définissez d'abord la classe à mettre en œuvre, je définis d'abord une classe abstraite
La copie de code est la suivante:
//Graphique
Forme de classe abstraite {
int x, y;
int x1, y1;
Couleur couleur;
Graphiques G;
type d'octet;
Draw Void Abstract (Graphics G);
}
//Ligne droite
Ligne de la classe étend la forme {
Laux publics (int x, int y, int x1, int y1, couleur couleur) {
this.x = x;
this.y = y;
this.x1 = x1;
this.y1 = y1;
this.color = couleur;
this.type = 0;
}
@Outrepasser
Draw du public (graphiques G) {
g.setColor (couleur);
G.Drawline (x, y, x1, y1);
}
}
// CLASSE CLAST
classe ovalShape étend la forme {
Public OvalShape (int x, int y, int x1, int y1, couleur couleur) {
this.x = x;
this.y = y;
this.x1 = x1;
this.y1 = y1;
this.color = couleur;
this.ype = 1;
}
@Outrepasser
Draw du public (graphiques G) {
g.setColor (couleur);
G.Drawoval ((x + x1) / 2, (y + y1) / 2, (x1-x) / 2, (y1-y) / 2);
}
}
// images
L'image de classe étend la forme {
int a;
int b;
int cl [] [];
Photo public (int a, int b, int cl [] []) {
this.type = 2;
this.a = a;
this.b = b;
this.cl = cl;
}
Draw du public (graphiques G) {
pour (int k = 0; k <a; k ++) {
pour (int j = 0; j <b; j ++) {
Couleur c = nouvelle couleur (cl [k] [j]);
g.setColor (c);
G.Drawline (K + 100, J + 100, K + 100, J + 100);
}
}
}
}
(2) Classe de méthode totale
La copie de code est la suivante:
classe publique bmpsavestart {
Graphiques G;
public static void main (String [] args) {
new BmpsaveStart () .ui ();
}
public void ui () {
Jframe jf = new JFrame ();
JF.SetSize (600 600);
jf.setTitle ("stockage de l'image");
jf.setbackground (color.white);
JMenubar Bar = new JMenubar ();
JMenu menu1 = new JMenu ("Option");
JMenuItem M1 = new JMenuItem ("Draw a Circle");
JMenuItem M2 = new JMenuItem ("Draw Line");
JMenuItem M3 = new JMenuItem ("Storage");
JMenuItem M4 = new JMenuItem ("Open");
JMenuItem M5 = new JMenuItem ("image");
menu1.add (M1);
menu1.add (m2);
menu1.add (M3);
menu1.add (M4);
menu1.add (M5);
bar.add (menu1);
jf.setJMenubar (bar);
jf.setDefaultCloseOperation (3);
jf.setVisible (true);
PaintDemo P = new PaintDemo (G, JF);
m1.setActionCommand ("Draw a Circle");
M2.SetActionCommand ("Draw Line");
m3.SetActionCommand ("Storage");
M4.SetActionCommand ("Open");
M5.SetActionCommand ("Picture");
M1.AddactionListener (P);
M2.AddactionListener (P);
M3.AddactionListener (P);
M4.AddactionListener (P);
M5.AddactionListener (P);
}
}
(3) la classe de surveillance
La copie de code est la suivante:
Class PaintDemo implémente MouseListener, ActionListener {
ImageIcon img = new ImageIcon ("images / 100.gif");
BufferedImage bufimage = new BufferedImage (img.getIConWidth (), img.getIConHeight (), bufferedImage.type_int_rgb);
int x, y;
int x1, y1;
JFrame JF;
Graphiques G;
String Str;
Couleur C;
int cr;
int cl [] [] = new int [1000] [1000];
ArrayList <Spel> Shapes = new ArrayList <Spel> ();
Aléatoire aléatoire = nouveau aléatoire ();
int r;
int g;
int b;
Public PaintDemo (Graphics G, Jframe JF) {
this.jf = jf;
this.g = jf.getGraphics ();
}
@Outrepasser
public void mourissé (Mouseevent e) {
// Talage de méthode générée automatiquement de TODO
}
@Outrepasser
public void Mousdressressed (Mouseevent e) {
x = e.getx ();
y = e.gety ();
}
@Outrepasser
public void MouseLelent (Mouseevent e) {
x1 = e.getx ();
y1 = e.gety ();
setColor ();
if (str.equals ("dessiner un cercle") {
// peinture ();
Forme de forme = nouveau ovalShape (x, y, x1, y1, c);
forme.raw (g);
formes.add (forme);
}
if (str.equals ("draw line") {
// peintline ();
Forme de forme = Nouveau lines de lines (x, y, x1, y1, c);
forme.raw (g);
formes.add (forme);
/ * Fichier f = nouveau fichier ("d: //test.txt");
if (f == null) {
essayer {
f.CreateEnewFile ();
} catch (exception e1) {
// Bloc de capture généré automatiquement de TODO
e1.printStackTrace ();
}
} * /
}
}
public void SaveFile (Chemin de chaîne, ArrayList <Spel> Formes) {
essayer{
// flux de sortie de fichier
FileOutputStream fos = new FileOutputStream (path);
// Enveloppez le flux de sortie du fichier dans un flux de type de base en scénario
DataOutputStream DOS = new DataOutputStream (FOS);
Dos.WriteInt (Shapes.Size ()); // Le nombre de figures écrites dans la file d'attente
// Lire la file d'attente
pour (int i = 0; i <shapes.size (); i ++) {
// retirer une forme
Forme de forme = formes.get (i);
Type d'octet = forme.type;
if (type == 0) {// juge le type selon le type, s'il s'agit d'une ligne droite
System.out.println ("Démarrer la ligne de stockage");
Dos.WriteByte (type);
Ligne de lines = ((lines de ligne)
// Écrivez des données sur les lignes droites;
int x = line.x;
int y = line.y;
int x1 = line.x1;
int y1 = line.y1;
Couleur color = line.color;
cr = colore.getrgb ();
Dos.WriteInt (x);
Dos.WriteInt (Y);
Dos.WriteInt (x1);
Dos.WriteInt (Y1);
Dos.WriteInt (CR);
} else if (type == 1) {
Dos.WriteByte (type);
System.out.println ("Démarrer le stockage du cercle");
OVALSHAPE OVAL = (OVALSHAPE) Forme; // Convertir en capte en classe de cercle
// Écrivez des données sur les lignes droites;
int x = oval.x;
int y = ovale.y;
int x1 = oval.x1;
int y1 = ovale.y1;
Couleur couleur = ovale.color;
cr = colore.getrgb ();
Dos.WriteInt (x);
Dos.WriteInt (Y);
Dos.WriteInt (x1);
Dos.WriteInt (Y1);
Dos.WriteInt (CR);
} else if (type == 2) {
Dos.WriteByte (type);
image pl = (image) forme;
System.out.println ("Démarrer les images");
int largeur = pl.a;
int hauteur = pl.b;
Dos.WriteInt (largeur);
Dos.WriteInt (hauteur);
pour (int k = 0; k <largeur; k ++) {
pour (int j = 0; j <hauteur; j ++) {
int t = pl.cl [k] [j];
Dos.WriteInt (T);
}
}
}
}
Dos.Flush ();
fos.close ();
} catch (exception e) {
e.printStackTrace ();
}
}
public ArrayList <Spel> readFile (String Path) {
essayer{
// Créez le flux d'entrée de l'objet de fichier
FileInputStream fis = new FileInputStream (path);
// enveloppe le flux d'entrée de fichier dans un flux de types de base lisibles
DatAnputStream dis = new DataRainputStream (FIS);
// Lire d'abord la longueur du fichier, c'est-à-dire le nombre total de formes
int len = dis.readInt ();
pour (int i = 0; i <len; i ++) {
Type d'octet = dis.readByte ();
if (type == 0) {
int a = dis.readInt ();
int b = dis.readInt ();
int c = dis.readInt ();
int d = dis.readInt ();
Couleur f = nouvelle couleur (dis.readInt ());
Ligne de lines de lignes = Nouveau lines de lines (a, b, c, d, f);
// Lire les paramètres des lignes droites
// Enregistrer les lignes droites dans la file d'attente
formes.add (ligne);
} else if (type == 1) {
int a = dis.readInt ();
int b = dis.readInt ();
int c = dis.readInt ();
int d = dis.readInt ();
Couleur f = nouvelle couleur (dis.readInt ());
System.out.println ("Start Reading Circle");
OVALSHAPE OVAL = NOUVEAU OVALSHAPE (A, B, C, D, F);
formes.add (ovale);
} else if (type == 2) {
int a = dis.readInt ();
int b = dis.readInt ();
pour (int k = 0; k <a; k ++) {
pour (int j = 0; j <b; j ++) {
cl [k] [j] = dis.readInt ();
}
}
image pic = nouvelle image (a, b, cl);
formes.add (pic);
}
}} catch (exception e) {
e.printStackTrace ();
}
formes de retour;
}
@Outrepasser
public void muouseentered (Mouseevent e) {
// Talage de méthode générée automatiquement de TODO
}
@Outrepasser
public void Mouseexit (Mouseevent e) {
// Talage de méthode générée automatiquement de TODO
}
public void setColor () {
R = random.nextint (255);
G = random.nextint (255);
B = random.nextint (255);
c = nouvelle couleur (r, g, b);
}
/ * public void peintline () {
setColor ();
G.Drawline (x, y, x1, y1);
}
public void peintoval () {
setColor ();
G.Drawoval ((x + x1) / 2, (y + y1) / 2, (x1-x) / 2, (y1-y) / 2);
}
* /
@Outrepasser
public void ActionPerformed (ActionEvent e) {
str = e.getActionCommand ();
JF.AddMouseListener (this);
if (str.equals ("stockage")) {
SaveFile ("d: //test.txt", Shapes);
}
if (str.equals ("open")) {
readFile ("d: //test.txt");
pour (int i = 0; i <shapes.size (); i ++) {
Forme de forme = formes.get (i);
if (forme.type == 0) {
System.out.println ("Déterminez qu'il s'agit d'un type de cercle");
Ligne de lines de surcouchage = (Lines) forme;
line.raw (g);
} else if (forme.type == 1) {
System.out.println ("Déterminez qu'il s'agit d'un type de cercle");
OvalShape ovale = (ovalShape) forme;
draw ovale (g);
} else if (forme.type == 2) {
System.out.println ("Confirmer que c'est le type d'image");
image pl = (image) forme;
Pl.-Draw (G);
}
}
}
if (str.equals ("image")) {
Thread th = nouveau thread (new Runnable () {
public void run () {
while (true) {
essayer{
Thread.Sleep (30);
Graphiques G1 = bufimage.getGraphics ();
G1.DrawImage (img.getImage (), 0,0, null);
jf.getGraphics (). Drawimage (Bufimage, 100,100, null);
int width = bufimage.getWidth ();
int height = bufimage.getheight ();
pour (int k = 0; k <largeur; k ++) {
pour (int j = 0; j <hauteur; j ++) {
int p = bufimage.getrgb (k, j);
cl [k] [j] = p;
}
}
image pe = nouvelle image (largeur, hauteur, cl);
Shapes.Add (PE);
} catch (exception e) {
e.printStackTrace ();
}
}
}});
Th.start ();
}
}
}