java绘制矩形 鼠标_如何用java在面板上用鼠标绘制出一个矩形

该博客介绍了一个Java程序,通过创建一个简单的图形用户界面,让用户能够使用鼠标在面板上绘制矩形。程序包含一个主类`MyFrame`,它继承自`JFrame`并实现了`ActionListener`,以及一个`MyPanel`类,继承自`JPanel`并实现了`MouseListener`。用户可以通过点击工具栏上的按钮选择绘制直线、圆形或矩形,然后在面板上按下鼠标并拖动来绘制形状。
摘要由CSDN通过智能技术生成

展开全部

import java.awt.*;

import java.awt.geom.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.*;

public class Test{

public static void main(String[] args){

MyFrame frame = new MyFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

class MyFrame extends JFrame implements ActionListener{

MyPanel panel = new MyPanel();

JToolBar t;

JButton obj1;

JButton obj2;

JButton obj3;

public MyFrame(){

obj1 = new JButton("Line");

obj2 = new JButton("yuan");

obj3 = new JButton("juxing");

t = new JToolBar();

obj1.addActionListener(this);

obj2.addActionListener(this);

obj3.addActionListener(this);

t = new JToolBar();

t.add(obj1);

t.add(obj2);

t.add(obj3);

ButtonGroup buttonGroup = new ButtonGroup();

setTitle("DrawTest");

setSize(W,H);

Container contentPane = getContentPane();

contentPane.add(t,BorderLayout.NORTH);

contentPane.add(panel,BorderLayout.CENTER);

}

public void actionPerformed(ActionEvent e){

if(e.getSource()==obj1)

panel.shape=0;//直线

if(e.getSource()==obj2)

panel.shape=1;//圆

if(e.getSource()==obj3)

panel.shape=2;//长方形

panel.repaint();                   //这里加一句

}

public static final int W = 400;

public static final int H = 400;

}

class MyPanel extends JPanel implements MouseListener{

private ArrayList pointList = new ArrayList();

int shape = -1;

int x1 = 0,y1 = 0;

int x2 = 0,y2 = 0;

int i = 0;

MyPanel(){

addMouseListener(this);

}

public void mousePressed(MouseEvent e){

x1 = e.getX();y1 = e.getY();

pointList.add(new Point(x1,y1));

}

public void mouseReleased(MouseEvent e){

x2 = e.getX();y2 = e.getY();

pointList.add(new Point(x2,y2));

repaint();

}

public void mouseClicked(MouseEvent e){    }

public void mouseMoved(MouseEvent e){    }

public void mouseEntered(MouseEvent e){    }

public void mouseExited(MouseEvent e){    }

public void paintComponent(Graphics g){

super.paintComponent(g);

System.out.println(pointList.size());

for(int i =0;i 

switch(shape){

case 0:Point p1 = pointList.get(i);

Point p2 = pointList.get(i+1);

g.drawLine(p1.x,p1.y,p2.x,p2.y);

break;    //如果想让636f70793231313335323631343130323136353331333337386631三个图形一起显示去掉这里的break;语句

case 1:p1 = pointList.get(i);

p2 = pointList.get(i+1);

int width1  = p2.x - p1.x;

int height1 = p2.y - p1.y;

g.drawOval(p1.x,p1.y,width1,height1);

break;    //如果想让三个图形一起显示去掉这里的break;语句

case 2:p1 = pointList.get(i);

p2 = pointList.get(i+1);

int width2  = p2.x - p1.x;

int height2 = p2.y - p1.y;

g.drawRect(p1.x,p1.y,width2,height2);

break;

default: System.out.println("please once agan!");

break;

}

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值