/**
* Author Zhao Xing
*/
package homeWoek;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
/**
* @author Administrator
*
*/
public class DrawPad extends JFrame {
private static final long serialVersionUID = 1L;
private JButton colorButton, clearButton;
private JLabel statusLabel, styleJLabel, strokeJLabel;
private JComboBox shapeBox, styleComboBox;
private JTextField inputField, strokeField;// 下拉框
private JCheckBox fillCheckBox;// 是否填充
private JPanel toolPanel, drawPanel, wordJPanel,northJPanel;
private String namses[] = { "Line", "Oval", "Rect" }, fontNames[] = {
"Serif", "SansSerif", "Monospaced" };
private boolean fill = false;//填充标志
private boolean clear = false, word = false;//清除和文字标记
private final int LINE = 0, OVAL = 1, RECT = 2;
private int shape = 0;// 默认直线
private Color color = Color.black;// 当前颜色为黑色
// private int R,G,B;//保存当前颜色
private int topX, topY, x, y, height, width;
private int size=3;//字体大小
private String string = "",font="Serif";
public DrawPad() {
super("Drawing");
shapeBox = new JComboBox(namses);
shapeBox.setMaximumRowCount(3);
shapeBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
shape = shapeBox.getSelectedIndex();
}
});
fillCheckBox = new JCheckBox("Fill");
fillCheckBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED)// 如果选中
fill = true;// 填充
else
fill = false;
}
});
colorButton = new JButton("Color");
colorButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
chooseColor();
}
});
clearButton = new JButton("Clear");
clearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
clear();
}
});
toolPanel = new JPanel();
toolPanel.setLayout(new GridLayout(1, 4));
toolPanel.add(shapeBox);
toolPanel.add(fillCheckBox);
toolPanel.add(colorButton);
toolPanel.add(clearButton);
drawPanel = new JPanel();
drawPanel.setBackground(Color.white);
statusLabel = new JLabel();
inputField = new JTextField(10);
inputField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
word = true;// 输入文字
string = event.getActionCommand();
}
});
styleJLabel=new JLabel("Word Style");
styleComboBox=new JComboBox(fontNames);
styleComboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent event) {
// TODO Auto-generated method stub
font=fontNames[styleComboBox.getSelectedIndex()];//得到选中的字体名字
}
});
strokeJLabel=new JLabel("Stroke");
strokeField=new JTextField(3);
strokeField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
size=Integer.parseInt(event.getActionCommand());
}
});
wordJPanel=new JPanel();
wordJPanel.setLayout(new FlowLayout());
wordJPanel.add(inputField);
wordJPanel.add(styleJLabel);
wordJPanel.add(styleComboBox);
wordJPanel.add(strokeJLabel);
wordJPanel.add(strokeField);
northJPanel=new JPanel();
northJPanel.setLayout(new GridLayout(2,1));
northJPanel.add(toolPanel);
northJPanel.add(wordJPanel);
Container container = getContentPane();
container.add(northJPanel, BorderLayout.NORTH);
container.add(drawPanel, BorderLayout.CENTER);
container.add(statusLabel, BorderLayout.SOUTH);
addMouseListener(new MouseHandler());// 注册鼠标和键盘事件
addMouseMotionListener(new MouseMotionHandler());
setSize(400, 400);
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);//关键步骤,如没有,则会产生一堆线条
if (word) {
g.setFont(new Font(font,Font.PLAIN,size));//设置字体
g.drawString(string, topX, topY);
word=false;
return;
}
width = Math.abs(topX - x);
height = Math.abs(topY - y);
if (shape != LINE) {// 确定起点
topX = Math.min(topX, x);
topY = Math.min(topY, y);
}
if (shape != LINE && fill) {
switch (shape) {
case OVAL:
g.setColor(color);
g.fillOval(topX, topY, width, height);
break;
case RECT:
g.setColor(color);
g.fillRect(topX, topY, width, height);
break;
default:
break;
}
} else {
switch (shape) {
case LINE:
g.setColor(color);
g.drawLine(topX, topY, x, y);
break;
case OVAL:
g.setColor(color);
g.drawOval(topX, topY, width, height);
break;
case RECT:
g.setColor(color);
g.drawRect(topX, topY, width, height);
break;
default:
break;
}
}
if (clear) {
g.setColor(Color.white);
g.fillRect(0, 0, getSize().width, getSize().height);
}
}
private class MouseHandler extends MouseAdapter {// 侦听鼠标按下和松开
public void mousePressed(MouseEvent event) {
topX = event.getX();
topY = event.getY();
}
public void mouseReleased(MouseEvent event) {
x = event.getX();
y = event.getY();
repaint();// 刷新
}
}
private class MouseMotionHandler extends MouseMotionAdapter {// 侦听鼠标移动
public void mouseMoved(MouseEvent event) {
statusLabel.setText("(" + event.getX() + "," + event.getY() + ")"
+ fill);
}
public void mouseDragged(MouseEvent event) {//产生橡皮筋效果
x = event.getX();
y = event.getY();
repaint();// 刷新
}
}
public void chooseColor() {
color = JColorChooser.showDialog(this, "Choose a color", color);
// R=color.getRed();//得到选中的颜色
// G=color.getGreen();
// B=color.getBlue();
}
public void clear() {
color = color.black;
fill = false;
clear = true;
repaint();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DrawPad application = new DrawPad();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}