2013-10-16 57 views
-3

我想绘制一个矩形在鼠标x和y。我想在那里有很多矩形,所以如果我点击JFrame上的50,50坐标,它会绘制一个矩形,然后如果我点击了其他地方,它会在那里绘制另一个矩形,但不会删除另一个矩形,所以我可以点击5次(< - 例子),那么我会一次有五个矩形。Java我怎样才能一次有多个矩形

矩形应该有一个固定的高度和宽度,所以当你点击一个特定的区域时,它将绘制一个10×10的矩形,它会记住所有已绘制的其他矩形,并将它们绘制在同一个地方,还我如何画它的数组列表(如果有的话)

我的代码:

公共类游戏扩展画布实现Runnable { 私有静态最后的serialVersionUID长= 1升;

public boolean running = false; 
public static final String title = "tilebased game!"; 

private Thread thread; 
public int height = 600; 
public int width = 800; 
private Dimension d = new Dimension(width, height); 
public static Rectangle block; 
public static Rectangle[] blocks = new Rectangle[2]; 
public static int blocknum = 0; 
public static int xCreate; 
public static int yCreate; 
public static int xcoord; 
public static int ycoord; 
public static ArrayList<Rectangle> rects = new ArrayList<Rectangle>(); 


public static boolean islicked = false; 

public Game() { 
    setPreferredSize(d); 
    setMinimumSize(d); 
    setMaximumSize(d); 
    addMouseListener(new tile()); 
    addMouseMotionListener(new tile()); 

} 



public void start() { 


    running = true; 
    new Thread(this).start(); 

} 

public void stop() { 

    running = false; 

} 

public static void main(String[] args) { 
    Game g = new Game(); 
    JFrame f = new JFrame(); 
    f.add(g); 
    f.pack(); 
    f.setTitle(title); 
    f.setResizable(false); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    f.setLocationRelativeTo(null); 
    f.setVisible(true); 
    g.start(); 

} 

public void run() { 
    while(running){ 
     tick(); 
     render(); 
    } 

    try{ 
     Thread.sleep(5); 
    }catch(Exception e){ 

    } 
} 


public void render() { 
    BufferStrategy bs = getBufferStrategy(); 
    if (bs == null) { 
     createBufferStrategy(2); 
     return; 
    } 
    Graphics g = bs.getDrawGraphics(); 
    g.setColor(Color.white); 


    for (int i = 0; i < rects.size(); i++) { 
     Rectangle rect = rects.get(i); 

    } 


    g.dispose(); 
    bs.show(); 
} 

public void tick() { 

} 

}

和其他类。

public class tile implements MouseListener, MouseMotionListener { 


    public static Game game; 
public Image img; 

public static boolean clicked = false; 
public tile tile; 



@Override 
public void mouseDragged(MouseEvent arg0) { 

} 

@Override 
public void mouseMoved(MouseEvent e) { 
    Game.xcoord = e.getX(); 
    Game.ycoord = e.getY(); 
} 

@Override 
public void mouseClicked(MouseEvent e) { 
    Game.rects.add(new Rectangle(Game.xcoord,Game.ycoord,10,10)); 
    System.out.println("hi mayte"); 


} 

@Override 
public void mouseEntered(MouseEvent arg0) { 

} 

@Override 
public void mouseExited(MouseEvent arg0) { 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    if(e.getButton()== MouseEvent.BUTTON1){ 
     clicked = true; 


    Game.xcoord = e.getX(); 
    Game.ycoord = e.getY(); 
    clicked = true; 
    } 

} 

public void mouseReleased(MouseEvent e) { 
    if(e.getButton()== MouseEvent.BUTTON1){ 
     clicked = true; 
     System.out.println("hi mayte"); 


    Game.xcoord = e.getX(); 
    Game.ycoord = e.getY(); 
    clicked = false; 
    } 
} 

}

+2

这个问题如何不同于[java:多个矩形一次](http://stackoverflow.com/questions/19386128/java-multiple-rectangles-at-once) – trashgod

+0

我建议将元素添加到LinkedList ,在渲染方法中遍历它并将它们全部绘制。您可能还必须定义某些内容,例如:如果鼠标按下和鼠标释放的位移大于0,则只会添加矩形。假设您需要动态矩形大小。 – Obicere

回答

-1

可以使矩形的ArrayList:

ArrayList<Rectangle> rectangles = new ArrayList<Rectangle>(); 

,然后添加矩形到它(填放这的mouseClicked):

rectangles.add(new Rectangle(..)); 

后你可以遍历这个数组:

for (int i = 0; i < rectangles.size(); i++) { 
    Rectangle rect = rectangles.get(i); 
    // paint methods here 
} 

并删除从集合中的任何矩形:

rectangles.remove(5); // removes fifth element 

ArrayList的是负责存储对象的动态量的类。它在工作中的尺寸变化。

+0

thankx男人很开心 – user2279603

+0

@ user2279603,你为什么要浪费人们的时间?你昨天给了这个问题的答案。提出重复问题和忽略建议会导致人们在将来忽略你的问题。 – camickr

+0

@Adrian,在上面的评论中已经提到了垃圾内容,这是一个重复的问题。通过回答你是鼓励这种行为。 – camickr