Agregando 2 formas al mismo tiempo en un JFrame -- java campo con swing campo con java-2d campo con jcomponent camp Relacionados El problema

Adding 2 shapes at the same time on a jFrame


0
vote

problema

Español

Leí muchas otras publicaciones con respecto a esto y aprendí que el marco se establece en BorderLayout de forma predeterminada. Agregué una forma al oeste y una forma al centro del marco. Pero aun así, solo una forma aparece en el marco. La forma que aparece en el marco es la que está en el centro.

Aquí está el código:

  bool ageIsValid(ListElement person , int ageCategory); 5  

Te advierto que el otro código es bastante largo. Aquí está el componente del rectángulo:

  bool ageIsValid(ListElement person , int ageCategory); 6  

Aquí está el componente del círculo:

  bool ageIsValid(ListElement person , int ageCategory); 7  

Aquí está Circle:

  bool ageIsValid(ListElement person , int ageCategory); 8  

Aquí está la forma del rectángulo:

  bool ageIsValid(ListElement person , int ageCategory); 9  

Aquí está la forma del compuesto:

      static List listFilterCustom(List list , int age){         static bool filterByAge(ListElement element){             /* pAge = getAgeOfPerson(element); */             return pAge == age;         }         return listFilter(list , filterByAge);      } 0  
Original en ingles

I read many other posts regarding this and I learned that the frame is set to BorderLayout by default. I added one shape to the west and one shape to the center of the frame. But still, only one shape comes up on the frame. The shape that comes up on the frame is the one whose location is at center.

Here is the code:

import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;  import javax.swing.*;  public class ShapeMover {    private static final int FRAME_WIDTH  = 400;   private static final int FRAME_HEIGHT = 400;   private static final int SHAPE_WIDTH  = 50;   private static final int INITIAL_X  = 30;   private static final int INITIAL_Y  = 100;   private static final int rec_x = 200;   private static final int rec_y = 200;   private static final int rec_height = 30;   private static final int rec_width = 50;    private boolean recToggle = true;   private boolean circleToggle = true;    private JFrame frame;   private CircleComponent myShape;   private RectangleComponent recShape;   private JButton circle, rectangle;   private JPanel panel, panel2;    private void initialSetUp() {       frame = new JFrame();      myShape = new CircleComponent(INITIAL_X, INITIAL_Y, SHAPE_WIDTH);     recShape = new RectangleComponent(rec_x, rec_y,rec_height, rec_width);      circle = new JButton("Click for circle");     event c = new event();     circle.addActionListener(c);      rectangle = new JButton("Click for rectangle");     event2 r = new event2();     rectangle.addActionListener(r);     panel = new JPanel();     panel.add(circle);     panel.add(rectangle);     frame.add(panel, BorderLayout.NORTH);       frame.add(myShape, BorderLayout.WEST);     frame.add(recShape,BorderLayout.CENTER);     myShape.setVisible(false);     recShape.setVisible(false);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);     frame.setVisible(true);    } //method    public class event implements ActionListener{     @Override     public void actionPerformed(ActionEvent e) {         if(circleToggle == true){             myShape.setVisible(true);             circleToggle = false;         }         else{             myShape.setVisible(false);             circleToggle = true;         }         }   }    public class event2 implements ActionListener{       @Override       public void actionPerformed(ActionEvent e){           if(recToggle == true){               recShape.setVisible(true);               recToggle = false;           }           else{               recShape.setVisible(false);               recToggle = true;           }           }   }     public static void main(String[] args) {      ShapeMover sm = new ShapeMover();     sm.initialSetUp();    } //main  } //class 

