画板+监听器_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 画板+监听器

画板+监听器

 2013/8/6 19:08:24  天之娇子zjn  程序员俱乐部  我要评论(0)
  • 摘要:一、画板实现需要注意的地方1、如果要设置线条的颜色,只要在调用Graphics绘制方法前,调用它的setColor方法即可。2、显示颜色选择器的代码://这是JColorChooser中的一个publicstatic方法,可直接调用this.color=javax.swing.JColorChooser.showDialog(null,"请选择颜色",java.awt.Color.black);3、取得界面上的画布对象,一定要在界面setVisible后取得,否则取得的为null。二、画板代码
  • 标签:监听
一、画板实现需要注意的地方
1、如果要设置线条的颜色,只要在调用Graphics绘制方法前,调用它的setColor方法即可。
2、显示颜色选择器的代码:
//这是JColorChooser中的一个public static方法,可直接调用
  this.color = javax.swing.JColorChooser.showDialog(null,"请选择颜色",java.awt.Color.black);
3、取得界面上的画布对象,一定要在界面setVisible后取得,否则取得的为null。
二、画板代码(其中涉及到了监听器的使用):

*******************************主函数所在类****************************

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
* 画板界面类,该类要继承自JFrame
*
*/
public class DrawBorder extends JFrame {

/**
* 程序的入口主函数
*/
public static void main(String[] args) {
DrawBorder db = new DrawBorder();
db.initGUI();
}

/**
* 初始化界面的方法
*/
private void initGUI() {
// 设置窗体对象的属性
this.setSize(new Dimension(600, 500));
this.setTitle("简单画板");
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);

// this.setLayout(new BorderLayout());

JPanel northPanel = new JPanel();

JButton btnLine = new JButton("Line");
JButton btnRect = new JButton("Rect");
JButton btnOval = new JButton("Oval");
JButton btnRoundRect = new JButton("RoundRect");
JButton btnTriang = new JButton("Triang");
// btnTriang.setActionCommand("");

northPanel.add(btnLine);
northPanel.add(btnRect);
northPanel.add(btnOval);
northPanel.add(btnRoundRect);
northPanel.add(btnTriang);


/**
* 使用匿名内部类来实现动作事件处理
*/
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent e) {
shapeType = e.getActionCommand();
System.out.println("当前点击的按钮时:"+shapeType);
}
};
//给事件源添加动作监听器,绑定事件处理类的对象
btnLine.addActionListener(al);
btnRect.addActionListener(al);
btnOval.addActionListener(al);
btnRoundRect.addActionListener(al);
btnTriang.addActionListener(al);

this.add(northPanel,BorderLayout.NORTH);


JPanel drawPanel = new JPanel();
drawPanel.setBackground(Color.WHITE);
this.add(drawPanel,BorderLayout.CENTER);


this.setVisible(true);

//一定要在窗体可见之后才能获取画布,否则获取的画布为null
Graphics g = drawPanel.getGraphics();

//绘制图形的事件处理类
DrawListener dl = new DrawListener(g,this);
//给事件源drawPanel添加鼠标监听器方法,绑定事件出类的对象dl
drawPanel.addMouseListener(dl);
}

//存储图形的属性
private String shapeType = "Line";

/**
* 获取图形的属性值
* @return 返回shapeType的值
*/
public String getShapeType(){
return shapeType;
}

}
 

**************************继承鼠标监听器类******************************

import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class DrawListener implements MouseListener {

// 声明绘制图形的对象
private Graphics g;
// 鼠标按下的坐标值
private int x1, y1, x2, y2;
// 图形
private DrawBorder db;

/**
* 构造方法
* @param g绘制图形的对象
*/
public DrawListener(Graphics g,DrawBorder db){
this.g = g;
this.db =db ;
}

/**
* 在事件源上发生鼠标单击操作的时候执行该方法
*/
public void mouseClicked(MouseEvent e) {

}

/**
* 在事件源上发生鼠标按下操作的时候执行该方法
*/
public void mousePressed(MouseEvent e) {
// 获取鼠标按下时的坐标值
x1 = e.getX();
y1 = e.getY();
}

/**
* 在事件源上发生鼠标释放操作的时候执行该方法
*/
public void mouseReleased(MouseEvent e) {
// 获取鼠标释放时的坐标值
x2 = e.getX();
y2 = e.getY();

//System.out.println(g+"  "+x1+"   "+y1+"   "+x2+"    "+y2);
if(db.getShapeType().equals("Line")){
//绘制一条直线
g.drawLine(x1, y1, x2, y2);
}else if(db.getShapeType().equals("Rect")){
g.drawRect(x1, y1, Math.abs(x1-x2), Math.abs(y1-y2));
}
}

/**
* 鼠标移动到事件源上时执行该方法 只执行一次
*/
public void mouseEntered(MouseEvent e) {

}

/**
* 鼠标离开到事件源上时执行该方法 只执行一次
*/
public void mouseExited(MouseEvent e) {

}

}
发表评论
用户名: 匿名