
import javax.swing.*; |
import java.awt.image.*; |
import java.awt.datatransfer.*; |
import javax.swing.*; |
import java.awt.*; |
import java.awt.event.*; |
import java.awt.image.*;//....................... |
import java.io.*; |
import java.awt.dnd.*;//................... |
import javax.imageio.*;//.............. |
import java.util.Iterator; |
import java.lang.Iterable; |
import java.util.List; |
//JFrame(窗口)<JMenuBar(菜单条)<JMenu(菜单)<JMenuItem(菜单里的项目) |
//JFrame(窗口)<JScrollPane(滚动条)<JTextArea(文件编辑面板)<JPopupMenu(右键菜单) |
//JFrame(窗口)<JScrollPane(滚动条)<JLabel(标签) |
//JFrame(窗口)<JPanel(板面)<JTextField(文件编辑条) |
//JFrame(窗口)<JPanel(板面)<JButton(按钮) |
//JFrame(窗口)<JPanel(板面)<JRadioButton(单选按钮,用ButtonGroup组合) |
//JFrame(窗口)<JPanel(板面)<JCheckBox(复选框) |
//JFrame(窗口)<JPanel(板面)<JComboBox(下拉选择框) |
//JFrame(窗口)<Box(布局管理器) |
public class HandDraw |
{ |
//画图区的宽度 |
private final int AREA_WIDTH=500; |
//画图区的高度 |
private final int AREA_HEIGHT=400; |
//下面的变量保存上一次鼠标拖动事件的鼠标坐标 |
private int preX = -1 ; |
private int preY = -1 ; |
//定义右键菜单用于设置画笔颜色 |
JPopupMenu pop=new JPopupMenu();//右键菜单 |
JMenuItem chooseColor = new JMenuItem("选择颜色"); |
//定义 一个BufferedImage对象.......绘制位图..................................................... |
//图像是先画在BufferedImage上的,再加到DrawCanvas中------------------------ |
BufferedImage image=new BufferedImage(AREA_WIDTH,AREA_HEIGHT,BufferedImage.TYPE_INT_RGB); |
//获取image对象的Graphics(Graphics翻译:制图法、制图学、图表算法) |
Graphics g=image.getGraphics();// |
//.......................................................................................... |
private JFrame f = new JFrame("简单手绘板"); |
private DrawCanvas drawArea=new DrawCanvas();//画布 |
//用于保存画笔颜色,默认是红色 |
private Color foreColor = new Color(255,0,0); |
//............................................................................. |
public void init(){ |
|
chooseColor.addActionListener(new ActionListener(){ |
public void actionPerformed(ActionEvent ae){ |
//弹出一个非模式的颜色选择 ---对话框JDialog--- |
//并可以分别为“确定”按钮,“取消”按钮指定事件监听器---------------------------- |
//颜色选择器,系统全准备好了(按钮都准备了)---------------------------- |
final JColorChooser colorPane = new JColorChooser(foreColor); |
//《疯狂java讲义》P483 createDialog()方法-------------------------------------- |
JDialog jd = JColorChooser.createDialog(f,"选择画笔颜色",false,colorPane, |
//非模式//颜色选择器 |
//“确定”按钮的位置,为它设置事件监听器------------------------------------ |
new ActionListener(){ |
public void actionPerformed(ActionEvent ae){ |
foreColor = colorPane.getColor(); |
} |
},null);//“取消”按钮的位置----------------------------------------------------- |
jd.setVisible(true); |
} |
}); |
//将菜单项组合成右键菜单--------------------------------------------------------------- |
pop.add(chooseColor); |
//将右键菜单添加到drawArea对象中----相当于鼠标右键监听器------------------------------ |
//--------------卡在这里半天原来是DrawCanvas的继承关系变了DrawCanvas extends JPanel--------------- |
//---------------------------之前是继承Canvas,现在是JPanel----------------------------- |
drawArea.setComponentPopupMenu(pop); |
//drawArea.add(pop); |
//将image对象背景色填充成白色 |
g.fillRect(0,0,AREA_WIDTH,AREA_HEIGHT); |
//这是画布的大小。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 |
drawArea.setPreferredSize(new Dimension(AREA_WIDTH,AREA_HEIGHT)); |
//监听鼠标移动 (Motion左键) 动作。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 |
drawArea.addMouseMotionListener(new MouseMotionAdapter(){ |
//实现 按下鼠标并拖动的 事件处理器。。。。。。。。。。。。。。 |
public void mouseDragged(MouseEvent e){ |
//如果preX和preY大于0 |
if(preX > 0 && preY > 0){ |
//设置当前颜色 |
g.setColor(foreColor); |
//绘制 从上一次鼠标拖动事件点到本次鼠标拖动事件点的 线段 |
g.drawLine(preX,preY,e.getX(),e.getY()); |
} |
//将当前鼠标事件点的X,Y坐标保存起来 |
preX = e.getX(); |
preY = e.getY(); |
//重绘darwArea对象 |
drawArea.repaint(); |
} |
}); |
|
//监听鼠标事件(没有Motion)(右键)。。。。。。。。。上面是监听鼠标移动。。。。。。。。。。。。 |
drawArea.addMouseListener(new MouseAdapter(){ |
//实现 鼠标键松开 的事件处理器。。。。。。。。。。。。。。。。。。。。。。。。 |
public void mouseReleased(MouseEvent e){ |
|
//松开鼠标键时,把上一次鼠标拖动事件点的X,Y坐标设为-1 |
preX = -1; |
preY = -1; |
} |
}); |
//此代码在swing中相当于鼠标右键监听器---------------------------------------------------- |
//new JTextArea().setComponentPopupMenu(pop); |
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); |
f.add(drawArea); |
f.pack(); |
f.setVisible(true); |
} |
//主程序入口 |
public static void main(String[] args){ |
new HandDraw().init(); |
} |
//内部类 |
class DrawCanvas extends JPanel//------------------------------------------------ |
{ |
//重写JPanel的paint方法,实现绘画 |
public void paint(Graphics g){ |
//将image绘制到该组件上 |
g.drawImage(image,0,0,null); |
} |
} |
} |




初级程序员
by: 菜鸟慢飞 发表于:2018-09-13 08:55:10 顶(0) | 踩(0) 回复
学习一下
回复评论