I warn you the other code is pretty long. Here is rectangle component:

    import java.awt.Graphics;     import java.awt.Graphics2D;     import java.awt.Point;     import java.awt.event.MouseAdapter;     import java.awt.event.MouseEvent;     import java.awt.event.MouseMotionAdapter;     import javax.swing.JComponent;      public class RectangleComponent extends JComponent{         private CompoundShape shape2;         private Point mousePoint2;      public RectangleComponent(int x, int y, int height, int width){           shape2 = new RectangleShape(x, y, height, width);           addMouseListener(new MouseAdapter(){               @Override               public void mousePressed(MouseEvent event2){                   mousePoint2 = event2.getPoint();                   if(!shape2.contains(mousePoint2)){                       mousePoint2 = null;                   }               }           });            addMouseMotionListener(new MouseMotionAdapter(){               @Override               public void mouseDragged(MouseEvent event2){                   if(mousePoint2 == null){                       return;                   }                   Point lastMousePoint2 = mousePoint2;                   mousePoint2 = event2.getPoint();                   double dx = mousePoint2.getX() - lastMousePoint2.getX();                   double dy = mousePoint2.getY() - lastMousePoint2.getY();                   shape2.translate((int) dx, (int) dy);                   repaint();               }           });     }     public void paintComponent(Graphics g) {         Graphics2D g2 = (Graphics2D) g;         //shape.draw(g2);         shape2.draw(g2);       } //method     } 

Here is the circle Component:

import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JComponent;  public class CircleComponent extends JComponent{     private Circle shape2;     private Point mousePoint2;  public CircleComponent(int x, int y, int width){       shape2 = new Circle(x, y, width);       addMouseListener(new MouseAdapter(){           @Override           public void mousePressed(MouseEvent event2){               mousePoint2 = event2.getPoint();               if(!shape2.contains(mousePoint2)){                   mousePoint2 = null;               }           }       });        addMouseMotionListener(new MouseMotionAdapter(){           @Override           public void mouseDragged(MouseEvent event2){               if(mousePoint2 == null){                   return;               }               Point lastMousePoint2 = mousePoint2;               mousePoint2 = event2.getPoint();               double dx = mousePoint2.getX() - lastMousePoint2.getX();               double dy = mousePoint2.getY() - lastMousePoint2.getY();               shape2.translate((int) dx, (int) dy);               repaint();           }       }); } public void paintComponent(Graphics g) {     Graphics2D g2 = (Graphics2D) g;     //shape.draw(g2);     shape2.draw(g2);   } //method } 

Here is circle:

import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Point2D;  public class Circle implements CompoundShape {     private GeneralPath path = null;     private int x;     private int y;     private final int width;      public Circle(int x, int y, int width){         this.x = x;         this.y = y;         this.width = width;     }       @Override     public void draw(Graphics2D g2) {         Ellipse2D.Double c = new Ellipse2D.Double(x,y,width,width);         g2.setColor(Color.RED);         g2.fill(c);         g2.draw(c);          path = new GeneralPath();         path.append(c,false);         g2.draw(path);     }      @Override     public void translate(int dx, int dy) {         // TODO Auto-generated method stub         x = x + dx;         y = y + dy;      }      @Override     public boolean contains(Point point) {         // TODO Auto-generated method stub          if(path == null){             return false;         }         return path.contains(point);     }  } 

Here is rectangle shape:

import java.awt.Color; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Point2D;  public class RectangleShape implements CompoundShape {     private GeneralPath path = null;     private int x;     private int y;     private final int width;     private final int height;      public RectangleShape(int x, int y, int width, int height){         this.x = x;         this.y = y;         this.width = width;         this.height = height;     }       @Override     public void draw(Graphics2D g2) {         Rectangle r = new Rectangle(x,y,width,height);         g2.setColor(Color.BLUE);         g2.fill(r);         g2.draw(r);          path = new GeneralPath();         path.append(r,false);         g2.draw(path);     }      @Override     public void translate(int dx, int dy) {         // TODO Auto-generated method stub         x = x + dx;         y = y + dy;      }      @Override     public boolean contains(Point point) {         // TODO Auto-generated method stub          if(path == null){             return false;         }         return path.contains(point);     }  } 

Here is compound shape:

import java.awt.Graphics2D; import java.awt.Point;  public interface CompoundShape {    void draw(Graphics2D g2);   void translate(int dx, int dy);   boolean contains(Point point);  } //interface 
           
     
     

Lista de respuestas

1
 
vote

Ejemplos de iteración de un {'Arjun': [70.0, 98.0, 63.0], 'Krishna': [67.0, 68.0, 69.0]} 3 se puede ver en:

  • esta respuesta a Obtenga la detección del ratón con una forma dinámica .

  • esta respuesta a 'Rellenar' caracteres de unicode en las etiquetas .

Por supuesto, esos ejemplos están pintando a una imagen, pero una vez que hay un 99887776614 (o {'Arjun': [70.0, 98.0, 63.0], 'Krishna': [67.0, 68.0, 69.0]} 5 a medida que prefiero trabajar con) el principio es el mismo lo mismo . Copia / pegada de un ejemplo:

  {'Arjun': [70.0, 98.0, 63.0], 'Krishna': [67.0, 68.0, 69.0]} 6  
 

Examples of iterating an ArrayList<Shape> can be seen in:

  • This answer to Get mouse detection with a dynamic shape.

  • This answer to 'Fill' Unicode characters in labels.

Of course, those examples are painting to an image, but once there is a Graphics (or Graphics2D as I prefer to work with) the principle is much the same. Copy/pasted from one example:

ArrayList<Shape> regions = separateShapeIntoRegions(imageShapeArea); // .. for (Shape region : regions) {     // ..     g.fill(region);     // .. } 
 
 
     
     

Relacionados problema

38  Cómo crear un componente de giro personalizado [cerrado]  ( How to create a custom swing component ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

0  Propiedades de JComponent con doble cita  ( Jcomponent properties with double quote ) 
Tengo una pregunta relacionada con este código $criteria->select = '*, ( 3959 * acos( cos( radians(' . $latitude . ') ) * cos( radians( latitude ) ) * cos...

0  Componente dibujado personalizado no dibujando dentro de jscrollpane  ( Custom drawn component not drawing inside jscrollpane ) 
Estaba usando Java Jre 1.6.7 y tenía un JComponente y un JScrollpane. No pude obtener doble tampón para trabajar en esto, lo que siempre resultó en un parpade...

0  JComponent: ¿Cómo puede resistir la pequeña pequeña?  ( Jcomponent how can it resist smallification ) 
Tengo un JComponente personalizado que pinta algunas cosas cuando se llama paint . Sin embargo, en un diseño minimumSize5 , es minimumSize no se está resp...

-1  Java JComponente retraso en el cambio de tamaño  ( Java jcomponent lag on resize ) 
¿Puede alguien dar una idea de por qué un JPanel que está dibujando formas simples como los rectángulos, en una pequeña cantidad, podría retrasarse notablemen...

-1  Cadena a JComponente  ( String to jcomponent ) 
Estoy usando balloontip en mi código, y necesito este constructor: Job5 En versiones anteriores, el segundo parámetro fue una cadena y funcionó, pero no...

0  Custom Jomponent no se agrega a JPanel  ( Custom jcomponent not being added to jpanel ) 
Estoy teniendo un poco de un Stickler con lo que pensé que era un problema bastante simple. Tengo un JComponente personalizado Ball Eso no es más que un ó...

1  Problema con SetCursor () Después de cerrar el JComponente modal  ( Problem with setcursor after closing modal jcomponent ) 
Cuando creo un JComponente modal, el mouse (correctamente) cambia al cursor predeterminado. Sin embargo, estoy corriendo con un problema extraño cuando cierro...

7  Posicionamiento manualmente JComponente dentro de JPanel  ( Manually position jcomponent inside jpanel ) 
Quiero programar mi JLABEL a una ubicación específica dentro de mi JPanel. He intentado setLocation(int x, int y) , pero no funciona. Estoy tratando de no us...

0  Usando un swing jwing jomponent en un mantelrenderer  ( Using a custom swing jcomponent in a tablecellrenderer ) 
OK, sé cómo hacer un simple JComponente personalizado. Sé cómo anular un mantelrenderer. Parece que no puedo combinar los dos. Aquí hay una muestra JCompon...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos