用java编写画板
2017-01-02 13:45
567 查看
用java编写画板是我学习java的第二个事例,写画板其中要表现的功能在后面的代码中并没有全部实现,只实现了铅笔、刷子、橡皮擦、画直线、画矩形这些功能,
其中有用到继承、接口、方法重载、传参等知识点,在代码中我会用注释解释:
1、创建工程,工程名可以随意设置
2、创建DrawBroad类,继承JFrame,并导包
13、在panelColor中添加三个面板来建立颜色框
16、将两个按钮添加到panelColorLeft面板上去,写在this.setVisible(true);之前
19、在DrawListener类中进行计算
// 添加颜色监听对象
ColorListener cl = new ColorListener(this);
其中有用到继承、接口、方法重载、传参等知识点,在代码中我会用注释解释:
1、创建工程,工程名可以随意设置
2、创建DrawBroad类,继承JFrame,并导包
import javax.swing.JFrame; public class DrawBroad extends JFrame { }3、在包中创建Text类,并建立主函数
public class Text { public static void main(String[] args) { } }4、在Text类中的主函数建立DrawBroad对象以调用DrawBroad类中的方法
DrawBroad db = new DrawBroad();5、在DrawBroad类中创建方法
public void iniFrame(){ }6、在Text类中调用iniFrame方法
db.iniFrame();7、在方法iniFrame方法中编写窗体属性,在后面的代码中都要写在iniFrame方法中,不然就在主函数中运行不起来
//创建窗口标题 this.setTitle("画板"); //创建窗口大小 this.setSize(600,500); //创建窗口默认关闭操作 this.setDefaultCloseOperation(3); //创建窗口出现的相对位置(屏幕中央) this.setLocationRelativeTo(null); //设置窗口的可见性 this.setVisible(true);8、创建边框布局,将窗体划分为左中下三部分
//创建边框布局 BorderLayout bl = new BorderLayout(); this.setLayout(bl);9、在三个部分上添加三个面板panelTool,panelDraw,panelColor,并设置三个面板属性,将三个面板添加到窗体上
// 创建三个面板 JPanel panelTool = new JPanel(); JPanel panelDraw = new JPanel(); JPanel panelColor = new JPanel(); // 设置背景色 panelTool.setBackground(Color.gray); panelDraw.setBackground(Color.white); panelColor.setBackground(Color.green); // 设置这三个面板的大小 panelTool.setPreferredSize(new Dimension(50, 0)); panelColor.setPreferredSize(new Dimension(0, 50)); // 将三个面板添加到窗体上去 this.add(panelTool, BorderLayout.WEST); this.add(panelColor, BorderLayout.SOUTH); this.add(panelDraw);10、在panelTool中创建单选按钮,将图片放在按钮上
//创建图片对象,将图片放在按钮上 ImageIcon mi = new ImageIcon("images/draw"+i+".jpg"); ImageIcon mi1 = new ImageIcon("images/draw"+i+"-1.jpg"); ImageIcon mi2 = new ImageIcon("images/draw"+i+"-2.jpg"); ImageIcon mi3 = new ImageIcon("images/draw"+i+"-3.jpg"); jrb.setIcon(mi); jrb.setSelectedIcon(mi3); jrb.setPressedIcon(mi2); jrb.setRolloverIcon(mi1);
//将按钮边框去掉
jrb.setBorder(null);11、将panelTool面板设置为流式布局,让单选按钮紧密连在一起,起到美化作用
// 将panelTool设置为流式布局 panelTool.setLayout(new FlowLayout(0, 0, 0));12、将panelTool的背景色设置为按钮颜色,起到美化作用
// 将panelTool面板的背景色设置为按钮的颜色 Color color = new Color(233, 234, 238); // 设置背景色 panelTool.setBackground(color); panelDraw.setBackground(Color.white); panelColor.setBackground(color);
13、在panelColor中添加三个面板来建立颜色框
// 在panelColor面板上在次添加三个面板 // 创建三个面板对象 JPanel panelColorFrame = new JPanel(); JPanel panelColorLeft = new JPanel(); JPanel panelColorRight = new JPanel(); // 设置面板背景 panelColorFrame.setBackground(Color.blue); panelColorLeft.setBackground(Color.white); panelColorRight.setBackground(Color.orange); // 设置面板大小 panelColorFrame.setPreferredSize(new Dimension(180, 30)); panelColorLeft.setPreferredSize(new Dimension(30, 30)); panelColorRight.setPreferredSize(new Dimension(150, 30)); // 设置流式布局 panelColor.setLayout(new FlowLayout(0, 5, 10)); panelColorFrame.setLayout(new FlowLayout(0, 0, 0)); panelColorLeft.setLayout(new FlowLayout(0, 0, 0)); panelColorRight.setLayout(new FlowLayout(0, 0, 0)); // 将三个面板添加到下方面板 panelColor.add(panelColorFrame); panelColorFrame.add(panelColorLeft); panelColorFrame.add(panelColorRight);14、在panelColorRight中添加按钮,并添加颜色
// 在panelColorRight上添加二十个按钮 Color[] color1 = { Color.black, Color.blue, Color.cyan, Color.gray, Color.green, Color.black, Color.blue, Color.cyan, Color.gray, Color.green, Color.black, Color.blue, Color.cyan, Color.gray, Color.green, Color.black, Color.blue, Color.cyan, Color.gray, Color.green }; for (int i = 0; i < 20; i++) { JButton button = new JButton(); button.setPreferredSize(new Dimension(15, 15)); button.setBackground(color1[i]); panelColorRight.add(button);15、将颜色框设置为凹下,是在按钮里设置
BevelBorder bb = new BevelBorder(1, Color.white, Color.gray); button.setBorder(bb);
16、将两个按钮添加到panelColorLeft面板上去,写在this.setVisible(true);之前
JButton b1 = new JButton(); JButton b2 = new JButton(); b1.setBackground(Color.black); b2.setBackground(Color.white); BevelBorder bb1 = new BevelBorder(0, Color.white, Color.gray); b1.setBorder(bb1); b2.setBorder(bb1); panelColorLeft.add(b2); panelColorLeft.add(b1);17、创建DrawListener类,继承接口(implements)mouseListener,然后添加鼠标监听方法,这种方法为方法重写
public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub }18、在画板上画笔,在DrawListener类中进行传参
g = this.getGraphics(); DrawListener dl = new DrawListener(g, bg); this.addMouseListener(dl);
//是在DrawListener类中进行创建
public ButtonGroup bg; public Graphics gra; public DrawListener(Graphics g1, ButtonGroup bg1) { gra = g1; bg = bg1; }
19、在DrawListener类中进行计算
public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub x1 = e.getX(); y1 = e.getY();
//获得按钮上的标签 ButtonModel bm = bg.getSelection(); command = bm.getActionCommand(); } public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub x2 = e.getX(); y2 = e.getY(); if ("10".equals(command)) { gra.drawLine(x1, y1, x2, y2); }20、获得颜色来改变画笔的颜色,需要创建一个ColorListener类
// 添加颜色监听对象
ColorListener cl = new ColorListener(this);
public class ColorListener implements ActionListener { public DrawBroad db; public ColorListener(DrawBroad db1) { db = db1; } public void actionPerformed(ActionEvent e) { Object obj = e.getSource(); JButton button = (JButton) obj; Color color = button.getBackground(); db.g.setColor(color); } }21、添加画笔,需要在DrawListener类中接口MouseMotionListener,在方法中计算公式
@Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub x2 = e.getX(); y2 = e.getY(); if ("6".equals(command)) { gra.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; }22、添加刷子,其中画笔类型父类强行转化为子类类型
public Graphics2D gra;
public DrawListener(Graphics g1, ButtonGroup bg1) { gra = (Graphics2D) g1; bg = bg1;
else if ("7".equals(command)) { gra.setStroke(new BasicStroke(10)); gra.drawLine(x1, y1, x2, y2); x1 = x2; y1 = y2; gra.setStroke(new BasicStroke(1)); }23、添加橡皮擦,其中要设置背景色为白色
else if ("2".equals(command)) { gra.setColor(Color.white); gra.setStroke(new BasicStroke(10)); gra.drawRect(Math.min(x2, x1), Math.min(y2, y1), Math.abs(x2 - x1), Math.abs(y2 - y1)); x1 = x2; y1 = y2; gra.setStroke(new BasicStroke(1)); }其余功能有些类似,总共实现了这几大功能大概打画板出来
相关文章推荐
- 用JAVA编写自己的机器人,然后一起“厮杀”
- 编写跨平台Java程序注意事项
- 编写一个javabean
- Java代码编写的30条建议
- JAVA代码编写的30条建议 [转]
- JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署
- JAVA代码编写的30条建议
- Java代码编写的30条建议
- 编写跨平台Java程序注意事项
- 利用java编写网络通信程序
- JAVA编写的日历
- Java代码编写的一般性指导
- Java代码编写的30条建议
- 使用UML编写Java应用程序
- 如何编写跨平台的Java程序?
- 用Java编写邮件发送程序
- 用Java编写ASP组件
- 自己编写JAVA环境下的文件上传组件
- 如何用Java来编写可根据SMTP和POP3协议来收发E-mail的Java Applet。
- JAVA代码编写的30条建议