Java 使用swing绘制随机图案
我试图在JavaAWT/swing上练习一些mouseListener事件,我想尝试画出我的鼠标经过的区域。类似于windows paint中的笔刷工具。所以我创建了一个框架,添加了一块画布,并开始用MouseListener的方法进行实验。但无论我做什么,我都不能在点击时画出一个点,然后什么都不画。谁能帮我 编辑: 我已经阅读了下面的链接(非常好的教程),我想我明白了。但当我尝试实现它时,点的arraylist似乎为空。我错过了什么,因为我看不出有什么不对Java 使用swing绘制随机图案,java,swing,canvas,draw,Java,Swing,Canvas,Draw,我试图在JavaAWT/swing上练习一些mouseListener事件,我想尝试画出我的鼠标经过的区域。类似于windows paint中的笔刷工具。所以我创建了一个框架,添加了一块画布,并开始用MouseListener的方法进行实验。但无论我做什么,我都不能在点击时画出一个点,然后什么都不画。谁能帮我 编辑: 我已经阅读了下面的链接(非常好的教程),我想我明白了。但当我尝试实现它时,点的arraylist似乎为空。我错过了什么,因为我看不出有什么不对 import java.awt.Co
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.event.MouseInputListener;
public class Canvas extends JComponent implements MouseInputListener{
private ArrayList<Point> coloredPoints = new ArrayList<Point>();
private Point Startpnt = null;
private Point Endpnt = null;
private int xMin;
private int xMax;
private int yMin;
private int yMax;
public Canvas() {
super();
//setPreferredSize(new Dimension(500,500));
addMouseListener(this);
}
public void paint(Graphics g){
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(),getHeight());
for (int i=0; i<coloredPoints.size(); i++)
{
int pX = coloredPoints.get(i).getX();
int pY = coloredPoints.get(i).getY();
g.setColor(Color.red);
g.drawRect(pX, pY, 1, 1);
}
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
Startpnt.setX(getX());
Startpnt.setY(getY());
Endpnt = Startpnt;
coloredPoints.add(Endpnt);
xMin = Startpnt.getX();
xMax = Startpnt.getX();
yMin = Startpnt.getY();
yMax = Startpnt.getY();
}
@Override
public void mouseDragged(MouseEvent e)
{
// Repaint only the area affected by the mouse dragging
Endpnt.setX(e.getX());
Endpnt.setY(e.getY());
xMin = Math.min(xMin, Endpnt.getX());
xMax = Math.max(xMax, Endpnt.getX());
yMin = Math.min(yMin, Endpnt.getY());
yMax = Math.max(yMax, Endpnt.getY());
repaint(xMin, yMin, 1, 1);
coloredPoints.add(Endpnt);
}
@Override
public void mouseReleased(MouseEvent e) {
Startpnt = null;
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
class Point {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
}
导入java.awt.Color;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.util.ArrayList;
导入javax.swing.JComponent;
导入javax.swing.event.MouseInputListener;
公共类画布扩展JComponent实现MouseInputListener{
private ArrayList coloredPoints=new ArrayList();
专用点Startpnt=null;
私有点Endpnt=null;
私有int-xMin;
私有int-xMax;
私家侦探;
私人国际货币基金组织;
公共画布(){
超级();
//设置首选尺寸(新尺寸(500500));
addMouseListener(这个);
}
公共空间涂料(图g){
g、 设置颜色(颜色为黑色);
g、 fillRect(0,0,getWidth(),getHeight());
对于(int i=0;i
但无论我做什么,我都不能在点击时画出一个点,然后什么都不画
听起来你只是在重新绘制最后一点。你需要跟踪所有要绘制的点
你可以从两种常见的方法开始。这个例子画矩形,但是你可以修改它来画点
编辑:
但当我尝试实现它时,点的arraylist似乎为空
是吗?很容易判断。只需在绘制代码中添加System.out.println(..)即可查看有多少条条目
其他意见:
为什么要重写paint()?提供给您的代码重写paintComponent(),这是进行自定义绘制的正确方法
为什么要使用变量“Endppnt”。提供给您的代码使用“endPoint”。同样,Java变量命名标准使用小写字母开始变量名。不要制定自己的约定
不要将您的组件称为“Canvas”。有一个AWT类使用该名称,因此很容易混淆。类名应该更具描述性
您不需要创建自己的Point类,JDK已经有了一个Point类,它可以满足您的需要
因为每次拖动鼠标时都会向ArrayList中添加一个像素,所以您实际上不需要startPnt/endPnt逻辑。示例代码需要跟踪开始/结束,以便确定矩形的边界
如果您需要更多帮助,请发布。我们无法告诉您面板是如何添加到框架中的,我们也无法执行您的代码。为什么不添加一些代码来显示您所做的工作?如果您要提供您遇到的问题的详细信息,您会更快获得更好的帮助。