
////保存一个pbjava文件直接编译执行
import javaapplet;
import javaawt;
import javaawtevent;
import javautil;
import javaxswing;
import javaawtgeom;
import javaio;
class Point implements Serializable
{
int x,y;
Color col;
int tool;
int boarder;
Point(int x, int y, Color col, int tool, int boarder)
{
thisx = x;
thisy = y;
thiscol = col;
thistool = tool;
thisboarder = boarder;
}
}
class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
int x = -1, y = -1;
int con = 1;//画笔大小
int Econ = 5;//橡皮大小
int toolFlag = 0;//toolFlag:工具标记
//toolFlag工具对应表:
//(0--画笔);(1--橡皮);(2--清除);
//(3--直线);(4--圆);(5--矩形);
Color c = new Color(0,0,0); //画笔颜色
BasicStroke size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);//画笔粗细
Point cutflag = new Point(-1, -1, c, 6, con);//截断标志
Vector paintInfo = null;//点信息向量组
int n = 1;
FileInputStream picIn = null;
FileOutputStream picOut = null;
ObjectInputStream VIn = null;
ObjectOutputStream VOut = null;
// 工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除/
Panel toolPanel;
Button eraser, drLine,drCircle,drRect;
Button clear ,pen;
Choice ColChoice,SizeChoice,EraserChoice;
Button colchooser;
Label 颜色,大小B,大小E;
//保存功能
Button openPic,savePic;
FileDialog openPicture,savePicture;
paintboard(String s)
{
super(s);
addMouseMotionListener(this);
addMouseListener(this);
paintInfo = new Vector();
/各工具按钮及选择项/
//颜色选择
ColChoice = new Choice();
ColChoiceadd("black");
ColChoiceadd("red");
ColChoiceadd("blue");
ColChoiceadd("green");
ColChoiceaddItemListener(this);
//画笔大小选择
SizeChoice = new Choice();
SizeChoiceadd("1");
SizeChoiceadd("3");
SizeChoiceadd("5");
SizeChoiceadd("7");
SizeChoiceadd("9");
SizeChoiceaddItemListener(this);
//橡皮大小选择
EraserChoice = new Choice();
EraserChoiceadd("5");
EraserChoiceadd("9");
EraserChoiceadd("13");
EraserChoiceadd("17");
EraserChoiceaddItemListener(this);
////////////////////////////////////////////////////
toolPanel = new Panel();
clear = new Button("清除");
eraser = new Button("橡皮");
pen = new Button("画笔");
drLine = new Button("画直线");
drCircle = new Button("画圆形");
drRect = new Button("画矩形");
openPic = new Button("打开图画");
savePic = new Button("保存图画");
colchooser = new Button("显示调色板");
//各组件事件监听
clearaddActionListener(this);
eraseraddActionListener(this);
penaddActionListener(this);
drLineaddActionListener(this);
drCircleaddActionListener(this);
drRectaddActionListener(this);
openPicaddActionListener(this);
savePicaddActionListener(this);
colchooseraddActionListener(this);
颜色 = new Label("画笔颜色",LabelCENTER);
大小B = new Label("画笔大小",LabelCENTER);
大小E = new Label("橡皮大小",LabelCENTER);
//面板添加组件
toolPaneladd(openPic);
toolPaneladd(savePic);
toolPaneladd(pen);
toolPaneladd(drLine);
toolPaneladd(drCircle);
toolPaneladd(drRect);
toolPaneladd(颜色); toolPaneladd(ColChoice);
toolPaneladd(大小B); toolPaneladd(SizeChoice);
toolPaneladd(colchooser);
toolPaneladd(eraser);
toolPaneladd(大小E); toolPaneladd(EraserChoice);
toolPaneladd(clear);
//工具面板到APPLET面板
add(toolPanel,BorderLayoutNORTH);
setBounds(60,60,900,600); setVisible(true);
validate();
//dialog for save and load
openPicture = new FileDialog(this,"打开图画",FileDialogLOAD);
openPicturesetVisible(false);
savePicture = new FileDialog(this,"保存图画",FileDialogSAVE);
savePicturesetVisible(false);
openPictureaddWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ openPicturesetVisible(false); }
});
savePictureaddWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ savePicturesetVisible(false); }
});
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ Systemexit(0);}
});
}
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D)g;
Point p1,p2;
n = paintInfosize();
if(toolFlag==2)
gclearRect(0,0,getSize()width,getSize()height);//清除
for(int i=0; i<n ;i++){
p1 = (Point)paintInfoelementAt(i);
p2 = (Point)paintInfoelementAt(i+1);
size = new BasicStroke(p1boarder,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
g2dsetColor(p1col);
g2dsetStroke(size);
if(p1tool==p2tool)
{
switch(p1tool)
{
case 0://画笔
Line2D line1 = new Line2DDouble(p1x, p1y, p2x, p2y);
g2ddraw(line1);
break;
case 1://橡皮
gclearRect(p1x, p1y, p1boarder, p1boarder);
break;
case 3://画直线
Line2D line2 = new Line2DDouble(p1x, p1y, p2x, p2y);
g2ddraw(line2);
break;
case 4://画圆
Ellipse2D ellipse = new Ellipse2DDouble(p1x, p1y, Mathabs(p2x-p1x) , Mathabs(p2y-p1y));
g2ddraw(ellipse);
break;
case 5://画矩形
Rectangle2D rect = new Rectangle2DDouble(p1x, p1y, Mathabs(p2x-p1x) , Mathabs(p2y-p1y));
g2ddraw(rect);
break;
case 6://截断,跳过
i=i+1;
break;
default :
}//end switch
}//end if
}//end for
}
public void itemStateChanged(ItemEvent e)
{
if(egetSource()==ColChoice)//预选颜色
{
String name = ColChoicegetSelectedItem();
if(name=="black")
{c = new Color(0,0,0); }
else if(name=="red")
{c = new Color(255,0,0);}
else if(name=="green")
{c = new Color(0,255,0);}
else if(name=="blue")
{c = new Color(0,0,255);}
}
else if(egetSource()==SizeChoice)//画笔大小
{
String selected = SizeChoicegetSelectedItem();
if(selected=="1")
{
con = 1;
size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
}
else if(selected=="3")
{
con = 3;
size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
}
else if(selected=="5")
{con = 5;
size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
}
else if(selected=="7")
{con = 7;
size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
}
else if(selected=="9")
{con = 9;
size = new BasicStroke(con,BasicStrokeCAP_BUTT,BasicStrokeJOIN_BEVEL);
}
}
else if(egetSource()==EraserChoice)//橡皮大小
{
String Esize = EraserChoicegetSelectedItem();
if(Esize=="5")
{ Econ = 52; }
else if(Esize=="9")
{ Econ = 92; }
else if(Esize=="13")
{ Econ = 132; }
else if(Esize=="17")
{ Econ = 173; }
}
}
public void mouseDragged(MouseEvent e)
{
Point p1 ;
switch(toolFlag){
case 0://画笔
x = (int)egetX();
y = (int)egetY();
p1 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p1);
repaint();
break;
case 1://橡皮
x = (int)egetX();
y = (int)egetY();
p1 = new Point(x, y, null, toolFlag, Econ);
paintInfoaddElement(p1);
repaint();
break;
default :
}
}
public void mouseMoved(MouseEvent e) {}
public void update(Graphics g)
{
paint(g);
}
public void mousePressed(MouseEvent e)
{
Point p2;
switch(toolFlag){
case 3://直线
x = (int)egetX();
y = (int)egetY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p2);
break;
case 4: //圆
x = (int)egetX();
y = (int)egetY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p2);
break;
case 5: //矩形
x = (int)egetX();
y = (int)egetY();
p2 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p2);
break;
default :
}
}
public void mouseReleased(MouseEvent e)
{
Point p3;
switch(toolFlag){
case 0://画笔
paintInfoaddElement(cutflag);
break;
case 1: //eraser
paintInfoaddElement(cutflag);
break;
case 3://直线
x = (int)egetX();
y = (int)egetY();
p3 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p3);
paintInfoaddElement(cutflag);
repaint();
break;
case 4: //圆
x = (int)egetX();
y = (int)egetY();
p3 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p3);
paintInfoaddElement(cutflag);
repaint();
break;
case 5: //矩形
x = (int)egetX();
y = (int)egetY();
p3 = new Point(x, y, c, toolFlag, con);
paintInfoaddElement(p3);
paintInfoaddElement(cutflag);
repaint();
break;
default:
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void actionPerformed(ActionEvent e)
{
if(egetSource()==pen)//画笔
{toolFlag = 0;}
if(egetSource()==eraser)//橡皮
{toolFlag = 1;}
if(egetSource()==clear)//清除
{
toolFlag = 2;
paintInforemoveAllElements();
repaint();
}
if(egetSource()==drLine)//画线
{toolFlag = 3;}
if(egetSource()==drCircle)//画圆
{toolFlag = 4;}
if(egetSource()==drRect)//画矩形
{toolFlag = 5;}
if(egetSource()==colchooser)//调色板
{
Color newColor = JColorChoosershowDialog(this,"调色板",c);
c = newColor;
}
if(egetSource()==openPic)//打开图画
{
openPicturesetVisible(true);
if(openPicturegetFile()!=null)
{
int tempflag;
tempflag = toolFlag;
toolFlag = 2 ;
repaint();
try{
paintInforemoveAllElements();
File filein = new File(openPicturegetDirectory(),openPicturegetFile());
picIn = new FileInputStream(filein);
VIn = new ObjectInputStream(picIn);
paintInfo = (Vector)VInreadObject();
VInclose();
repaint();
toolFlag = tempflag;
}
catch(ClassNotFoundException IOe2)
{
repaint();
toolFlag = tempflag;
Systemoutprintln("can not read object");
}
catch(IOException IOe)
{
repaint();
toolFlag = tempflag;
Systemoutprintln("can not read file");
}
}
}
if(egetSource()==savePic)//保存图画
{
savePicturesetVisible(true);
try{
File fileout = new File(savePicturegetDirectory(),savePicturegetFile());
picOut = new FileOutputStream(fileout);
VOut = new ObjectOutputStream(picOut);
VOutwriteObject(paintInfo);
VOutclose();
}
catch(IOException IOe)
{
Systemoutprintln("can not write object");
}
}
}
}//end paintboard
public class pb
{
public static void main(String args[])
{ new paintboard("画图程序"); }
}
找到了,很久以前写的一个简单画图,呵呵~当时要求用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) {
}
}
首先,如果你只是要实现电子时钟,根本就不需要用到多线程。
如果你真的是要使用,就新建一个类,实现Runnable接口就是了。
如:
class MyThread1 implements Runnable{
public MyThread(){
}
public void run(){
}
}
使用的时候,就:
Thread myThread=new Thread(new MyThread());
myThreadstart();
如果要画图,你就直接把组件通过构造方法传到MyThread中就是了
Java对于服务器 个人电脑和移动设备来说是一项伟大的技术 由于需要java的跨平台的特性 因此java在服务器和移动设备方面的应用是非常成功的 但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同 但是这很快就会有所改变 至少比你想象得要快 在这篇文章中 我会分析一下java在桌面环境中的应用将怎样得到提升 然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT Swing 和SWT 在下文中 我将会开发一个完整的java桌面应用程序 Java与桌面端 现在 流行的桌面平台要数Windows Mac and Linux了 但它们不是十全十美的 Windows主宰著桌面 *** 作系统的市场 其上有巨大的应用和开发群体 但它昂贵且有许多安全漏洞 Linux有着稳固的基础 它是开源的软件 比Windows更可靠 Macs非常容易 *** 作且不是黑客的目标 但与Windows和Linux比起来 Mac的硬件和软件可选的余地非常的有限 公司和个人选择他们的 *** 作系统基于许多因素 花费少且安全性高是首选的因素 这导致一些组织从Windows 系统转而选择Linux 对许多用户来说 可用性及对原有应用程序的支持是非常重要的因素 这意味着Windows 将继续享有巨大的市场 Mac有其自己忠诚的用户 这使得苹果机仍然可以存活 Linux 在桌面的流行及Mac的成功创造了多样性 这种多样性正是Java需要的 这种多样性使得Java在桌面有举足轻重的地位 跨平台的支持 Java 运行于所有相关的 *** 作系统 包括Windows Mac和Linux 对于任何组织 他想把现有的应用从一个 *** 作系统移植到另一个 *** 作系统而不用做太多的改动 那么Java正是他们首选的桌面开发平台 或许用微软的可视化工具很容易构建 NET应用 但是这将使你被绑定在了Windows平台上了 很多人也许想立刻用Linux 代替Windows 从而避免由微软件 *** 作系统的漏洞带来的问题 用户不能容忍的问题之一是当从Windows移植到Linux带来的巨大的费用 如果你的应用程序用Java构建 你就没有了这些问题 Java的图形用户界面看上去会跟你用的 *** 作系统一样 而并不需要做什么改动 假如有一天又有一种桌面 *** 作系统出现的话 java 是个安全的赌注 因为它现在能够运行在Windows和Linux 上 那么可以推测它也可以运行在将来可能出现的 *** 作系统上 这些 *** 作系统可能或迟或早地由微软 或是开源社区 或是其它的人开发出来 丰富的特征 最初 Java只有非常有限的一些特征去构建图形用户界面 思想就是用平台无关的Java应用程序接口打包不同的 *** 作系统的本地图形用户界面 称之为抽象的窗口工具 仅有普通的部件如文件域 文本区 选择框 单选按钮 列表框和按钮被AWT支持 图形和图像的特性支持非常有限 也就是说 只足够构建简单的applet程序 认识到需要更高级的图形用户界面组件和图形能力 Sun公司开发了Swing Java D Java D 图像的输入/输出 Java高级图像(JAI)和很多其它的 这些中的一些窗体组件现在已经是Java 标准版(J SE)里的一部分 并且其它的一些扩展必须和你的应用程序打包在一起 例如Swing Java D 图像的输入/输出都是Java的核心API 随着Java开发工具包(JDK)和Java运行环境一起提供 让我们不要忘了J EE平台 如果你开发服务器端的应用程序并且需要丰富的图形用户界面 那么你毫无疑问应该选择Java 这允许你把服务器端的一些代码移到客户端 反之亦然 例如 一个项目可能开始是基于WEB和图形界面 在某些时候 用户可能要求图形元素不能在HTML中实现 如果你选择java做客户端应用 那么你可以重用这些当初用来做服务器端的代码 如果你用远程调用 一些类会真正地实现服务器和客户端的共享 通过页面服务器 Java桌面应用也能够和其它的Java 或非Java应用程序通信 如CORBA TCP/IP 或是 >
import javaawtColor;
import javaawtFont;
import javaawtGraphics;
import javaawteventMouseEvent;
import javaawteventMouseListener;
import javaxswingJFrame;
import javaxswingJPanel;
public class Test extends JPanel implements MouseListener{
private static final long serialVersionUID=8409711115431875102L;
private int yes=0,no=0;
private Font
font_sign=new Font(FontSANS_SERIF, FontPLAIN, 100),
font_number=new Font(FontMONOSPACED, FontPLAIN, 100)
;
public static void main(String[] args) {
JFrame f=new JFrame();
fsetTitle("无聊点击器");
Test panel=new Test();
paneladdMouseListener(panel);
fsetContentPane(panel);
fsetSize(500, 400);
fsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
fsetVisible(true);
}
@Override
public void paint(Graphics g)
{
gsetColor(ColorWHITE);
gfillRect(0, 0, getWidth(), getHeight());
gsetColor(ColorGREEN);
int mid_x=getWidth()/2,mid_y=getHeight()/2;
gfillRect(10, 10, mid_x-20, getHeight()-20);
gsetColor(ColorRED);
gfillRect(mid_x+10, 10, mid_x-20, getHeight()-20);
gsetFont(font_sign);
gdrawString("Yes", 30, mid_y-50);
gsetColor(ColorGREEN);
gdrawString("No", mid_x+40, mid_y-50);
gsetFont(font_number);
gdrawString(IntegertoString(no), mid_x+40, mid_y+50);
gsetColor(ColorRED);
gdrawString(IntegertoString(yes), 40, mid_y+50);
}
@Override
public void mouseClicked(MouseEvent e) {
switch(egetButton()){
case MouseEventBUTTON1:
yes++;
repaint();
break;
case MouseEventBUTTON3:
no++;
repaint();
break;
}
}
@Override
public void mouseEntered(MouseEvent arg0){}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
}
===========
自己练了一下桌面程序
====
刚看错了题意“长方形的长是yes和no的数量”
重新代码
import javaawtColor;
import javaawtFont;
import javaawtGraphics;
import javaawteventMouseEvent;
import javaawteventMouseListener;
import javaxswingJFrame;
import javaxswingJPanel;
public class Test extends JPanel implements MouseListener{
private static final long serialVersionUID=8409711115431875102L;
private int yes=0,no=0;
private Font
font_number=new Font(FontMONOSPACED, FontPLAIN, 20)
;
public static void main(String[] args) {
JFrame f=new JFrame();
fsetTitle("无聊点击器");
Test panel=new Test();
paneladdMouseListener(panel);
fsetContentPane(panel);
fsetSize(500, 400);
fsetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
fsetVisible(true);
}
@Override
public void paint(Graphics g)
{
gsetColor(ColorWHITE);
gfillRect(0, 0, getWidth(), getHeight());
gsetColor(ColorGREEN);
int mid_x=getWidth()/2,mid_y=getHeight()/2;
gfillRect(10, 10, mid_x-20, yes);
gsetColor(ColorRED);
gfillRect(mid_x+10, 10, mid_x-20, no);
gsetFont(font_number);
gdrawString("Yes: "+IntegertoString(yes), 20, 40);
gsetColor(ColorGREEN);
gdrawString("No: "+IntegertoString(no), mid_x+20, 40);
}
@Override
public void mouseClicked(MouseEvent e) {
switch(egetButton()){
case MouseEventBUTTON1:
yes++;
repaint();
break;
case MouseEventBUTTON3:
no++;
repaint();
break;
}
}
@Override
public void mouseEntered(MouseEvent arg0){}
@Override
public void mouseExited(MouseEvent arg0) {}
@Override
public void mousePressed(MouseEvent arg0) {}
@Override
public void mouseReleased(MouseEvent arg0) {}
}
一定要用java画图的话,我可以提供最简单的思路。JAVA中有一个画图函数paint(Graphics g)。
例如先绘制出一个坐标轴可用如下代码
public void paint(Graphics g){
int startx = 50;
int starty = 500;
int endx = 500;
int endy = 500;
gsetColor(Colorblack);
gdrawLine(startx, starty, startx, endy);
gdrawLine(startx, starty, endx, starty);
}
其中gdrawLine函数很好理解,4个参数分别为起始点和终点的横纵坐标。(注意电脑中的原点坐标其实是定义在左上角,与我们常规认识不同。)
gsetColor即为设定画笔颜色。
若你要画曲线,这里最简单的做法就是不停的画点或者小短线,所有点或短线连起来即为曲线。(人的肉眼难以分辨的。)
其中还有gdrawRect,gdrawImage等函数,看下文档即可。
若其中还没有你要的图形,也可以手工绘制。
希望能帮助到你,望采纳。
//:Pjava
//用法,将所有内容保存到文件 Pjava 编译运行就行了,鼠标点到哪里,矩形就画到哪里!
import javaawt;
import javaawtevent;
import javaxswing;
public class P {
public static void main(String[] args) {
new FrameX()setVisible(true);
}
}
class FrameX extends JFrame implements ActionListener{
private JComboBox mode,color,radius;
private JPanel menu;
private JButton clear,reset;
private CanvasX canvas;
private int x,y;
private static Color[] cs = {Coloryellow,Colorred,Colorblue,Colorgreen,};
public FrameX(){
super("画图哦~~呵呵");
thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
thissetSize(600,400);
thissetLocationRelativeTo(null);
thismode=new JComboBox(new Object[]{"填充","描边",});
thiscolor = new JComboBox(new Object[]{"黄","红","蓝","绿",});
thisradius=new JComboBox(new Object[]{"20","35","50","70","100","150",});
thismenu=new JPanel(null);
thismenusetPreferredSize(new Dimension(1,30));
thisgetContentPane()add(menu,"South");
JLabel l = new JLabel("模式:");
lsetSize(40,23);
lsetLocation(10,0);
thismenuadd(l);
thismodesetBounds(lgetWidth(),0,60,23);
thismenuadd(mode);
thismodeaddActionListener(this);
l = new JLabel("颜色:");
lsetBounds(modegetX()+modegetWidth()+10,0,40,23);
thismenuadd(l);
thiscolorsetBounds(lgetX()+lgetWidth(),0,60,23);
thiscoloraddActionListener(this);
thismenuadd(color);
l = new JLabel("半径:");
lsetBounds(colorgetX()+colorgetWidth()+10,0,40,23);
thismenuadd(l);
thisradiussetBounds(lgetX()+lgetWidth(),0,60,23);
thisradiusaddActionListener(this);
thismenuadd(radius);
thisreset=new JButton("清除");
thisresetsetBounds(radiusgetX()+radiusgetWidth()+20,0,78,23);
thisresetaddActionListener(this);
thismenuadd(reset);
thiscanvas=new CanvasX();
thisgetContentPane()add(canvas,"Center");
thisreset();
}
public void actionPerformed(ActionEvent e) {
Object o = egetSource();
if(oequals(reset))reset();
else thiscanvassetShapeX(makeShapeX());
}
private ShapeX makeShapeX() {
int wh = IntegerparseInt(radiusgetSelectedItem()toString());
Rectangle r = new Rectangle(0,0,wh,wh);
int mod = thismodegetSelectedIndex()+1;
Color c = cs[thiscolorgetSelectedIndex()];
ShapeX s = new ShapeX();
sbc=c;
sfc=c;
smod=mod;
ss=r;
return s;
}
private void reset() {
thiscanvasclear();
thismodesetSelectedIndex(0);
thiscolorsetSelectedIndex(0);
thisradiussetSelectedIndex(0);
thiscanvassetShapeX(makeShapeX());
}
}
class ShapeX{
Shape s;
int mod;
Color fc,bc;
}
class CanvasX extends Canvas implements MouseListener{
public static final int MODE_FILL=1;
public static final int MODE_DRAW=2;
private ShapeX sx;
public CanvasX(){
thisaddMouseListener(this);
}
public void setShapeX(ShapeX x){
thissx=x;
}
public void clear(){
Graphics g = thisgetGraphics();
if(g==null)return;
gsetColor(Colorwhite);
gfillRect(0,0,thisgetWidth(),thisgetHeight());
gdispose();
sx=null;
}
public void process(int x,int y){
if(sx==null)return;
Rectangle r = (Rectangle)sxs;
rsetBounds(x-rwidth/2,y-rheight/2,rwidth,rheight);
Graphics2D g = (Graphics2D)thisgetGraphics();
if(sxmod==MODE_FILL){
gsetColor(sxfc);
gfill(sxs);
}
else if(sxmod==MODE_DRAW){
gsetColor(sxbc);
gdraw(sxs);
}
else if(sxmod==(MODE_FILL|MODE_DRAW)){
gsetColor(sxfc);
gfill(sxs);
gsetColor(sxbc);
gdraw(sxs);
}
gdispose();
}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {process(egetX(),egetY());}
public void mouseReleased(MouseEvent e) {}
}
大多数人选择Java可能只是因为听说Java前景好、Java比较好找工作、Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的。
其实我选择Java也是出于以上的原因,但是现在确实真正地爱上了Java。
我们为什么选择Java!那么现在我们来分析下Java的好处究竟在哪里。
简单易学首先Java是一个面向对象的编程语言,容易理解。
而且略去了多重加载、指针等难以理解的概念。
并且实现了自动垃圾回收,大大简化了程序设计。
其次Java学习资料较多,网上很多在线学习平台就可以找到很多Java学习视频,另外也有一些培训机构提供的有免费的Java视频课程。
有这些学习资料,入门足矣。
跨平台跨平台是Java最大的优势。
Java运行在JVM(Java虚拟机)上,在任何平台只要安装了JVM。
Java就可以运行。
它架构在 *** 作系统之上,屏蔽了底层的差异。
真正实现了“Writeonce,runanywhere”。
安全Java中没有指针,这样就没有办法直接访问内存了。
另外Java也不容易出现内存泄露。
多线程Java内置对多线程的支持,可以方便地在程序中实现多线程的功能。
不像其他不支持多线程的语言,需要调用 *** 作系统的多线程功能才能完成多线程的实现。
有丰富的类库Java从出道至今已有20多年的历史,经过20多年的积累和沉淀,出现了很多优秀的开源社区,如Apache和Spring。
这些优秀的社区提供了很多非常好的框架,借助这些框架可以使我们不用去关注Java底层的开发,而只需关注业务的实现。
使用广泛不得不承认上面有一点是对的,Java确实有很多企业在用,而且都是用在大项目上。
这就意味着Java方面的工作比较好找,另一点是在做Java开发时如果遇到问题,可以很容易从网上找到解决办法。
职业篇Java初级程序员是最底层的,只需要掌握Java的基础知识就能够成为一名初级程序员。
Java程序员可以有三个进阶方向,分别是Android移动端开发(以下简称Android)、Web开发(以下简称Web)和通讯开发。
这时目前主流的三大方向。
其中最多的是Android和Web。
下面分别介绍这三个方向。
以下三个方向都需要有扎实的Java基础。
Android开发,主攻移动端应用的开发。
移动端包括搭载Android系统的手机、平板、电视盒子等设备。
Web开发方向,主要有HTML5开发、B/S应用开发、微信开发。
这里的HTML5开发是指移动端的HTML5开发。
通讯方向,主要是通讯服务器的开发,如游戏服务器、腾讯的QQ服务器等。
由于我从事Web开发方向,仅仅对其他方向略有了解,所以这里主要介绍Web方向。
要进行Web开发需要达到中级程序员的水平,能够熟练使用SSH等框架。
而Java高级程序员则需要了解更多的框架和一些常用的应用服务器,如工作流、搜索引擎、缓存、JTA、JBoss、WebLogic等。
达到高级程序员水平后,很多人在这个阶段选择了不同的方向。
有的人厌倦了编码和设计而转向了需求分析和产品经理,而有的人继续执着于技术这条路,成为了系统架构师。
工具篇子曰“工欲善其事,必先利其器”,有一把顺手的“兵器”,能让我们的学习和工作达到事半功倍的效果,那么下面我们来看看有哪些好用的工具可以助我们开发。
文本编辑器(适合初学者)这里我们只说Windows平台下的文本编辑器。
有人可能说Windows下的记事本不就可以用吗,我们为什么还要用其他的文本编辑器呢原因吗,首先记事本确实不好用,修改代码极为不便,而且有些换行标识不识别;其次效率低,使用记事本打开一个几K的文件可能没有什么感受,但是打开一个超过10M的文件的时候就能明显的感觉到卡了,比如我们的日志文件;最后容易出现问题,用记事本编辑过UTF-8格式的文件后,会给文件加上BOM头,这有时导致程序出现莫名的错误,所以作为程序员,最好不要使用记事本。
比较好用的文本编辑器有Editplus、UltraEdit、Notepad。
其中Notepad是开源免费的,其他两个都是收费的。
IDE(适合入门后和项目研发)IDE是集成开发环境的简称,使用IDE的目的是为了能让我们更快地构建项目、更方便地写代码,同时屏蔽了代码编译的动作。
IDE都有代码高亮、代码提示以及错误提示等功能,同时我们可以借助IDE的插件实现代码管理、代码审查和其他一些好用的功能。
常用的IDE有Eclipse、NetBeans和IntelliJIDEA。
前两者都是免费的,后者提供有社区版本,也是免费的,但是企业版是收费的。
其中Eclipse是用的最多的IDE。
在Eclipse上扩展的有两款优秀的IDE,SpringToolSuite(STS)和大名鼎鼎的MyEclipse。
前者免费后者收费,后者集成了前者的所有功能。
这里我建议大家使用STS,因为STS添加了很多对Spring的相关支持,如果项目中用到了Spring,使用起来会非常方便。
也可以在Eclipse上安装STS插件,能够达到同样的效果,Spring官网上有插件的安装方法,这里不再赘述。
技术图谱以上图谱详细描绘了每个级别都需要掌握哪些知识,此图仅供参考。
在实际工作期间,一般是根据公司需要或项目需要来学习不同的技术。
但还是建议多去学习些知识,我觉得有句话说的很对,“很多东西不是你觉得有用才去学,而是学了才知道它有用”,我一直信奉这句话,因为我就是这句话真正的受益者。
入门篇俗话说“师傅领进门,修行靠个人”,所以说只要入门了,后面学习起来是很快的,而且比较容易。
那么学习Java应该如何入门呢首先要理解面向对象的概念,这个很重要。
但也不是说必须完全理解概念才能去学Java。
而是先接触Java的基础知识,如类、属性、方法等。
然后在学习的过程中理解面向对象的概念。
在大概理解了面向对象的概念后,这时你应该学会了一些Java的语法和一些API的使用。
这时需要继续深入地去学习这些。
同时要养成自己良好的编码习惯,Java有自己对包名、类名、方法名等的命名规范。
这个时候要尝试按照规范写代码,同时甩掉以前写代码时养成的不良习惯。
在熟悉了常用的API及语法后要去学习I/O和流(Stream)以及多线程编程和网络编程。
I/O和输入输出流,要熟练掌握。
而在这个阶段暂时不需要深入了解多线程编程和网络编程。
在系列基础完成之后就需要去接触下数据库和JDBC,对于数据库不需要深入了解,能够创建表、查询表数据即可。
然后尝试使用JDBC连接数据库,并对数据库中的数据做CURD *** 作。
在学习Java初期,我建议大家使用文本编辑器来写代码,一是有助于记忆Java中的一些关键字和常用类及方法,二是可以熟悉Java的常用命令。
在使用了一段时间的文本编辑器后就可以使用IDE来开发了,使用IDE将使你写代码写得更快,也不容易出错。
基础是很重要的,虽然简单,但是也马虎不得。
这里推荐几本书《ThinkinginJava》、《Java8编程参考官方教程》等图书。
中级篇入门后就可以选择主攻方向了,几个方向在职业篇中已有介绍。
通讯开发方向其实在这个时候就可以转了,但是还是建议学习下Java中级的内容,这些内容也有助于你今后在通讯开发的路上走得更容易。
因为我是主攻Web方向,所以这里我们只讨论Web方向。
在这个阶段你接触的知识面将更广,在学习Web开发之前首先需要学习HTML和CSS,然后再学习JS以及jQuery。
在有一定基础之后就可以开始学习JSP和Servlet了,重点学习下JSP的内置对象及EL表达式,并试着去做一些页面。
然后学习下Ajax,要能够熟练的使用JSON和XML来做数据交互。
以上内容学习完之后Java的基础部分就算是基本掌握了,下面就该学习一些框架了。
建议先从Spring学起,Spring将成为你今后开发项目的核心框架。
Spring也是现在项目中最常用的框架。
可以深入的学习,试着去理解Spring的一些实现原理,这将有助于你更好的使用Spring。
学完Spring之后可以学习下ORM框架,比如Hibernate和MyBatis,这些相对于Spring来说要简单的多。
主要学习与Spring的整合和Spring中的事务管理。
一定要深入的了解数据库事务,这将对你今后的项目开发非常有帮助。
最后我们来说控制层的学习,这里我建议大家重点学习SpringMVC。
因为SpringMVC是目前使用最为广泛的控制层,而且简单易学,已经有了要替代Struts的趋势了。
但是Struts还是要学习下,毕竟还有一些公司在用,这将为你找工作加大一点筹码。
在学习这些内容的过程中一定要学习下代码管理工具SVN和Git,目前SVN在企业中用的较多,而开源社区一般都是用的Git。
有了JSP基础和掌握了框架的使用后就可以出去找工作了,在工作过程中这些知识你将掌握的更加牢固。
也可能在工作过程中会遇到你没有学过的技术,不要怕,有了之前的基础你将很快掌握这些新的技术,加入工作的第一年将是你进步最快的一年。
而加入工作之后你可能也不会有太多的时间来学习,这时候要约束好自己。
不要忘了学习,学习是最好的进步方式。
高级篇当我们参加了工作之后,开始接触更多的技术。
如果有机会就多学习些技术,不求精通,但求会用,并且知道这项技术能够解决什么问题。
开始在项目中参与设计文档的编写。
能够为自己的项目选择合适的框架,并且能用自己学到的技术去解决项目中遇到的难题。
这时候根据项目和公司的差异用的技术也不尽相同,但是日志框架、项目构建、单元测试、缓存、集群、负载均衡、SOAP等是一定要掌握的。
这些是在大型项目中比较常用的技术。
然后可以根据自己的兴趣及业余时间去学习自己感兴趣的技术。
架构师之路成为一名架构师一直是我的目标。
一名优秀的架构师首先一定是一名卓越的程序员,架构设计不应仅仅是理论,它应当是在实践中产生的经验和结果。
架构师也要有灵敏的嗅觉,能够看清未来技术的发展方向,应当避免在项目中使用已过时的技术或没有社区支持的技术。
作为一名架构师要掌握以下技能:SOA:在微服务横行的年代,这项本领是必不可少的。
设计模式:这将有助于你设计出更加优雅的程序。
程序员的区别同样是程序员,初级、中级与高级的区别在哪里呢初级程序员就是传说中的码农,依靠复制粘贴、比葫芦画瓢的方式完成代码的编写,通常一个方法几百行代码,恨不得一个类将所有的功能都实现,不考虑程序设计原则,也不考虑程序的执行效率,不考虑SQL注入的问题,更不去想如何能让我的程序质量更好,他们的目的仅仅是我的程序能够运行。
很多程序员都会经历这个阶段,而这个阶段是最容易养成毛病的阶段。
但是有的程序员很快就摆脱了这个阶段,也有很多程序员停留在这个阶段很长时间,哪怕是掌握了更多的技术,但是这个阶段形成的思维模式却没有改变,养成的毛病也没有改掉。
我们就能听到这样的声音“这是哪个傻X写的代码,写的太乱了,还没有注释”、“我去!这代码完全不敢动啊,逻辑太混乱了,牵一发而动全身啊”。
这些基本上都是初级程序员写的代码。
中级程序员更喜欢优雅的代码,而自己写出优雅的代码,封装、继承、抽象运用自如,能够独立完成系统中模块的开发。
高级程序员能够完成系统的设计,能够使用已掌握的技能解决问题。
并且能够考虑到系统的扩展性、安全性、稳定性等问题。
至于架构师吗,首先要具备中大型项目的总体规划和设计经验,通常架构师考虑的要比高级程序员更多,有时需要考虑到项目的成本、工期、部署环境甚至一些商业因素等,不仅仅是技术上的问题。
其次架构师同样需要有很好的沟通能力,一是与客户的沟通,二是与团队内部纯技术的沟通。
很多程序员都止步于中级级别,靠一手SSH技术行天下,而身处初级时养成的毛病仍然存在,有的甚至已经工作5年却一直是这样,可塑性极差,由于工作时间长也学会了一手掩盖问题的好本事,这类人毫不客气的说就是项目的祸害。
也有一些人达到中级或高级级别后厌倦了编码,从而转做需求分析、产品经理或项目经理,在国内做技术确实也很难拿到高工资,这也是很多技术人员转型的原因。
而我依然坚持我的技术之路,既然选择了就要坚定的走下去。
总结:通过上面的介绍相信你对于Java有了一个更清晰的认识和了解,如果你对于Java很感兴趣,但是不知道从何学起,昆明北大青鸟Java培训机构节前送福利了,Java免费体验课开始报名了,大牛老师为你规划Java学习路线图,你还担心学不会吗
以上就是关于谁有简单的JAVA画图程序全部的内容,包括:谁有简单的JAVA画图程序、求java版画图程序的源代码、java如何实现多线程绘图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)