概述
一个简单的画板应用程序,用户可以通过鼠标在画板上自由绘制任意大小的矩形或椭圆。
用户通过点击按钮,选择要绘制的矩形(rect)或者椭圆(oval),以及选择画笔的颜色(红色、蓝色、以及黑色)。绘制完成后,用户可以通过点击菜单条上的file菜单下的sava选项进行保存。
程序具体效果图:
注意:
1.画笔的默认颜色为黑色。
2.需要先点击rect(矩形)或者oval(椭圆)按钮再进行绘制。
3.保存绘制的图形时,文件的后缀名应为jpg格式(即在文件名后面加上.jpg)。
4.矩形椭圆均为填充图形。
具体实现过程且看以下代码(代码内部有详细的注解)。
代码:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import static javax.swing.WindowConstants.EXIT_ON_CLOSE;
public class PaintTest {
//创建一个窗口
private JFrame f=new JFrame("画板");
//定义一个菜单条以及菜单和菜单项
private JMenuBar jMenuBar;
private JMenu file;
private JMenuItem save=new JMenuItem("save");;
//设置窗口大小
private final int TABLE_HEIGHT=500;
private final int TABLE_WIDTH=500;
//初始化鼠标起始位置
private int preX=-1;
private int preY=-1;
//获取鼠标松开位置
private int lastX;
private int lastY;
//初始图形长宽;
private int height;
private int width;
//初始化颜色;
private Color color=Color.BLACK;
//颜色按钮
JButton red =new JButton("red");
JButton blue =new JButton("blue");
JButton black =new JButton("black");
//矩形椭圆按钮
JButton rect=new JButton("rect");
JButton oval=new JButton("oval");
//定义一个变量获取需要画的图形;
String str="";
//获取一个BufferedImage对象,调用该对象中的方法获取画笔
BufferedImage image=new BufferedImage(TABLE_WIDTH,TABLE_HEIGHT,BufferedImage.TYPE_INT_BGR);
Graphics g=image.getGraphics();
//定义一个方法用于初始化变量
public void initialize(){
this.preX=-1;
this.preY=-1;
this.lastX=-1;
this.lastY=-1;
}
//创建一个画布
private class MyCanvas extends JPanel{
@Override
public void paint(Graphics g) {
//画位图,将本机图片复制到画布上去
g.drawImage(image,0,0,null);
if(str.equals("绘制矩形")){
g.setColor(color);
g.fillRect(Math.min(preX,lastX),Math.min(preY,lastY),Math.abs(lastX-preX),Math.abs(lastY-preY));
}else if(str.equals("绘制椭圆")){
g.setColor(color);
g.fillOval(Math.min(preX,lastX),Math.min(preY,lastY),Math.abs(lastX-preX),Math.abs(lastY-preY));
}
}
}
MyCanvas myDraw=new MyCanvas();
//自定义点击按钮发生颜色变化的方法
private void setColor(Color redColor,Color blueColor,Color blackColor){
red.setBackground(redColor);
blue.setBackground(blueColor);
black.setBackground(blackColor);
}
private void setColor(Color rectColor,Color ovalColor){
rect.setBackground(rectColor);
oval.setBackground(ovalColor);
}
//组装视图
public void init(){
JPanel colorGroup=new JPanel();
colorGroup.add(red);
colorGroup.add(blue);
colorGroup.add(black);
JPanel graphGroup=new JPanel();
graphGroup.add(rect);
graphGroup.add(oval);
//定义一个点击事件处理器
ActionListener actionListener=new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//获取点击的内容
String actionCommand = e.getActionCommand();
//switch语句用于处理点击不同内容的事件处理
switch (actionCommand){
case "red":
//设置按钮颜色
setColor(Color.RED,Color.WHITE,Color.WHITE);
//设置画笔颜色
color=Color.RED;
break;
case "blue":
setColor(Color.WHITE,Color.BLUE,Color.WHITE);
color=Color.BLUE;
break;
case "black":
setColor(Color.WHITE,Color.WHITE,Color.BLACK);
color=Color.BLACK;
break;
case "rect":
str="绘制矩形";
//初始化变量
initialize();
setColor(Color.YELLOW,Color.WHITE);
break;
case "oval":
str="绘制椭圆";
//初始化变量
initialize();
setColor(Color.WHITE,Color.YELLOW);
break;
case "save":
//保存画的图形
FileDialog fileSave=new FileDialog(f,"open",FileDialog.SAVE);
fileSave.setVisible(true);
//获取文件名和文件位置
String file = fileSave.getFile();
String directory = fileSave.getDirectory();
try {
//解决空指针异常
if(file==null||directory==null){
return;
}
ImageIO.write(image,"JPEG" ,new File(directory,file));
} catch (IOException ioException) {
ioException.printStackTrace();
}
break;
}
}
};
//添加事件处理器
red.addActionListener(actionListener);
blue.addActionListener(actionListener);
black.addActionListener(actionListener);
rect.addActionListener(actionListener);
oval.addActionListener(actionListener);
save.addActionListener(actionListener);
//设置画板为白色
g.setColor(Color.white);
g.fillRect(0,0,TABLE_WIDTH,TABLE_HEIGHT);
//画布添加鼠标事件处理
myDraw.addMouseListener(new MouseAdapter() {
@Override
//鼠标按下事件处理,用于获取鼠标按下时的位置
public void mousePressed(MouseEvent e) {
preX=e.getX();
preY=e.getY();
}
//松开事件处理,用于获取鼠标松开后的位置
public void mouseReleased(MouseEvent e) {
lastX=e.getX();
lastY=e.getY();
//在image画布上画出相应图形
if(str.equals("绘制矩形")){
g.setColor(color);
g.fillRect(Math.min(preX,lastX),Math.min(preY,lastY),Math.abs(lastX-preX),Math.abs(lastY-preY));
initialize();
}else if (str.equals("绘制椭圆")){
g.setColor(color);
g.fillOval(Math.min(preX,lastX),Math.min(preY,lastY),Math.abs(lastX-preX),Math.abs(lastY-preY));
initialize();
}
}
});
//鼠标移动事件处理
myDraw.addMouseMotionListener(new MouseMotionAdapter() {
@Override
//鼠标拖动事件处理,获取鼠标拖动实时位置
public void mouseDragged(MouseEvent e) {
lastX=e.getX();
lastY=e.getY();
myDraw.repaint();
}
});
//设置画布大小
myDraw.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
//添加画布
f.add(myDraw);
//组装并添加菜单条
jMenuBar=new JMenuBar();
file=new JMenu("file");
file.add(save);
jMenuBar.add(file);
f.setJMenuBar(jMenuBar);
//将颜色按钮,图形按钮分别位于窗口的北方和南方
f.add(colorGroup,BorderLayout.NORTH);
f.add(graphGroup,BorderLayout.SOUTH);
//设置窗口为一个合适大小
f.pack();
//设置窗口关闭功能
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
f.setVisible(true);
}
public static void main(String[] args) {
new PaintTest().init();
}
}
最后
以上就是标致小鸭子为你收集整理的Java绘制椭圆和矩形(实现自由变化大小的功能)的全部内容,希望文章能够帮你解决Java绘制椭圆和矩形(实现自由变化大小的功能)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复