java:一次多个矩形

时间:2013-10-15 16:17:33

标签: java swing

嗨,我是新来的,我不擅长解释问题,但我一直在网上搜索这个问题已经很久了。这是我的问题:我想在鼠标x和y处绘制一个矩形。我希望有很多矩形,所以如果我点击JFrame上的50,50坐标,它会绘制一个矩形,然后如果我点击其他地方,它会在那里绘制另一个矩形,但不删除另一个,所以我可以点击5次(< - 示例)然后我将同时有五个矩形。请帮助我,尽可能简单。提前谢谢你,请帮助我。

我的代码:

public class Game extends Canvas implements Runnable {
    private static final long serialVersionUID = 1L;

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

        tile.render(g);




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

    public  void tick() {

    }

}

以及实施MouseListenerMouseMotionListener的其他类:

public class listener implements MouseListener, MouseMotionListener {

    public static Game game;
    public Image img;




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

    }

    @Override
    public void mouseEntered(MouseEvent arg0) {

    }

    @Override
    public void mouseExited(MouseEvent arg0) {

    }

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

        }

    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (e.getButton() == MouseEvent.BUTTON1) {

        }
    }

}

这是我的问题的补充。什么与我的代码兼容。 (我仍然只是学习java的方式而且我只有13而且不是很聪明。)矩形应该有一个固定的高度和宽度,所以当你点击一个特定的区域时它将绘制一个10 x 10矩形,它将记住已经绘制的所有其他矩形,如你的例子,请再次帮助我谢谢

3 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点,记住列表中的每个矩形并将它们全部渲染(按照正确的顺序排列,最重要的是它们重叠),创建一个BufferedImage来记住你到目前为止所绘制的所有内容。

答案 1 :(得分:2)

有关执行此操作的两种常用方法的工作示例,请参阅Custom Painting Approaches

  1. 从ArrayList中绘制对象
  2. 在BufferedImage上绘画

答案 2 :(得分:1)

如果我正确理解您的问题,听起来您希望避免在添加新对象时重新绘制屏幕。在Oracle网站上有一个演示,它演示了如何在单击时绘制对象。

http://docs.oracle.com/javase/tutorial/uiswing/examples/painting/SwingPaintDemo4Project/src/painting/SwingPaintDemo4.java

如果你想维护对象(即不要删除前一个对象),请注释掉

repaint(CURR_X,CURR_Y,CURR_W+OFFSET,CURR_H+OFFSET);