嗨,我是新来的,我不擅长解释问题,但我一直在网上搜索这个问题已经很久了。这是我的问题:我想在鼠标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() {
}
}
以及实施MouseListener
和MouseMotionListener
的其他类:
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矩形,它将记住已经绘制的所有其他矩形,如你的例子,请再次帮助我谢谢
答案 0 :(得分:2)
有两种方法可以做到这一点,记住列表中的每个矩形并将它们全部渲染(按照正确的顺序排列,最重要的是它们重叠),或创建一个BufferedImage来记住你到目前为止所绘制的所有内容。
答案 1 :(得分:2)
有关执行此操作的两种常用方法的工作示例,请参阅Custom Painting Approaches:
答案 2 :(得分:1)
如果我正确理解您的问题,听起来您希望避免在添加新对象时重新绘制屏幕。在Oracle网站上有一个演示,它演示了如何在单击时绘制对象。
如果你想维护对象(即不要删除前一个对象),请注释掉
行 repaint(CURR_X,CURR_Y,CURR_W+OFFSET,CURR_H+OFFSET);