簡體   English   中英

使用鼠標單擊繪制矩形

[英]Draw a Rectangle Using Mouse Click

我在JFrame的屏幕上單擊鼠標時無法繪制矩形。 我嘗試了幾種不同的方法,但最接近的只是顯示坐標。 任何繪圖似乎都由於某種原因而被忽略了。

package pathfinder;

import java.awt.BorderLayout;
import java.awt.Canvas;
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseMotionAdapter;

public class forLoopDesign extends JPanel{

//offsets for hard-coded path
int hOffset = 40;
int vOffset = 40;

//check if adjacent block is wall
boolean wall = false;

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    draw(g);
}

public void draw(Graphics g) {
   //draw start and end points
    g.setColor(Color.magenta);
    g.fillRect(0, 0, 40, 40);
    g.setColor(Color.white);
    g.drawString("Start", 7, 24);
    g.setColor(Color.red);
    g.fillRect(720, 720, 40, 40);
    g.setColor(Color.white);
    g.drawString("Finish", 724, 744);

   //draw grid
    g.setColor(Color.black);       
    for(int i=0; i<760; i+=40){
        for(int j=0; j<800; j+= 40){
            g.drawRect(i, j, 40, 40);
        }
    }

   //draw hard-coded path
    g.setColor(Color.cyan);
    for(int i=0; i< 17; i++){
        g.fillRect(hOffset + 1, vOffset + 1, 39, 39);
        hOffset += 40;
        vOffset += 40;
    }

   //check for mouse click, print coordinates
    addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            System.out.println("(x, y) of mouse click= (" + x + ", " + y + ")");
            g.setColor(Color.orange);
            g.fillRect(200,200,40,40);
        }
    });
}

//draw wall at mouse click location
public void highlightSquare(int x, int y, Graphics g){
    wall = true;
    System.out.println("wall value=" + wall);

    g.setColor(Color.black);
    g.fillRect(x, y, 40, 40);
}

//initialize jframe properties
public static void main(String[] args) {
    JFrame f = new JFrame();
    f.getContentPane().add(new forLoopDesign(), BorderLayout.CENTER);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(767, 790);
    f.setVisible(true);
    f.setResizable(false);
    f.setLocationRelativeTo(null);
}}

我的最終目標是能夠在屏幕上繪制矩形以創建類似於屏幕的迷宮,並使程序在其中導航(青色正方形)。 這是一個雄心勃勃的項目,我意識到到目前為止我可能犯了很多錯誤,因此隨時可以添加任何其他批評。 提前致謝

所有自定義繪畫都需要在paintComponent(..)方法中完成。

因此,在mouseClick邏輯中,您需要保存在ArrayList單擊的位置並調用repaint() 然后paintComponent(...)方法需要遍歷ArrayList以在給定點繪制矩形。

有關此方法的有效示例,請參見“自定義繪畫方法”中DrawOnComponent示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM