繁体   English   中英

java:一次多个矩形

[英]java : multiple rectangles at once

嗨,我是新来的,我不擅长解释问题,但是我已经在网上搜索了很久了。 这是我的问题:我想在鼠标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矩形,它将记住您示例中已绘制的所有其他矩形,请再次帮助我,谢谢

有两种方法可以执行此操作,或者记住列表中的每个矩形并将其全部呈现(以正确的顺序,如果它们重叠,则首先显示最早的矩形), 或者创建BufferedImage来记住到目前为止绘制的所有内容。

有关执行此操作的两种常见方法的示例,请参见自定义绘画方法

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

如果我正确理解了您的问题,听起来您希望避免在添加新对象时重画屏幕。 在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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM