1、 this.y2 = y2; public void setColor(Color c) this.color = c; public abstract void draw(Graphics g);PaintingBrush_Line.java文件public class PaintingBrush_Line extends PaintingBrush_Shape public PaintingBrush_Line() public PaintingBrush_Line(int x1, int y1, int x2, int y2) setShape(x1, y1, x2, y2); Over
2、ride public void draw(Graphics g) g.setColor(color); g.drawLine(x1, y1, x2, y2);PaintingBrush_Rectangle.java文件public class PaintingBrush_Rectangle extends PaintingBrush_Shape public PaintingBrush_Rectangle() public PaintingBrush_Rectangle(int x1, int y1, int x2, int y2) / 实现任意方向的绘制效果,否则直接绘制就只能支持向右下方
3、的拖拽绘制 int newX = Math.min(x1, x2); int newY = Math.min(y1, y2); int newWidth = Math.abs(x2 - x1); int newHeight = Math.abs(y2 - y1); g.drawRect(newX, newY, newWidth, newHeight);PaintingBrush_Circle.java文件public class PaintingBrush_Circle extends PaintingBrush_Shape public PaintingBrush_Circle() publ
4、ic PaintingBrush_Circle(int x1, int y1, int x2, int y2) int newWidth = Math.abs(x1 - x2); int newHeight = Math.abs(y1 - y2); g.drawOval(newX, newY, newWidth, newHeight);PaintingBrush_Triangle.java文件public class PaintingBrush_Triangle extends PaintingBrush_Shape public PaintingBrush_Triangle() public
5、 PaintingBrush_Triangle(int x1, int y1, int x2, int y2) g.drawLine(x1 + (x2 - x1) / 2, y1, x1, y2); g.drawLine(x1 + (x2 - x1) / 2, y1, x2, y2); g.drawLine(x1, y2, x2, y2);PainttingBrush.java文件import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.Act
6、ionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import javax.swing.ButtonGroup;import ja
7、vax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JRadioButton;public class PainttingBrush /* * param args */ public static void main(String args) DemoWindow2 dw = new DemoWindow2(画笔); dw.setBounds(dw.getTo
8、olkit().getScreenSize().width / 4, dw.getToolkit() .getScreenSize().height / 4, dw.getToolkit().getScreenSize().width / 2, dw.getToolkit() .getScreenSize().height / 2); dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); dw.setVisible(true);class DemoWindow2 extends JFrame implements ActionListener J
9、MenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu(文件 JMenuItem menuItem1 = new JMenuItem(打开文件 JMenuItem menuItem2 = new JMenuItem(保存文件 DrawPanel dp = new DrawPanel(); ControlPanel cp = new ControlPanel(dp); public DemoWindow2(String title) super(title); menu.add(menuItem1); menu.add(menuItem2
10、); menuBar.add(menu); setJMenuBar(menuBar); menuItem1.addActionListener(this); menuItem2.addActionListener(this); add(dp, BorderLayout.CENTER); add(cp, BorderLayout.SOUTH); public void actionPerformed(ActionEvent e) JMenuItem menuItem = (JMenuItem) e.getSource(); if (menuItem = menuItem1) else if (m
11、enuItem = menuItem2) class DrawPanel extends JPanel implements MouseListener, MouseMotionListener / 起始位置 int x1; int y1; / 终止位置 int x2; int y2; / 存储上一次终止坐标的临时变量 int oldx2; int oldy2; / 缓冲图像 BufferedImage im = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB); PaintingBrush_IShape shape = new
12、 PaintingBrush_Line(); / 当前默认的前景色 Color color = Color.green; public DrawPanel() / 设置背景色 setBackground(Color.yellow); / 获取缓冲图像的绘图类型 Graphics uig = im.createGraphics(); / 使用白色填充缓冲图像的背景 uig.setColor(Color.gray); uig.fillRect(0, 0, 1000, 1000); / 添加事件监听器 addMouseListener(this); addMouseMotionListener(th
13、is); public void mouseDragged(MouseEvent e) oldx2 = x2; oldy2 = y2; / 获取新的终止坐标 x2 = e.getX(); y2 = e.getY(); / 获取缓冲图像的绘图类变量 / 设置异或绘图模式 uig.setXORMode(Color.white); / 在缓冲图像上绘制形状 / 擦除上一次位置的绘制形状 shape.setColor(color); shape.setShape(x1, y1, oldx2, oldy2); shape.draw(uig); / 绘制新位置的形状 shape.setShape(x1,
14、y1, x2, y2); repaint(); public void mouseMoved(MouseEvent e) public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) / 设置3种坐标的初始值相等 / 获取起始坐标 x1 = e.getX(); y1 = e.getY(); x2 = x1; y2 = y1; public void mouseReleased(MouseEvent e) / 重绘当前面板,显示所绘的缓冲图像 public void paintComponent(Gra
15、phics g) super.paintComponent(g); if (im != null) g.drawImage(im, 0, 0, this); public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) class ControlPanel extends JPanel / 重载构造函数,添加颜色选择面板和形状选择面板 public ControlPanel(DrawPanel dp) setLayout(new GridLayout(2, 1); add(new ColorPanel(
16、dp); add(new ShapePanel(dp);/ 颜色选择面板类class ColorPanel extends JPanel implements ItemListener DrawPanel dp; JRadioButton jrb1 = new JRadioButton(红色 JRadioButton jrb2 = new JRadioButton(绿色 JRadioButton jrb3 = new JRadioButton(蓝色 ButtonGroup bg = new ButtonGroup(); public ColorPanel(DrawPanel dp) / 设置绘
17、图类面板的引用 this.dp = dp; bg.add(jrb1); bg.add(jrb2); bg.add(jrb3); / 设置单选按钮的默认选择状体 jrb2.setSelected(true); setLayout(new FlowLayout(); add(jrb1); add(jrb2); add(jrb3); jrb1.addItemListener(this); jrb2.addItemListener(this); jrb3.addItemListener(this); public void itemStateChanged(ItemEvent e) if (jrb1
18、= e.getSource() dp.color = Color.red; else if (jrb2 = e.getSource() dp.color = Color.green; else if (jrb3 = e.getSource() dp.color = Color.blue;/ 形状选择面板类class ShapePanel extends JPanel implements ItemListener 直线矩形圆形 JRadioButton jrb4 = new JRadioButton(三角形 public ShapePanel(DrawPanel dp) bg.add(jrb4
19、); jrb1.setSelected(true); this.setLayout(new FlowLayout(); add(jrb4); jrb4.addItemListener(this); if (jrb1.isSelected() dp.shape = new PaintingBrush_Line(); else if (jrb2.isSelected() dp.shape = new PaintingBrush_Rectangle(); else if (jrb3.isSelected() dp.shape = new PaintingBrush_Circle(); else if (jrb4.isSelected() dp.shape = new PaintingBrush_Triangle();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1