初级画图板

初级画图板

一:实现简单窗口

frame.setLocationRelativeTo(null);//位置居中

frame.setDefaultCloseOperation(3);//关闭窗体时程序退出

frame.setLayout(new FlowLayout());//设置布局格式


二:实现画直线

两点确定一条直线,故需要获取鼠标按下及释放时的点的坐标,再通过窗体的画布对象来调用画直线的方法。

frame.setVisible(true);//可见

gra = frame.getGraphics();//获取窗体的画布对象,否则指针为空,必须是可见之后才能获取

........

gra.drawLine(x1,y1,x2,y2);

获取点的坐标要让窗体添加鼠标监听,MouseListener是个接口,不能直接实例化,故可以通过匿名内部类的方式来处理,方法体中重写接口的所有方法(除此外还可以通过继承其已经实现的类(系统的或自己写的类)来解决)

//以匿名内部类的方式创建一个鼠标事件监听器对象(买)

MouseListener mouse_listener = new MouseListener(){

//重写MouseListener的所有方法

};

//给窗体添加鼠标事件监听器(安装)

frame.addMouseListener(mouse_listener);


三:添加直线,矩形,椭圆等几个按钮,能进行切换并能画出这几种图形。关键是添加监听器

JButton line=new JButton("直线");

frame.add(line);

创建监听器并给按钮添加监听ActionListener:同MouseListener一样,不过只需要重写一个方法

ActionListener ac=new ActionListener(){

public void actionPerformed(ActionEvent e){

command=e.getActionCommand(); //获得每次按下的命令

}

};

//给直线按钮添加监听器

line.addActionListener(ac);

...............

public void mousePressed(MouseEvent e){

x1 = e.getX();

y1 = e.getY();

}

public void mouseReleased(MouseEvent e){

x2 = e.getX();

y2 = e.getY();


if("直线".equals(command)){

gra.drawLine(x1,y1,x2,y2);

    }else if("矩形".equals(command)){

gra.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));

}


四:添加颜色选择器,能进行颜色的选择

if("颜色".equals(command)){

c = JColorChooser.showDialog(frame, "请选择颜色",Color.black);

command=n;//还原选择“颜色”之前的按钮命令,否则按下颜色按钮之后无法画出图形,命令会被覆盖掉

}else{

n=command;//如果按下的不是‘颜色’,保存此按钮选择


}

另外:

如果内部类过于冗长,则将其移出,作为一个单独的类,会遇到传参的问题。

例如:将MouseListener移出为MyMouseListener.java

其实例化过程为: MyMouseListener 实现MouseListener接口,再通过创建MyMouseListener类的对象

要在MyMouseListener.java中使用Paint.java中的窗体、画布等,可以通过监听器实例化过程,构造函数传参来实现。


//Paint.java中, 将画布及当前的paint对象传递

MouseListener mouse_listener = new MyMouseListener(gra,this);

   //MyMouseListener.java中, 接收

public MyMouseListener(Graphics g,Paint p){

gra = g;

paint=p;

}

“命令”,“颜色”的获取可以通过在MyMouseListener.java中创建一个paint对象,调用paint的getCommand();返回command;[getColor()返回color]

//Paint.java中

public String getCommand(){

return command;

}

//MyMouseListener.java中

command=paint.getCommand();


Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值