Red de conocimiento informático - Conocimientos de programación - Pentagrama de programación completa

Pentagrama de programación completa

La clase pública MiniDraw implementa ActionListener, detector de mouse {//Campos private JFrame frame = new JFrame(" MiniDraw ");

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

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>

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){

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í

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();

}}