簡易畫圖程式(實現橡皮筋功能)

來源:互聯網
上載者:User

/**
 * 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);
 }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.