📄 hsdraw1.java
字号:
/*画图程序*画笔有7种颜色5种模式*/
import java.awt.* ;
import javax.swing.* ;
import java.awt.event.* ;
import java.io.* ;
public class HsDraw1 extends JFrame {
static JTextField tt = new JTextField("") ;
HsDraw1(String title) {
//设置窗体属性
this.setTitle(title) ;
int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth() ;
int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight() ;
this.setSize(width , height) ;
MyPanel mp = new MyPanel() ;
this.add(mp , BorderLayout.CENTER) ;
mp.addMouseListener(mp) ;
mp.addMouseMotionListener(mp) ;
this.addWindowListener(mp) ;
//new 按妞类
JButton b_red = new JButton("red") ;
b_red.setForeground(Color.red) ;
JButton b_yellow = new JButton("yellow") ;
b_yellow.setForeground(Color.yellow) ;
JButton b_blue = new JButton("blue") ;
b_blue.setForeground(Color.blue) ;
JButton b_black = new JButton("black") ;
JButton b_green = new JButton("green") ;
b_green.setForeground(Color.green) ;
JButton b_orange = new JButton("orange") ;
b_orange.setForeground(Color.orange) ;
JButton b_pink = new JButton("pink") ;
b_pink.setForeground(Color.pink) ;
JButton b_line = new JButton("Line") ;
JButton b_oval = new JButton("Oval") ;
JButton b_rect = new JButton("Rect") ;
JButton b_clear = new JButton("clear") ;
JButton b_filloval = new JButton("fillOval") ;
JButton b_fillrect = new JButton("fillRect") ;
JButton b_open = new JButton("OPEN") ;
JButton b_save = new JButton("SAVE") ;
//注册按妞事件监听
b_red.addActionListener(mp) ;
b_yellow.addActionListener(mp) ;
b_blue.addActionListener(mp) ;
b_black.addActionListener(mp) ;
b_green.addActionListener(mp) ;
b_orange.addActionListener(mp) ;
b_pink.addActionListener(mp) ;
b_line.addActionListener(mp) ;
b_oval.addActionListener(mp) ;
b_rect.addActionListener(mp) ;
b_clear.addActionListener(mp) ;
b_filloval.addActionListener(mp) ;
b_fillrect.addActionListener(mp) ;
b_open.addActionListener(mp) ;
b_save.addActionListener(mp) ;
//设置颜色按妞面版
JPanel p_color = new JPanel(new FlowLayout()) ;
p_color.add(b_red) ;
p_color.add(b_yellow) ;
p_color.add(b_blue) ;
p_color.add(b_black) ;
p_color.add(b_green) ;
p_color.add(b_orange) ;
p_color.add(b_pink) ;
//设置功能键区按妞面版
JPanel p_bfile = new JPanel(new GridLayout(2 , 1)) ;
p_bfile.add(b_open) ;
p_bfile.add(b_save) ;
JPanel p_file = new JPanel(new BorderLayout()) ;
p_file.add(p_bfile , BorderLayout.WEST) ;
p_file.add(tt , BorderLayout.CENTER) ;
JPanel p_gongneng = new JPanel(new FlowLayout()) ;
p_gongneng.add(b_line) ;
p_gongneng.add(b_oval) ;
p_gongneng.add(b_rect) ;
p_gongneng.add(b_filloval) ;
p_gongneng.add(b_fillrect) ;
p_gongneng.add(b_clear) ;
JPanel p_gongnengs = new JPanel(new GridLayout(1 , 2)) ;
p_gongnengs.add(p_file) ;
p_gongnengs.add(p_gongneng) ;
//设置窗体
this.add(p_color , BorderLayout.SOUTH) ;
this.add(p_gongnengs , BorderLayout.NORTH) ;
}
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true) ;
HsDraw1 m = new HsDraw1("Zhoudl") ;
m.setVisible(true) ;
}
}
class MyPanel extends JPanel implements MouseMotionListener, MouseListener, ActionListener, WindowListener {
int num = 300 ;//大小可调,各种图形的上限
int oo = 0 ;//画笔的当前状态 0-line , 1-oval , 2-rect ,3-filloval ,4-fillrect
//记录器
int ltp = 0 ;
int otp = 0 ;
int rtp = 0 ;
int fotp = 0 ;
int frtp = 0 ;
//定义用来保存图象颜色的数组
int[] lcolor = new int[num] ;// 0-red , 1-yellow , 2-blue , 3-black ,4-greed,5-orange,6-pink
int[] ocolor = new int[num] ;// 0-red , 1-yellow , 2-blue , 3-black ,4-greed,5-orange,6-pink
int[] rcolor = new int[num] ;// 0-red , 1-yellow , 2-blue , 3-black ,4-greed,5-orange,6-pink
int[] focolor = new int[num] ;// 0-red , 1-yellow , 2-blue , 3-black ,4-greed,5-orange,6-pink
int[] frcolor = new int[num] ;// 0-red , 1-yellow , 2-blue , 3-black ,4-greed,5-orange,6-pink
//定义用来保存图象数据的数组
int[] lx1 = new int[num] ;
int[] ly1 = new int[num] ;
int[] lx2 = new int[num] ;
int[] ly2 = new int[num] ;
int[] ox1 = new int[num] ;
int[] oy1 = new int[num] ;
int[] ox2 = new int[num] ;
int[] oy2 = new int[num] ;
int[] rx1 = new int[num] ;
int[] ry1 = new int[num] ;
int[] rx2 = new int[num] ;
int[] ry2 = new int[num] ;
int[] fox1 = new int[num] ;
int[] foy1 = new int[num] ;
int[] fox2 = new int[num] ;
int[] foy2 = new int[num] ;
int[] frx1 = new int[num] ;
int[] fry1 = new int[num] ;
int[] frx2 = new int[num] ;
int[] fry2 = new int[num] ;
//构造函数,初始化画笔颜色
MyPanel() {
lcolor[0] = 3 ;
ocolor[0] = 3 ;
rcolor[0] = 3 ;
focolor[0] = 3 ;
frcolor[0] = 3 ;
}
public void paint(Graphics g) {
super.paint(g) ;//刷新界面
this.setBackground(Color.white) ;//设置背景色
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR)) ;//设置指针样式
//画线
for (int i = 0 ; i<ltp + 1 ; i++){
switch (lcolor[i]) {
case 0: g.setColor(Color.red) ; break;
case 1: g.setColor(Color.yellow) ; break;
case 2: g.setColor(Color.blue) ; break;
case 3: g.setColor(Color.black) ; break;
case 4: g.setColor(Color.green) ; break ;
case 5: g.setColor(Color.orange) ; break ;
case 6: g.setColor(Color.pink) ; break ;
}
g.drawLine(lx1[i] , ly1[i] , lx2[i] , ly2[i]) ;
}
//画圆
for (int i = 0 ; i< otp + 1 ; i++){
switch (ocolor[i]) {
case 0: g.setColor(Color.red) ; break;
case 1: g.setColor(Color.yellow) ; break;
case 2: g.setColor(Color.blue) ; break;
case 3: g.setColor(Color.black) ; break;
case 4: g.setColor(Color.green) ; break ;
case 5: g.setColor(Color.orange) ; break ;
case 6: g.setColor(Color.pink) ; break ;
}
if(ox2[i] > ox1[i]) {
if(oy2[i] > oy1[i]) {
g.drawOval(ox1[i] , oy1[i] , ox2[i] - ox1[i] , oy2[i] - oy1[i]) ;
}else{
g.drawOval(ox1[i] , oy2[i] , ox2[i] - ox1[i] , oy1[i] - oy2[i]) ;
}
}else{
if(oy2[i] > oy1[i]) {
g.drawOval(ox2[i] , oy1[i] , ox1[i] - ox2[i] , oy2[i] - oy1[i]) ;
}else{
g.drawOval(ox2[i] , oy2[i] , ox1[i] - ox2[i] , oy1[i] - oy2[i]) ;
}
}
}
//画矩形
for (int i = 0 ; i< rtp + 1 ; i++){
switch (rcolor[i]) {
case 0: g.setColor(Color.red) ; break;
case 1: g.setColor(Color.yellow) ; break;
case 2: g.setColor(Color.blue) ; break;
case 3: g.setColor(Color.black) ; break;
case 4: g.setColor(Color.green) ; break ;
case 5: g.setColor(Color.orange) ; break ;
case 6: g.setColor(Color.pink) ; break ;
}
if(rx2[i] > rx1[i]) {
if(ry2[i] > ry1[i]) {
g.drawRect(rx1[i] , ry1[i] , rx2[i] - rx1[i] , ry2[i] - ry1[i]) ;
}else{
g.drawRect(rx1[i] , ry2[i] , rx2[i] - rx1[i] , ry1[i] - ry2[i]) ;
}
}else{
if(ry2[i] > ry1[i]) {
g.drawRect(rx2[i] , ry1[i] , rx1[i] - rx2[i] , ry2[i] - ry1[i]) ;
}else{
g.drawRect(rx2[i] , ry2[i] , rx1[i] - rx2[i] , ry1[i] - ry2[i]) ;
}
}
}
//画实心圆
for (int i = 0 ; i< fotp + 1 ; i++){
switch (focolor[i]) {
case 0: g.setColor(Color.red) ; break;
case 1: g.setColor(Color.yellow) ; break;
case 2: g.setColor(Color.blue) ; break;
case 3: g.setColor(Color.black) ; break;
case 4: g.setColor(Color.green) ; break ;
case 5: g.setColor(Color.orange) ; break ;
case 6: g.setColor(Color.pink) ; break ;
}
if(fox2[i] > fox1[i]) {
if(foy2[i] > foy1[i]) {
g.fillOval(fox1[i] , foy1[i] , fox2[i] - fox1[i] , foy2[i] - foy1[i]) ;
}else{
g.fillOval(fox1[i] , foy2[i] , fox2[i] - fox1[i] , foy1[i] - foy2[i]) ;
}
}else{
if(foy2[i] > foy1[i]) {
g.fillOval(fox2[i] , foy1[i] , fox1[i] - fox2[i] , foy2[i] - foy1[i]) ;
}else{
g.fillOval(fox2[i] , foy2[i] , fox1[i] - fox2[i] , foy1[i] - foy2[i]) ;
}
}
}
//画实心矩形
for (int i = 0 ; i< frtp + 1 ; i++){
switch (frcolor[i]) {
case 0: g.setColor(Color.red) ; break;
case 1: g.setColor(Color.yellow) ; break;
case 2: g.setColor(Color.blue) ; break;
case 3: g.setColor(Color.black) ; break;
case 4: g.setColor(Color.green) ; break ;
case 5: g.setColor(Color.orange) ; break ;
case 6: g.setColor(Color.pink) ; break ;
}
if(frx2[i] > frx1[i]) {
if(fry2[i] > fry1[i]) {
g.fillRect(frx1[i] , fry1[i] , frx2[i] - frx1[i] , fry2[i] - fry1[i]) ;
}else{
g.fillRect(frx1[i] , fry2[i] , frx2[i] - frx1[i] , fry1[i] - fry2[i]) ;
}
}else{
if(fry2[i] > fry1[i]) {
g.fillRect(frx2[i] , fry1[i] , frx1[i] - frx2[i] , fry2[i] - fry1[i]) ;
}else{
g.fillRect(frx2[i] , fry2[i] , frx1[i] - frx2[i] , fry1[i] - fry2[i]) ;
}
}
}
}
//鼠标按下移动事件
public void mouseDragged(MouseEvent e) {
if(oo == 0) {
lx2[ltp] = e.getX() ;
ly2[ltp] = e.getY() ;
}
if(oo == 1) {
ox2[otp] = e.getX() ;
oy2[otp] = e.getY() ;
}
if(oo == 2) {
rx2[rtp] = e.getX() ;
ry2[rtp] = e.getY() ;
}
if(oo == 3) {
fox2[fotp] = e.getX() ;
foy2[fotp] = e.getY() ;
}
if(oo == 4) {
frx2[frtp] = e.getX() ;
fry2[frtp] = e.getY() ;
}
this.repaint() ;
}
public void mouseMoved(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
//鼠标按下
public void mousePressed(MouseEvent e) {
if(oo == 0) {
lx1[ltp] = e.getX() ;
ly1[ltp] = e.getY() ;
}
if(oo == 1) {
ox1[otp] = e.getX() ;
oy1[otp] = e.getY() ;
}
if(oo == 2) {
rx1[rtp] = e.getX() ;
ry1[rtp] = e.getY() ;
}
if(oo == 3) {
fox1[fotp] = e.getX() ;
foy1[fotp] = e.getY() ;
}
if(oo == 4) {
frx1[frtp] = e.getX() ;
fry1[frtp] = e.getY() ;
}
}
//鼠标松开
public void mouseReleased(MouseEvent e) {
if(oo == 0) {
System.out.println ("ltp = " + ltp) ;
lx2[ltp] = e.getX() ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -