JAVA怎么画出一个任意大小的圆形和矩形 20

设计一个程序,可以在窗体面板上以各种颜色在任意位置绘制不同大小的圆和矩形。评分标准:实现通过鼠标拖动在任意位置绘制任意大小的圆和矩形者60分,能够制定画笔颜色加10分(参... 设计一个程序,可以在窗体面板上以各种颜色在任意位置绘制不同大小的圆和矩形。
评分标准:实现通过鼠标拖动在任意位置绘制任意大小的圆和矩形者60分,能够制定画笔颜色加10分(参考第336页10.9颜色对话框),能够绘制指定颜色的实心形状加10分,能够实现删除效果者加10分,能够实现撤销操作者加10分。本题最高可得100分。
展开
 我来答
xialoveyun
2016-06-17 · TA获得超过114个赞
知道小有建树答主
回答量:241
采纳率:50%
帮助的人:85.1万
展开全部
package test.xxl;

import java.awt.Button;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class Demo0617 extends JFrame implements MouseListener,ActionListener{

private static int x = 0 ; 
private static int y = 0 ;
private static int w = 0 ;
private static int h = 0 ;

private static Color c ;

// 真为圆,假为方
private boolean flag = false ;

private static final long serialVersionUID = 1L;

public Demo0617(){
this.setSize(440, 500) ;
this.setVisible(true) ;
this.setLayout(null) ;
this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)) ;
this.setResizable(false);//不能改变窗体大小
this.setBackground(Color.WHITE) ;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
this.addMouseListener(this) ;
this.getContentPane().setBackground(Color.WHITE) ;

Button b1,b2,b3,b4,b5,b6,b7,b8,b9 ;
b1 = new Button("红色") ;
b1.setBounds(0, 0, 100, 30) ;
b1.setBackground(Color.RED) ;
b1.addActionListener(this) ;
this.add(b1) ;

b2 = new Button("黑色") ;
b2.setBounds(110, 0, 100, 30) ;
b2.setBackground(Color.BLACK) ;
b2.addActionListener(this) ;
this.add(b2) ;

b3 = new Button("黄色") ;
b3.setBounds(220, 0, 100, 30) ;
b3.setBackground(Color.YELLOW) ;
b3.addActionListener(this) ;
this.add(b3) ;

b4 = new Button("蓝色") ;
b4.setBackground(Color.BLUE) ;
b4.setBounds(330, 0, 100, 30) ;
b4.addActionListener(this) ;
this.add(b4) ;

b5 = new Button("橡皮擦") ;
b5.setBounds(0, 40, 100, 30) ;
b5.addActionListener(this) ;
this.add(b5) ;

b6 = new Button("撤销") ;
b6.setBounds(110, 40, 100, 30) ;
b6.addActionListener(this) ;
this.add(b6) ;

b7 = new Button("全部删除") ;
b7.setBounds(220, 40, 100, 30) ;
b7.addActionListener(this) ;
this.add(b7) ;

b8 = new Button("圆形") ;
b8.setBounds(0, 80, 100, 30) ;
b8.addActionListener(this) ;
this.add(b8) ;

b9 = new Button("矩形") ;
b9.setBounds(110, 80, 100, 30) ;
b9.addActionListener(this) ;
this.add(b9) ;


}

/**
 * @param args
 */
public static void main(String[] args) {
new Demo0617() ;
}

@Override
public void paint(Graphics g) {
if(c == null)
c = g.getColor();
g.setColor(c);
if(flag){
g.fillOval(x, y, w, h);
} else {
g.fillRect(x, y, w, h) ;
}

}

public void clear(Graphics g){
g.setColor(Color.WHITE) ;
g.clearRect(0, 0, 440, 500) ;
}

/**
 * 单击
 */
@Override
public void mouseClicked(MouseEvent e) {


}

/**
 * 按下
 */
@Override
public void mousePressed(MouseEvent e) {

x = e.getX() ;
y = e.getY() ;

}

/**
 * 松开
 */
@Override
public void mouseReleased(MouseEvent e) {
int x = e.getX() ;
int y = e.getY() ;
if(x > this.x){
w = x - this.x ;
} else {
w = this.x - x ;
}
if(y > this.y){
h = y - this.y ;
} else {
h = this.y - y ;
}
paint(getGraphics()) ;
}

/**
 * 鼠标进入事件
 */
@Override
public void mouseEntered(MouseEvent e) {
}

/**
 * 鼠标移除事件
 */
@Override
public void mouseExited(MouseEvent e) {
}

@Override
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand().hashCode()) {
case 1038352:
// 红色
c = Color.RED ;
break;
case 1293761:
// 黑色
c = Color.BLACK ;
break;
case 1293358:
// 黄色
c = Color.YELLOW ;
break;
case 1087797:
// 蓝色
c = Color.BLUE ;
break;
case 27138585:
// 橡皮擦
c = Color.WHITE ;
break ;
case 836828:
Graphics graphics = getGraphics() ;
graphics.setColor(Color.WHITE) ;

if(flag){
graphics.fillOval(x, y, w, h) ;
} else {
graphics.fillRect(x, y, w, h) ;
}
break;
case 657183940:
// 全部删除
clear(getGraphics()) ;
break;
case 715036:
// 圆形
flag = true ;
break;
case 976025:
// 矩形
flag = false ;
break;
default:
System.out.println(e.getActionCommand().hashCode());
break ;
}
}

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式