2012-12-22 103 views
2

我是第一次使用JPanel并在JPanel上绘制基本形状。Java JPanel绘图形状

我已经写代码,这样的形状:

public class Shape extends JPanel{ 

int x,y; 

public Shape(int x, int y){ 
    this.x = x; 
    this.y = y; 
} 

public void paint(Graphics g){ 
    super.paint(g); 
    g.setColor(Color.black); 
    g.drawRect(x, y, 20, 20); 
    } 
} 

我有另一个类,我将使用这个形状。它扩展了JFrame并实现了MouseListener。在这个JFrame上,我把JPanel简称为“panel”。

我有方法,它读取鼠标位置,并在“面板”上绘制形状。

public void mouseClicked(MouseEvent e){ 
    Shape shape = new Shape(e.getX(),e.getY()); 
    panel.add(shape); 
    panel.revalidate(); 
    panel.repaint(); 
} 

问题是,它没有绘制我的鼠标所在坐标上的形状。它只是在面板上绘制并绘制在一条线上。

谢谢你的回答。

回答

0
public class ShapesPanel extends JPanel { 

    private java.util.List shapesList ; 

    /** 
    * Constructs <code>ShapesPanel</code> 
    */ 
    public ShapesPanel() { 
     shapesList = new java.util.ArrayList() ; 
     this.addMouseListener(new MouseClickListener()) ; 
    } 


    /** 
    * Creates a shape 
    * @param bounds 
    * @return 
    */ 
    private Shape createShape(Rectangle bounds) { 
     Shape shape = new Ellipse2D.Double(bounds.x, bounds.y, bounds.width, bounds.height); 

/* 
     To use the following shapes, you need to have java shapes library, which can 
     be downloaded from <a href="http://wwww.jshapes.com">Java Shapes Library</a> 
*/ 
/* 
     // To create star shape 
     Shape shape = new Star(bounds, 50, Star.STAR_8_POINTS); 
     // To create triangle shape 
     Shape shape = new Triangle(bounds, Triangle.UP); 
     // To create diamond shape 
     Shape shape = new Diamond(bounds); 
     // To create Parallelogram shape 
     Shape shape = new Parallelogram(bounds ); 
*/ 

     return shape ; 
    } 

    /** 
    * MouseClickListener 
    */ 
    private class MouseClickListener extends MouseAdapter { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
      Point pt = e.getPoint(); 
      Dimension size = new Dimension(100, 100); 
      Rectangle bounds = new Rectangle(pt.x, pt.y, size.width, size.height); 
      Shape shape = createShape(bounds); 
      shapesList.add(shape); 
      repaint(); 
     } 
    } 

    /** 
    * Paints the component 
    * @param g 
    */ 
    protected void paintComponent(Graphics g) { 

     Graphics2D g2 = (Graphics2D) g; 
     Rectangle bounds = new Rectangle(0,0,getWidth(), getHeight()); 
     g2.setPaint(Color.white); 
     g2.fill(bounds); 

     for (Iterator iterator = shapesList.iterator(); iterator.hasNext();) { 
      Shape shape = (Shape) iterator.next(); 
      g2.setPaint(Color.cyan); 
      g2.fill(shape); 
      g2.setPaint(Color.black); 
      g2.draw(shape); 
     } 
    } 

    /** 
    * Driver 
    * @param args 
    */ 
    public static void main(String[] args) { 
     JFrame frame = new JFrame("Draw Shapes") ; 
     frame.getContentPane().add(new ShapesPanel()); 
     frame.setSize(600, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

    } 
} 

希望这有助于在面板中绘制java形状。