java画图形_java画图形

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import javax.swing.BorderFactory;

import javax.swing.ComboBoxModel;

import javax.swing.DefaultComboBoxModel;

import javax.swing.JApplet;

import javax.swing.JComboBox;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JSpinner;

import javax.swing.SpinnerNumberModel;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

public class GraphTest extends JApplet {

private static final long serialVersionUID = -3038851324293731224L;

private PaintingPane paintingPane;

private Painter currentPainter = Painter.CIRCLE;

private final static int DEFAULT_RADIUS = 50;

private int radius = DEFAULT_RADIUS;

private Color color = getColor();

public void init() {

this.setLayout(new BorderLayout());

paintingPane = new PaintingPane();

paintingPane.setPreferredSize(new Dimension(250, 250));

this.add(paintingPane, BorderLayout.CENTER);

JPanel controlPane = new JPanel();

final SpinnerNumberModel sm = new SpinnerNumberModel(DEFAULT_RADIUS, 10, 100, 1);

JSpinner spinner = new JSpinner(sm);

spinner.addChangeListener(new ChangeListener() {

public void stateChanged(ChangeEvent e) {

radius = sm.getNumber().intValue();

color = getColor();

repaint();

}

});

final ComboBoxModel cbm = new DefaultComboBoxModel(Painter.values());

JComboBox combo = new JComboBox(cbm);

combo.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e) {

if (e.getStateChange() == ItemEvent.SELECTED) {

currentPainter = (Painter) cbm.getSelectedItem();

color = getColor();

repaint();

}

}

});

JLabel spinnerLabel = new JLabel("Radius: ");

JLabel comboLabel = new JLabel("Figure: ");

spinnerLabel.setLabelFor(spinner);

comboLabel.setLabelFor(combo);

controlPane.setPreferredSize(new Dimension(150, 250));

controlPane.setBorder(BorderFactory.createLineBorder(Color.BLACK));

controlPane.add(spinnerLabel);

controlPane.add(spinner);

controlPane.add(comboLabel);

controlPane.add(combo);

this.add(controlPane, BorderLayout.EAST);

this.setSize(400, 200);

this.setVisible(true);

}

private enum Painter {

CIRCLE {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

g.setColor(color);

g.fillOval(d.width / 2 - parameter, d.height / 2 - parameter,

parameter * 2, parameter * 2);

}

public String toString() { return "Circle"; }

},

LINE {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xOffset = d.width / 2, yOffset = d.height / 2;

g.setColor(color);

g.drawLine(xOffset - parameter, yOffset, xOffset + parameter,

yOffset);

}

public String toString() { return "Line"; }

},

DIAMOND {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xCenter = d.width / 2, yCenter = d.height / 2;

int offset = (int) (parameter / SQUARE_ROOT_2);

int[] xCoors = {

xCenter - offset, xCenter, xCenter + offset, xCenter,

};

int[] yCoors = {

yCenter, yCenter + offset, yCenter, yCenter - offset,

};

g.setColor(color);

g.fillPolygon(xCoors, yCoors, 4);

}

public String toString() { return "Diamond"; }

},

TRIANGLE {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xCenter = d.width / 2, yCenter = d.height / 2;

int offsetPos = (int) (parameter / SQUARE_ROOT_3);

int offsetNeg = offsetPos / 2;

int offsetX = parameter / 2;

int[] xCoors = {

xCenter - offsetX, xCenter + offsetX, xCenter,

};

int[] yCoors = {

yCenter + offsetNeg, yCenter + offsetNeg,

yCenter - offsetPos,

};

g.setColor(color);

g.fillPolygon(xCoors, yCoors, 3);

}

public String toString() { return "Triangle"; }

},

SQUARE {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xCenter = d.width / 2, yCenter = d.height / 2;

int offset = parameter / 2;

int[] xCoors = {

xCenter - offset, xCenter + offset, xCenter + offset,

xCenter - offset,

};

int[] yCoors = {

yCenter + offset, yCenter + offset,

yCenter - offset, yCenter - offset,

};

g.setColor(color);

g.fillPolygon(xCoors, yCoors, 4);

}

public String toString() { return "Square"; }

},

