Pentagrama de programación completa
lienzo de dibujo privado = nuevo lienzo de dibujo(); JButton privado colorButton//botón de color, este manera podemos cambiar su fondo al color actual.
Campo de texto privado JTextField; //Campo utilizado para ingresar el texto que se colocará en el lienzo //Campo utilizado para registrar la información requerida para realizar la siguiente operación
Operaciones de enumeración privadas { Línea, Rectificado, Óvalo, Triángulo, Texto, Punto, Mover, Eliminar, Empujar, Tirar}. private int presionadoX//La posición donde se presionó el mouse
Private int presionadoY//La posición donde se presionó el mouse
Acción privada currentAction = acción. line;
Color privado currentColor = Color.black lista de distribución personal<Shapes>shapes = new ArrayList<Shapes>();
/** El constructor configura la GUI. */
MiniDraw público(){
frame.setSize(800, 600); //Área gráfica
lienzo addmouse (this);
frame.getContentPane(). add(canvas, BorderLayout. center); // botón
panel superior JPanel = new JPanel(); add(topPanel, BorderLayout. Norte);
JPanel botPanel = new JPanel()
frame.getContentPane(). agregar(botPanel, BorderLayout.
Sur;
addButton(topPanel, "Nuevo");
addButton(topPanel, "Abrir");
addButton(topPanel, "Guardar") ;
addButton(topPanel, "Eliminar");
addButton(topPanel, "Mover");
colorButton = addButton(topPanel, "Color") ; // Recuerda este botón para que podamos cambiar su color
addButton(topPanel, "Push"
addButton(topPanel, "Pull"); > p>
addButton(topPanel, "Reverse");
addButton(topPanel, "Salir"); add(new JLabel(" Formas:")); p >addButton(botPanel, "Line");
addButton(botPanel, "Rect");
addButton(botPanel, "Oval");
addButton (botPanel, "Triángulo");
addButton(botPanel, "Punto");
addButton(botPanel, "Texto"); new JTextField("Input text", 12);
botpanel add(new JLabel(":));
botpanel. add(textField); frame. set visible(true). ) ;
} /**Forma práctica de crear un nuevo botón y agregarlo al panel
Devolver el botón en caso de que lo necesitemos.
*/
JButton privado addButton(panel JPanel, nombre de cadena){
Botón JButton = nuevo JButton(nombre);
botón addactionlistener(this);
panel.add(button);
Botón Atrás;
} /**Botón de respuesta presionado*/acción de anulación pública realizada (evento de acción e ){
string button = e . getactioncommand();
//system out . printf(" Botón:% s \ n ", Botón // usado para depurar p>
if (button.equals("Nuevo"))
nuevo dibujo();
si no (button.equals("Abrir"))
abrir dibujo();
si no (button.equals("Guardar "))
guardar dibujo();
si no ( button.equals("Color "))
seleccione color();
si no (button.equals("Reverse "))
dibujo invertido( );
else if (button.equals("Salir "))
frame ;
else{ //
<. p>acción actual = acción valor de (botón); //Convertir cadena en acción.}
} /**Establece el color actual.
*También cambia el color del botón de color y establece el color de fondo del lienzo*/
Private void selectColor(){
Color new Color = jcolorchooser . showdialog( frame, "Seleccione un color para la nueva forma", Color actual);
if (newColor!=null){
currentColor = newColor
botón de color . establecer fondo(color actual);
}
} //Respuesta a eventos del mouse
/**Cuando se presiona el mouse, recuerde la posición para que en las siguientes situaciones la siguiente forma de construcción
*Se suelte el mouse. */
mouse vacío público presionado (evento del mouse e){
int x = e . >//system . printf(" Presionado en(% d, %d)\n ", x, y // usado para depurar
pressedX = x
presionadoY = y;
} /**Cuando se suelta el mouse, dependiendo de la operación actual,
*construye la forma que se está dibujando o la ejecuta
*the Realiza una operación (eliminar o mover) en la forma debajo del punto del mouse.
*/
ratón vacío público liberado (evento del mouse e){
int x = e . >//System.out.printf("Publicado en (%d, %d)\n ",x,y);//Para depurar
if (currentAction==Action.Move)< / p>
moverForma(presionadoX, presionadoY, x, y);
si no (acción actual==Acción. Eliminar)
eliminarForma(x, y);
p>
else if (currentAction==Action. push)
pushShapeBackward(x, y);
else if (currentAction==Action. pull)
pullShapeForward(x, y);
Otros
addShape(pressedX,pressedY, x, y);
} public void se hizo clic con el mouse (evento del mouse e){ }//Necesita cumplir con la interfaz
Necesita public void mouse enter(mouse event e){ }//Para cumplir con la interfaz
Necesita pública void mouse exited(mouse event e ){ }//Para satisfacer la interfaz
//Implementar métodos auxiliares para las operaciones con botones y mouse
/**Iniciar un nuevo dibujo. */
public void newDrawing(){
shapes = new ArrayList & ltshapes& gt();
canvas clear();
<. p>}/**Abra un archivo y lea todas las descripciones de formas en los gráficos actuales. */
public void openDrawing(){
cadena fname = selector de archivo open();
si (fname==null) regresa; p> p>
Pruebe {
Archivo del escáner = nuevo escáner(nuevo archivo(fname));
//System.out.printf("Abrir archivo %s\ n ", fname);
shapes = new ArrayList & ltshapes& gt();
while (file.hasNext()){
String shapetype = archivo .próximo().
toLowerCase();
if (shapetype.equals("oval "))
shapes.add(nueva elipse (archivo));
else if( tipo de forma es igual("rectángulo"))
shapes.add(nuevo rectángulo (archivo));
if (shapetype.equals("line"))
shapes.add(nueva línea(archivo));
if (shapetype.equals("textshape "))
shapes.add(new TextShape(archivo));
else if (shapetype.equals("Triangle"))
shapes.add(new Triangle (archivo));
else if (shapetype.equals) ("punto"))
formas . add(new Dot(file));
}
render();
}
catch(IOException e) {
sistema . println(e . getmessage());
e . >
}
} /**Guardar los gráficos actuales en un archivo. */
public void saveDrawing(){
string fname = selector de archivos save();
if (fname == null)
Regresar;
Prueba {
PrintStream f = new PrintStream(nuevo archivo(fname));
para (forma forma: forma)
p>f . println(forma . tostring());
f close()
}
catch(IOException ex) {
sistema . println(ej. getmessage());
ej. printstacktrace(); /p>
/**Devuelve la forma en la posición (x y), o nula si no existe dicha forma */
Forma pública findShape(int x, int y){ p>
for(int I = formas . size()-1;i>=0;i - ){ //Debe regresar, por lo que no se puede usar foreach
forma forma = formas get (I. );
if (shape.pointOnShape(x, y))
Devolver forma;
}
Devolver nulo/ /No se puede encontrar forma en la posición
}
/**Mover la forma debajo de la posición presionada por el mouse (presionadoX, presionadoY)
Ir al lugar donde está el mouse .
Es decir, moverlo a través de (newX-pressedX) y (newY-pressedY)
*/
public void moveShape(int fromX, int fromY, int toX , int toY){
//System.out.printf("Mover la forma debajo de (%d, %d) a (%d, %d)\n ", presionadoX, presionadoY, newX, newY); //Para depurar
Forma forma = findShape(fromX, fromY);
If (shape!=null)
shape.moveBy ((toX-fromX), (toY-fromY));
render();
} /**Eliminar la forma debajo de la posición de liberación del mouse (x, y)
p>*/
public void eliminarForma(int x, int y){ for (Forma forma: formas) {
if ( forma.pointOnShape(x , y) )
formas . eliminar(forma);
}
render(); p>/ **Acerque la forma debajo del mouse al "frente"
del dibujo*/
public void pullShapeForward(int x, int y){
// System.out.printf("Avanza la forma debajo de (%d, %d)\n ", x, y); //Para depurar
//Tu código es en Aquí
Forma forma = findShape(x,y);
if (forma!=null) {
int index = formas índice de(forma). ) ;
if(index & lt; formas.tamaño()-1){
formas.remove(índice);
formas.add(índice+ 1, forma);
}
render();
}
}
/** Empuje la forma debajo del mouse a otra posición desde el "frente"
*/ del dibujo
public void pushShapeBackward(int x, int y){
/ /System.out.printf("Empuja la forma debajo de (%d, %d) hacia atrás\n ", x, y); //Para depurar
//Tu código va aquí p>
Forma forma = findShape(x, y);
if (forma! =null ){
int index = índice de formas de(forma);
if(índice & gt; 0 )
formas.remove(índice) ;
shapes.add(index-1, forma);
}
render();
}
/**Invertir el orden de las formas en el dibujo*/
public void dibujo invertido(){ List <Shapes>temp = new ArrayList<Shapes>();
while(shapes . tamaño()>; 0 ) {
temp .
tamaño()-1));
}
Forma=temperatura;
render();
}
/**Construya un nuevo objeto de forma del tipo apropiado (dependiendo de la operación actual)
Utilice el constructor apropiado de la clase Línea, Rectángulo, Óvalo, Forma de Texto o Triángulo.
Agrega la forma a la colección de formas en el dibujo y
renderiza la forma en el lienzo*/
public void addShape(int x1, int y1, int x2, int y2){
//System.out.printf("Dibuja la forma %s, ubicada en (%d, %d)-(%d, %d)\n ", currentAction , presionadoX, presionadoY, x, y); // para depurar
Forma forma = null
if (currentAction==Action.line)
formas. add(new row(x1, y1, x2, y2, color actual));
if (currentAction==Action.Triangle)
shapes.add(new Triangle(x1, y1, x2, y2, color actual));
if (currentAction==Action.dot)
shapes.add(new Dot(x2, y2, color actual));
else if (currentAction==Action.Text)
shapes.add(new TextShape(x2, y2, textField.getText(), color actual));
En caso contrario{
int left= Math.min(x1, x2);
int top= Math.min(y1, y2);
int ancho = matemática ABS(x 1-x2);
int altura = matemática ABS(y 1-y2);
if (acciónactual==Acción.Rect)
shapes.add(nuevo rectángulo (izquierda, arriba, ancho, alto, color actual));
else if (currentAction==Action. Ellipse)
formas.add(new Oval(izquierda, arriba, ancho, alto, color actual));
}
render();
} renderizado público vacío (){
lienzo . clear(false);
para (forma forma: forma){
forma.render(lienzo);
p>
}
canvas.display().
} public static void main(String args[]){
new MiniDraw();
}}