十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
找到了,很久以前写的一个简单画图,呵呵~当时要求用AWT写,很难受。
创新互联主营新民网站建设的网络公司,主营网站建设方案,重庆APP开发,新民h5小程序定制开发搭建,新民网站营销推广欢迎新民等地区企业咨询
package net.miqiang.gui;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
/**
* 简单画图板程序
* 好久没用 AWT 了,写起来真别扭,如果用 swing 会很舒服,有空再改写吧。
*
* @author 米强
*
*/
public class TestMain extends Frame {
// 画板
private Palette palette = null;
// 显示当前颜色的面板
private Panel nonceColor = null;
// 画笔粗细
private Label drawWidth = null;
// 画笔端点的装饰
private Label drawCap = null;
// 选取颜色按钮的监听事件类
private ButtonColorAction buttonColorAction = null;
// 鼠标进入按钮后光标样式的监听事件类
private ButtonCursor buttonCursor = null;
// 画笔样式的监听事件
private ButtonStrokeAction buttonStrokeAction = null;
/**
* 构造方法
*
*/
public TestMain() {
// 设置标题栏文字
super("简易画图板");
// 构造一个画图板
palette = new Palette();
Panel pane = new Panel(new GridLayout(2, 1));
// 画笔颜色选择器
Panel paneColor = new Panel(new GridLayout(1, 13));
// 12 个颜色选择按钮
Button [] buttonColor = new Button[12];
Color [] color = {Color.black, Color.blue, Color.cyan, Color.darkGray, Color.gray, Color.green, Color.magenta, Color.orange, Color.pink, Color.red, Color.white, Color.yellow};
// 显示当前颜色的面板
nonceColor = new Panel();
nonceColor.setBackground(Color.black);
paneColor.add(nonceColor);
buttonColorAction = new ButtonColorAction();
buttonCursor = new ButtonCursor();
for(int i = 0; i buttonColor.length; i++){
buttonColor[i] = new Button();
buttonColor[i].setBackground(color[i]);
buttonColor[i].addActionListener(buttonColorAction);
buttonColor[i].addMouseListener(buttonCursor);
paneColor.add(buttonColor[i]);
}
pane.add(paneColor);
// 画笔颜色选择器
Panel paneStroke = new Panel(new GridLayout(1, 13));
// 控制画笔样式
buttonStrokeAction = new ButtonStrokeAction();
Button [] buttonStroke = new Button[11];
buttonStroke[0] = new Button("1");
buttonStroke[1] = new Button("3");
buttonStroke[2] = new Button("5");
buttonStroke[3] = new Button("7");
buttonStroke[4] = new Button("9");
buttonStroke[5] = new Button("11");
buttonStroke[6] = new Button("13");
buttonStroke[7] = new Button("15");
buttonStroke[8] = new Button("17");
buttonStroke[9] = new Button("■");
buttonStroke[10] = new Button("●");
drawWidth = new Label("3", Label.CENTER);
drawCap = new Label("●", Label.CENTER);
drawWidth.setBackground(Color.lightGray);
drawCap.setBackground(Color.lightGray);
paneStroke.add(drawWidth);
for(int i = 0; i buttonStroke.length; i++){
paneStroke.add(buttonStroke[i]);
buttonStroke[i].addMouseListener(buttonCursor);
buttonStroke[i].addActionListener(buttonStrokeAction);
if(i = 8){
buttonStroke[i].setName("width");
}else{
buttonStroke[i].setName("cap");
}
if(i == 8){
paneStroke.add(drawCap);
}
}
pane.add(paneStroke);
// 将画笔颜色选择器添加到窗体中
this.add(pane, BorderLayout.NORTH);
// 将画图板添加到窗体中
this.add(palette);
// 添加窗口监听,点击关闭按钮时退出程序
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 设置窗体 ICON 图标
this.setIconImage(Toolkit.getDefaultToolkit().createImage("images/palette.png"));
// 设置窗口的大小
this.setSize(new Dimension(400, 430));
// 设置窗口位置,处于屏幕正中央
this.setLocationRelativeTo(null);
// 显示窗口
this.setVisible(true);
}
/**
* 程序入口
*
* @param args
* 字符串数组参数
*/
public static void main(String[] args) {
new TestMain();
}
/**
* 选取颜色按钮的监听事件类
* @author 米强
*
*/
class ButtonColorAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Color color_temp = ((Button)e.getSource()).getBackground();
nonceColor.setBackground(color_temp);
palette.setColor(color_temp);
}
}
/**
* 鼠标进入按钮变换光标样式监听事件类
* @author 米强
*
*/
class ButtonCursor extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
((Button)e.getSource()).setCursor(new Cursor(Cursor.HAND_CURSOR));
}
public void mouseExited(MouseEvent e) {
((Button)e.getSource()).setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
/**
* 设置画笔的监听事件类
* @author 米强
*
*/
class ButtonStrokeAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Button button_temp = (Button) e.getSource();
String name = button_temp.getName();
if(name.equalsIgnoreCase("width")){
drawWidth.setText(button_temp.getLabel());
palette.setStroke(Float.parseFloat(button_temp.getLabel()));
}else if(name.equalsIgnoreCase("cap")){
drawCap.setText(button_temp.getLabel());
if(button_temp.getLabel().equals("■")){
palette.setStroke(BasicStroke.CAP_SQUARE);
}else if(button_temp.getLabel().equals("●")){
palette.setStroke(BasicStroke.CAP_ROUND);
}
}
}
}
}
/**
* 画板类
*
* @author 米强
*
*/
class Palette extends Panel implements MouseListener, MouseMotionListener {
// 鼠标 X 坐标的位置
private int mouseX = 0;
// 上一次 X 坐标位置
private int oldMouseX = 0;
// 鼠标 Y 坐标的位置
private int mouseY = 0;
// 上一次 Y 坐标位置
private int oldMouseY = 0;
// 画图颜色
private Color color = null;
// 画笔样式
private BasicStroke stroke = null;
// 缓存图形
private BufferedImage image = null;
/**
* 构造一个画板类
*
*/
public Palette() {
this.addMouseListener(this);
this.addMouseMotionListener(this);
// 默认黑色画笔
color = new Color(0, 0, 0);
// 设置默认画笔样式
stroke = new BasicStroke(3.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
// 建立 1280 * 1024 的 RGB 缓存图象
image = new BufferedImage(1280, 1024, BufferedImage.TYPE_INT_RGB);
// 设置颜色
image.getGraphics().setColor(Color.white);
// 画背景
image.getGraphics().fillRect(0, 0, 1280, 1024);
}
/**
* 重写 paint 绘图方法
*/
public void paint(Graphics g) {
super.paint(g);
// 转换为 Graphics2D
Graphics2D g2d = (Graphics2D) g;
// 获取缓存图形 Graphics2D
Graphics2D bg = image.createGraphics();
// 图形抗锯齿
bg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// 设置绘图颜色
bg.setColor(color);
// 设置画笔样式
bg.setStroke(stroke);
// 画线,从上一个点到新的点
bg.drawLine(oldMouseX, oldMouseY, mouseX, mouseY);
// 将缓存中的图形画到画板上
g2d.drawImage(image, 0, 0, this);
}
/**
* 重写 update 方法
*/
public void update(Graphics g) {
this.paint(g);
}
/**
* @return stroke
*/
public BasicStroke getStroke() {
return stroke;
}
/**
* @param stroke 要设置的 stroke
*/
public void setStroke(BasicStroke stroke) {
this.stroke = stroke;
}
/**
* 设置画笔粗细
* @param width
*/
public void setStroke(float width) {
this.stroke = new BasicStroke(width, stroke.getEndCap(), stroke.getLineJoin());
}
/**
* 设置画笔端点的装饰
* @param cap 参考 java.awt.BasicStroke 类静态字段
*/
public void setStroke(int cap) {
this.stroke = new BasicStroke(stroke.getLineWidth(), cap, stroke.getLineJoin());
}
/**
* @return color
*/
public Color getColor() {
return color;
}
/**
* @param color 要设置的 color
*/
public void setColor(Color color) {
this.color = color;
}
public void mouseClicked(MouseEvent mouseEvent) {
}
/**
* 鼠标按下
*/
public void mousePressed(MouseEvent mouseEvent) {
this.oldMouseX = this.mouseX = mouseEvent.getX();
this.oldMouseY = this.mouseY = mouseEvent.getY();
repaint();
}
public void mouseReleased(MouseEvent mouseEvent) {
}
/**
* 鼠标进入棋盘
*/
public void mouseEntered(MouseEvent mouseEvent) {
this.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
}
/**
* 鼠标退出棋盘
*/
public void mouseExited(MouseEvent mouseEvent) {
this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
/**
* 鼠标拖动
*/
public void mouseDragged(MouseEvent mouseEvent) {
this.oldMouseX = this.mouseX;
this.oldMouseY = this.mouseY;
this.mouseX = mouseEvent.getX();
this.mouseY = mouseEvent.getY();
repaint();
}
public void mouseMoved(MouseEvent mouseEvent) {
}
}
package epm.mp.gateway.util;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JFrame;
public class Rose extends JFrame implements ComponentListener, ItemListener {
private JComboBox comboboxColor;
// 颜色组合框
public Rose() {
super("玫瑰线");
this.setSize(600, 400);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());
Object data[] = { Color.red, Color.green, Color.blue };
comboboxColor = new JComboBox(data);
// 颜色组合框
comboboxColor.addItemListener(this);
// 注册组合框的选择事件监听器
this.add(comboboxColor);
this.addComponentListener(this);
// 注册框架窗口的选择事件监听器
this.setVisible(true);
this.validate();
}
//r=asin3θ
//转化为直角坐标系
// 输入下面程序用于输出三叶玫瑰线的图形,三叶玫瑰线的参数方程为:
// x = r * sin(3t)* cos(t);
//y = r *sin(3t) * sin(t)
//其中: 0 = t = 2 * 3.14159
//
public void paint(Graphics g){
paint(g,3);
}
public void paint(Graphics g,int roses) {
int x0, y0;
// 原点坐标
x0 = this.getWidth() / 2;
// 窗口的宽度
y0 = this.getHeight() / 2;
g.setColor((Color) comboboxColor.getSelectedItem());
// 设置画线颜色为组合框选中颜色
g.drawLine(x0, 0, x0, y0 * 2);
g.drawLine(0, y0, x0 * 2, y0);
int j = 0;
while (j 200) {
for (int i = 0; i 1023; i++) {
double angle = i * Math.PI / 512;
double radius = j * Math.sin(roses * angle);
int x = (int) Math.round(radius * Math.cos(angle) );
int y = (int) Math.round(radius * Math.sin(angle));
g.fillOval(x0 + x, y0 + y, 1, 1);//画点
}
j += 10;
}
}
public void itemStateChanged(ItemEvent e) {
// 选中单选按钮
repaint();
// 重画
}
public void componentResized(ComponentEvent e) {
// 改变窗口大小时
repaint();
}
public void componentMoved(ComponentEvent e) {
}
public void componentHidden(ComponentEvent e) {
}
public void componentShown(ComponentEvent e) {
}
public static void main(String[] arg) {
new Rose();
}
}
我这里有。要加分哦。兄弟。下面就是JAVA的源码:
// 3D painted fractal mountains, Evgeny Demidov 12 Oct 2001
import java.awt.*;
import java.awt.event.*;
import java.util.StringTokenizer;
public class MountainC extends java.applet.Applet
implements MouseListener, MouseMotionListener {
int n = 16, n1, h,w,h2,w2, mx0,my0, xPol[],yPol[], iCol[][][];
double rnd, fiX = .2, fiY = .3, dfi = .01, scale = .8, m20,m21,m22;
double vert[][][], vert1[][][], Norm[][][][], Norm1z[][][], M[];
Image buffImage; Graphics buffGraphics;
Color col[][];
boolean painted;
public void init(){
w = getSize().width; h = getSize().height; w2 = w/2; h2 = h/2;
String s=getParameter("N"); if (s != null) n = Integer.parseInt(s);
xPol = new int[3]; yPol = new int[3];
buffImage = createImage(w, h); buffGraphics = buffImage.getGraphics();
col = new Color[4][256];
for (int i = 0; i 256; i++){
col[0][i] = new Color(0, 0, i);
col[1][i] = new Color(0, (i*220)/256, 0);
col[2][i] = new Color((i*150)/256, (i*150)/256, (i*50)/256);
col[3][i] = new Color(i, i, i);}
s = getParameter("bgColor"); if (s != null){
StringTokenizer st = new StringTokenizer(s);
int red = Integer.parseInt(st.nextToken());
int green = Integer.parseInt(st.nextToken());
int blue = Integer.parseInt(st.nextToken());
setBackground( new Color(red, green, blue));}
else setBackground(new Color(255,255,255));
addMouseListener(this);
addMouseMotionListener(this);
setup();
}
public double R(){ return rnd*(Math.random()-.5);}
public void setup(){
rnd = 1;
n1 = n+1;
iterate();
vert = new double[n1][n1][3]; vert1 = new double[n1][n1][2];
double dx = w/(double)n;
int t = 0;
for (int i = 0; i n1; i++)
for (int j = 0; j n1; j++){
vert[i][j][0] = dx*i - w2; vert[i][j][2] = dx*j - w2;
double mi = M[t++];
if (mi 0) mi = .01*Math.random();
vert[i][j][1] = w*mi - w2/2;}
Norm = new double[n1][n1][2][3]; Norm1z = new double[n1][n1][2];
iCol = new int[n][n][2];
for (int i = 0; i n; i++)
for (int j = 0; j n; j++){
double s =
((vert[i][j][1] + vert[i+1][j][1] + vert[i+1][j+1][1])/3 + w2/2)/w;
if (s .01) iCol[i][j][0] = 0;
else if (s+.1*Math.random() .35) iCol[i][j][0] = 3;
else if (s+.1*Math.random() .15) iCol[i][j][0] = 2;
else iCol[i][j][0] = 1;
s = ((vert[i][j][1] + vert[i][j+1][1] + vert[i+1][j+1][1])/3 + w2/2)/w;
if (s .01) iCol[i][j][1] = 0;
else if (s+.1*Math.random() .35) iCol[i][j][1] = 3;
else if (s+.1*Math.random() .15) iCol[i][j][1] = 2;
else iCol[i][j][1] = 1;
Norm[i][j][0][0] = vert[i][j][1] - vert[i+1][j][1];
Norm[i][j][0][1] = dx;
Norm[i][j][0][2] = vert[i+1][j][1] - vert[i+1][j+1][1];
double mod = Math.sqrt(Norm[i][j][0][0]*Norm[i][j][0][0] + Norm[i][j][0][1]*
Norm[i][j][0][1] + Norm[i][j][0][2]*Norm[i][j][0][2]) / 255.5;
Norm[i][j][0][0] /= mod; Norm[i][j][0][1] /= mod; Norm[i][j][0][2] /= mod;
Norm[i][j][1][0] = vert[i][j+1][1] - vert[i+1][j+1][1];
Norm[i][j][1][1] = dx;
Norm[i][j][1][2] = vert[i][j][1] - vert[i][j+1][1];
mod = Math.sqrt(Norm[i][j][1][0]*Norm[i][j][1][0] + Norm[i][j][1][1]*
Norm[i][j][1][1] + Norm[i][j][1][2]*Norm[i][j][1][2]) / 255.5;
Norm[i][j][1][0] /= mod; Norm[i][j][1][1] /= mod; Norm[i][j][1][2] /= mod;}
rotate();
}
public void iterate(){
int nc=n, Max=n1*n1, ncn1;
double Min=-1;
M = new double[Max];
for (int i=n+2; i n*n1-1; i++) M[i] = Min;
for (int i=2*n1; i n*n1; i += n1) M[i] = M[i-1] = 0;
while ( (nc /= 2) = 1){
ncn1 = nc*n1;
for (int j=ncn1; j Max; j += ncn1+ncn1){
for (int i= nc; i n; i += nc+nc){
if (M[i+j]==Min)
M[i+j] = (M[i+j+nc-ncn1] + M[i+j-nc+ncn1])/2.+R();
if (M[i+j+nc]==Min)
M[i+j+nc] = (M[i+j+nc+ncn1] + M[i+j+nc-ncn1])/2.+R();
if (M[i+j+ncn1]==Min)
M[i+j+ncn1] = (M[i+j-nc+ncn1] + M[i+j+nc+ncn1])/2.+R(); }}
rnd /= 2.;}
}
public void destroy() {
removeMouseListener(this);
removeMouseMotionListener(this);
}
public void mouseClicked(MouseEvent e){} // event handling
public void mousePressed(MouseEvent e) {
mx0 = e.getX(); my0 = e.getY();
if ( e.isControlDown() ){
setup();
repaint();}
if ( e.isAltDown() ){
if ( e.isShiftDown() ){ n /= 2; if (n 1) n = 1;}
else n *= 2;
setup();
repaint();}
e.consume();
}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {
int x1 = e.getX(); int y1 = e.getY();
if ( e.isShiftDown() ) scale *= Math.exp(-(y1 - my0)/(double)w);
else fiX += dfi*(y1 - my0);
fiY += dfi*(x1 - mx0); mx0 = x1; my0 = y1;
rotate();
repaint();
e.consume();
}
public void rotate(){
double ct = Math.cos(fiX), cf = Math.cos(fiY),
st = Math.sin(fiX), sf = Math.sin(fiY),
m00 = scale*cf, m02 = scale*sf,
m10 = scale*st*sf, m11 = scale*ct, m12 = -scale*st*cf;
m20 = -ct*sf; m21 = st; m22 = ct*cf;
for (int i = 0; i n1; i++)
for (int j = 0; j n1; j++){
vert1[i][j][0] = m00*vert[i][j][0] + m02*vert[i][j][2];
vert1[i][j][1] = m10*vert[i][j][0] + m11*vert[i][j][1] + m12*vert[i][j][2];}
for (int i = 0; i n; i++)
for (int j = 0; j n; j++)
for (int k = 0; k 2; k++)
Norm1z[i][j][k] = m20*Norm[i][j][k][0] + m21*Norm[i][j][k][1] +
m22*Norm[i][j][k][2];
painted = false;
}
public void mouseMoved(MouseEvent e) {}
public void paint(Graphics g) {
if ( !painted ){
buffGraphics.clearRect(0, 0, w, h);
int ib=0, ie=n, sti=1, jb=0, je=n, stj=1;
if (m20 0){ ib = n; ie = -1; sti = -1;}
if (m22 0){ jb = n; je = -1; stj = -1;}
for (int i = ib; i != ie; i += sti)
for (int j = jb; j != je; j += stj){
if (Norm1z[i][j][0] 0){
xPol[0] = w2 + (int)vert1[i][j][0];
xPol[1] = w2 + (int)vert1[i+1][j][0];
xPol[2] = w2 + (int)vert1[i+1][j+1][0];
yPol[0] = h2 - (int)vert1[i][j][1];
yPol[1] = h2 - (int)vert1[i+1][j][1];
yPol[2] = h2 - (int)vert1[i+1][j+1][1];
buffGraphics.setColor(col[iCol[i][j][0]][(int)(Norm1z[i][j][0])]);
buffGraphics.fillPolygon(xPol,yPol, 3);}
if (Norm1z[i][j][1] 0){
xPol[0] = w2 + (int)vert1[i][j][0];
xPol[1] = w2 + (int)vert1[i][j+1][0];
xPol[2] = w2 + (int)vert1[i+1][j+1][0];
yPol[0] = h2 - (int)vert1[i][j][1];
yPol[1] = h2 - (int)vert1[i][j+1][1];
yPol[2] = h2 - (int)vert1[i+1][j+1][1];
buffGraphics.setColor(col[iCol[i][j][1]][(int)(Norm1z[i][j][1])]);
buffGraphics.fillPolygon(xPol,yPol, 3);} }
painted = true;}
g.drawImage(buffImage, 0, 0, this);
showStatus( "n=" + n);
}
public void update(Graphics g){ paint(g); }
}