PENTAGON {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xCenter = d.width / 2, yCenter = d.height / 2;

int xOffset2 = parameter / 2;

int yOffset3 = (int) (xOffset2 / TANGENT_36);

int yOffset1 = (int) (xOffset2 / SINE_36);

int xOffset1 = (int) (yOffset1 * COSINE_18);

int yOffset2 = (int) (yOffset1 * SINE_18);

int[] xCoors = {

xCenter - xOffset1, xCenter - xOffset2, xCenter + xOffset2,

xCenter + xOffset1, xCenter,

};

int[] yCoors = {

yCenter - yOffset2, yCenter + yOffset3, yCenter + yOffset3,

yCenter - yOffset2, yCenter - yOffset1,

};

g.setColor(color);

g.fillPolygon(xCoors, yCoors, 5);

}

public String toString() { return "Pentagon"; }

},

HEXAGON {

void paint(Graphics g, JPanel panel, int parameter,

Color color) {

Dimension d = panel.getSize();

int xCenter = d.width / 2, yCenter = d.height / 2;

int xOffset = parameter / 2;

int yOffset = (int) (xOffset * SQUARE_ROOT_3);

int[] xCoors = {

xCenter - parameter, xCenter - xOffset, xCenter + xOffset,

xCenter + parameter, xCenter + xOffset, xCenter - xOffset,

};

int[] yCoors = {

yCenter, yCenter + yOffset, yCenter + yOffset,

yCenter, yCenter - yOffset, yCenter - yOffset,

};

g.setColor(color);

g.fillPolygon(xCoors, yCoors, 6);

}

public String toString() { return "Hexagon"; }

};

abstract void paint(Graphics g, JPanel panel, int parameter,

Color color);

static final double SQUARE_ROOT_2 = Math.pow(2.0, 0.5);

static final double SQUARE_ROOT_3 = Math.pow(3.0, 0.5);

static final double SINE_36 = Math.sin(Math.PI / 5);

static final double TANGENT_36 = Math.tan(Math.PI / 5);

static final double COSINE_18 = Math.cos(Math.PI / 10);

static final double SINE_18 = Math.sin(Math.PI / 10);

}

private class PaintingPane extends JPanel {

private static final long serialVersionUID = 8856506825301606303L;

public void paint(Graphics g) {

super.paint(g);

currentPainter.paint(g, this, radius, color);

}

}

private static Color getColor() {

return possibleColors[(int) (Math.random() * 7)];

}

private static final Color[] possibleColors = {

Color.RED, Color.ORANGE, Color.YELLOW, Color.GREEN,

Color.CYAN, Color.BLUE, Color.MAGENTA,

};

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java绘制不规则几何图,比如划曲线,写字,线条随意画,如截图所示,甚至可以写出文字:   不规则图的绘制代码:   public class IrregularShapeDemo extends JFrame {    GeneralPath gPath= new GeneralPath(); //GeneralPath对象实例   //构造函数   public IrregularShapeDemo() {    super("不规则图的绘制"); //调用父类构造函数    enableEvents(AWTEvent.MOUSE_EVENT_MASK|AWTEvent.MOUSE_MOTION_EVENT_MASK); //允许事件    setSize(300, 200); //设置窗口尺寸    setVisible(true); //设置窗口可视    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序    }    public void paint(Graphics g) { //重载窗口组件的paint()方法    Graphics2D g2D = (Graphics2D)g; //获取图环境    g2D.draw(gPath); //绘制路径    }    public static void main(String[] args) {    new IrregularShapeDemo();    }    protected void processMouseEvent(MouseEvent e) { //鼠标事件处理    if(e.getID() == MouseEvent.MOUSE_PRESSED) {    aPoint = e.getPoint(); //得到当前鼠标点    gPath = new GeneralPath(); //重新实例化GeneralPath对象    gPath.moveTo(aPoint.x,aPoint.y); //设置路径点    }    }    protected void processMouseMotionEvent(MouseEvent e) { //鼠标运动事件处理    if(e.getID() == MouseEvent.MOUSE_DRAGGED) {    aPoint = e.getPoint(); //得到当前鼠标点    gPath.lineTo(aPoint.x, aPoint.y); //设置路径    gPath.moveTo(aPoint.x, aPoint.y);    repaint(); //重绘组件    }    }   }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值