
找到了,很久以前写的一个简单画图,呵呵~当时要求用AWT写,很难受。
package netmiqianggui;
import javaawtBasicStroke;
import javaawtBorderLayout;
import javaawtButton;
import javaawtColor;
import javaawtCursor;
import javaawtDimension;
import javaawtFrame;
import javaawtGraphics;
import javaawtGraphics2D;
import javaawtGridLayout;
import javaawtLabel;
import javaawtPanel;
import javaawtRenderingHints;
import javaawtToolkit;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawteventMouseAdapter;
import javaawteventMouseEvent;
import javaawteventMouseListener;
import javaawteventMouseMotionListener;
import javaawteventWindowAdapter;
import javaawteventWindowEvent;
import javaawtimageBufferedImage;
/
简单画图板程序
好久没用 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 = {Colorblack, Colorblue, Colorcyan, ColordarkGray, Colorgray, Colorgreen, Colormagenta, Colororange, Colorpink, Colorred, Colorwhite, Coloryellow};
// 显示当前颜色的面板
nonceColor = new Panel();
nonceColorsetBackground(Colorblack);
paneColoradd(nonceColor);
buttonColorAction = new ButtonColorAction();
buttonCursor = new ButtonCursor();
for(int i = 0; i < buttonColorlength; i++){
buttonColor[i] = new Button();
buttonColor[i]setBackground(color[i]);
buttonColor[i]addActionListener(buttonColorAction);
buttonColor[i]addMouseListener(buttonCursor);
paneColoradd(buttonColor[i]);
}
paneadd(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", LabelCENTER);
drawCap = new Label("●", LabelCENTER);
drawWidthsetBackground(ColorlightGray);
drawCapsetBackground(ColorlightGray);
paneStrokeadd(drawWidth);
for(int i = 0; i < buttonStrokelength; i++){
paneStrokeadd(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){
paneStrokeadd(drawCap);
}
}
paneadd(paneStroke);
// 将画笔颜色选择器添加到窗体中
thisadd(pane, BorderLayoutNORTH);
// 将画图板添加到窗体中
thisadd(palette);
// 添加窗口监听,点击关闭按钮时退出程序
thisaddWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
Systemexit(0);
}
});
// 设置窗体 ICON 图标
thissetIconImage(ToolkitgetDefaultToolkit()createImage("images/palettepng"));
// 设置窗口的大小
thissetSize(new Dimension(400, 430));
// 设置窗口位置,处于屏幕正中央
thissetLocationRelativeTo(null);
// 显示窗口
thissetVisible(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)egetSource())getBackground();
nonceColorsetBackground(color_temp);
palettesetColor(color_temp);
}
}
/
鼠标进入按钮变换光标样式监听事件类
@author 米强
/
class ButtonCursor extends MouseAdapter {
public void mouseEntered(MouseEvent e) {
((Button)egetSource())setCursor(new Cursor(CursorHAND_CURSOR));
}
public void mouseExited(MouseEvent e) {
((Button)egetSource())setCursor(new Cursor(CursorDEFAULT_CURSOR));
}
}
/
设置画笔的监听事件类
@author 米强
/
class ButtonStrokeAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
Button button_temp = (Button) egetSource();
String name = button_tempgetName();
if(nameequalsIgnoreCase("width")){
drawWidthsetText(button_tempgetLabel());
palettesetStroke(FloatparseFloat(button_tempgetLabel()));
}else if(nameequalsIgnoreCase("cap")){
drawCapsetText(button_tempgetLabel());
if(button_tempgetLabel()equals("■")){
palettesetStroke(BasicStrokeCAP_SQUARE);
}else if(button_tempgetLabel()equals("●")){
palettesetStroke(BasicStrokeCAP_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() {
thisaddMouseListener(this);
thisaddMouseMotionListener(this);
// 默认黑色画笔
color = new Color(0, 0, 0);
// 设置默认画笔样式
stroke = new BasicStroke(30f, BasicStrokeCAP_ROUND, BasicStrokeJOIN_ROUND);
// 建立 1280 1024 的 RGB 缓存图象
image = new BufferedImage(1280, 1024, BufferedImageTYPE_INT_RGB);
// 设置颜色
imagegetGraphics()setColor(Colorwhite);
// 画背景
imagegetGraphics()fillRect(0, 0, 1280, 1024);
}
/
重写 paint 绘图方法
/
public void paint(Graphics g) {
superpaint(g);
// 转换为 Graphics2D
Graphics2D g2d = (Graphics2D) g;
// 获取缓存图形 Graphics2D
Graphics2D bg = imagecreateGraphics();
// 图形抗锯齿
bgsetRenderingHint(RenderingHintsKEY_ANTIALIASING, RenderingHintsVALUE_ANTIALIAS_ON);
// 设置绘图颜色
bgsetColor(color);
// 设置画笔样式
bgsetStroke(stroke);
// 画线,从上一个点到新的点
bgdrawLine(oldMouseX, oldMouseY, mouseX, mouseY);
// 将缓存中的图形画到画板上
g2ddrawImage(image, 0, 0, this);
}
/
重写 update 方法
/
public void update(Graphics g) {
thispaint(g);
}
/
@return stroke
/
public BasicStroke getStroke() {
return stroke;
}
/
@param stroke 要设置的 stroke
/
public void setStroke(BasicStroke stroke) {
thisstroke = stroke;
}
/
设置画笔粗细
@param width
/
public void setStroke(float width) {
thisstroke = new BasicStroke(width, strokegetEndCap(), strokegetLineJoin());
}
/
设置画笔端点的装饰
@param cap 参考 javaawtBasicStroke 类静态字段
/
public void setStroke(int cap) {
thisstroke = new BasicStroke(strokegetLineWidth(), cap, strokegetLineJoin());
}
/
@return color
/
public Color getColor() {
return color;
}
/
@param color 要设置的 color
/
public void setColor(Color color) {
thiscolor = color;
}
public void mouseClicked(MouseEvent mouseEvent) {
}
/
鼠标按下
/
public void mousePressed(MouseEvent mouseEvent) {
thisoldMouseX = thismouseX = mouseEventgetX();
thisoldMouseY = thismouseY = mouseEventgetY();
repaint();
}
public void mouseReleased(MouseEvent mouseEvent) {
}
/
鼠标进入棋盘
/
public void mouseEntered(MouseEvent mouseEvent) {
thissetCursor(new Cursor(CursorCROSSHAIR_CURSOR));
}
/
鼠标退出棋盘
/
public void mouseExited(MouseEvent mouseEvent) {
thissetCursor(new Cursor(CursorDEFAULT_CURSOR));
}
/
鼠标拖动
/
public void mouseDragged(MouseEvent mouseEvent) {
thisoldMouseX = thismouseX;
thisoldMouseY = thismouseY;
thismouseX = mouseEventgetX();
thismouseY = mouseEventgetY();
repaint();
}
public void mouseMoved(MouseEvent mouseEvent) {
}
}
class Triangle extends drawings//空心三角形类
{
void draw(Graphics2D g2d)
{g2dsetPaint(new Color(R,G,B));
g2dsetStroke(new BasicStroke(stroke,
BasicStrokeCAP_ROUND,BasicStrokeJOIN_BEVEL));
g2ddrawLine((int)((x1+x2)/2),Mathmin(y1,y2),Mathmax(x1,x2),Mathmax(y1,y2));
g2ddrawLine(Mathmax(x1,x2),Mathmax(y1,y2),Mathmin(x1,x2),Mathmax(y1,y2));
g2ddrawLine(Mathmin(x1,x2),Mathmax(y1,y2),(int)((x1+x2)/2),Mathmin(y1,y2));
}
}
以上是通过绘制三条直线作为三角形的三条边来绘制三角形
class fillTriangle extends drawings//实心三角形
{
void draw(Graphics2D g2d)
{g2dsetPaint(new Color(R,G,B));
g2dsetStroke(new BasicStroke(stroke));
int mx=(int)((x1+x2)/2);
int[] x={mx,Mathmax(x1,x2),Mathmin(x1,x2)};
int[] y={Mathmin(y1,y2),Mathmax(y1,y2),Mathmax(y1,y2)};
g2dfillPolygon(x,y,3);
}
}
以上是用填充多边形的方式填充一个三角形,如果把最后的:g2dfillPolygon(x,y,3)改为g2ddrawPolygon(x,y,3); 则是以绘制多边形的方式绘制空心三角形
这里说明一下:因为(x1,y1,x2,y2)只能确定一个矩形区域,即鼠标拉动的起点和终点确定的矩形区域所以可以有多种方式确定三角形的三个顶点,我这个用的三个顶点是:
点1( (x1+x2)/2, min(y) ) 点2( max(x),max(y) ) 点3( min(x),max(y) )
你的补充内容太多了,没心情看啊,太累了
以上就是关于求一个java程序:绘图程序包括画圆,椭圆,线,矩形,自定义。并且可以调图形颜色!全部的内容,包括:求一个java程序:绘图程序包括画圆,椭圆,线,矩形,自定义。并且可以调图形颜色!、做一个用鼠标绘图的java程序、Java应用程序中定义了Canvas然后怎么在里面绘图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)