GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!

GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!,第1张

只有矩形有圆形能移动,其它实现起来麻烦点,办法有的只是代码太多。

画圆弧改成了画曲线,圆弧稍麻烦,当然方法是很简单的,你可以自己思考一下。

双击13个颜色中的任意一个都会d出颜色选择器。

有保存与打开功能。扩展名请用 jdr

基本满足条件,细节可能不是很好,另,代码比较乱,怕不好看懂咯,呼呼。

import javaawt;

import javaawtevent;

import javaawtgeom;

import javaawtimageBufferedImage;

import javaio;

import javautilArrayList;

import javaxswing;

import javaxswingfilechooserFileNameExtensionFilter;

public class JDraw {

public static void main(String[] args) {

JFrame f=new JFrame();

fsetDefaultCloseOperation(3);

fsetSize(880,600);

fsetLocationRelativeTo(null);

fgetContentPane()add(Mc);

fgetContentPane()add(Mm,"South");

fsetVisible(true);

}

}

class CVS extends Component implements ComponentListener,MouseListener,MouseMotionListener{

public void componentHidden(ComponentEvent e) {}

public void componentMoved(ComponentEvent e) {}

public void componentResized(ComponentEvent e) {resized();}

public void componentShown(ComponentEvent e) {}

private void resized() {

int w=thisgetWidth();

int h=thisgetHeight();

tbuff=new BufferedImage(w,h,3);

makeBuff(w,h);

}

private void makeBuff(int w,int h) {

Graphics g = tbuffgetGraphics();

gdrawImage(buff,0,0,null);

gdispose();

buff=new BufferedImage(w,h,3);

g=buffgetGraphics();

gdrawImage(tbuff,0,0,null);

gdispose();

}

BufferedImage buff,tbuff;

CVS(){

thisaddComponentListener(this);

thisaddMouseListener(this);

thisaddMouseMotionListener(this);

buff=new BufferedImage(1,1,3);

}

public void paint(Graphics gr){

Graphics2D g = buffcreateGraphics();

gsetBackground(new Color(0xff000000,true));

gclearRect(0,0,getWidth(),getHeight());

gsetRenderingHint(RenderingHintsKEY_ANTIALIASING,

RenderingHintsVALUE_ANTIALIAS_ON);

MsadrawAll(g);

if(Mts!=null)

Mtsdraw(g);

gdispose();

grdrawImage(buff,0,0,this);

grdispose();

}

public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

Mmp(egetPoint());

}

public void mouseReleased(MouseEvent e) {

Mmr(egetPoint());

}

public void mouseDragged(MouseEvent e) {

Mmd(egetPoint());

}

public void mouseMoved(MouseEvent e) {}

}

class Menu extends JComponent implements MouseListener,ActionListener{

JComboBox sbox,method;

CLabel[] cl;

JCheckBox fillC,drawB;

JRadioButton fc,bc;

ButtonGroup bg;

JButton clear,up,down,save,load;

Menu(){

thissetLayout(new FlowLayout());

method=new JComboBox(new Object[]{"draw","move","erase",});

add(method);

sbox=new JComboBox(new Object[]{"Pt","Ln","Rect","Cir","Arc",});

add(sbox);

cl=new CLabel[13];

for(int i=0; i<cllength; i++){

cl[i]=new CLabel();

cl[i]addMouseListener(this);

add(cl[i]);

}

fc=new JRadioButton("fc",true);

bc=new JRadioButton("bc");

bg=new ButtonGroup();

bgadd(fc);bgadd(bc);

add(fc);add(bc);

fcsetOpaque(true);

bcsetOpaque(true);

fcsetBackground(Colorwhite);

bcsetBackground(Colorblue);

fillC=new JCheckBox("Fill",true);

drawB=new JCheckBox("Draw",true);

fillCaddActionListener(this);

drawBaddActionListener(this);

add(fillC);add(drawB);

clear=new JButton("clear");

clearaddActionListener(this);

add(clear);

up=new JButton("zUp");

upaddActionListener(this);

add(up);

down=new JButton("zDown");

downaddActionListener(this);

add(down);

save=new JButton("Save");

saveaddActionListener(this);

add(save);

load=new JButton("Load");

loadaddActionListener(this);

add(load);

}

public void mouseClicked(MouseEvent e) {

JLabel l=(JLabel)egetSource();

if(egetClickCount()==2){

Color sc=JColorChoosershowDialog(null, "Color chooser", lgetBackground());

lsetBackground(sc);

mousePressed(e);

}

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

Color c=((JLabel)egetSource())getBackground();

if(fcisSelected())

fcsetBackground(c);

else if(bcisSelected())

bcsetBackground(c);

Mcp();

}

public void mouseReleased(MouseEvent e) {}

public void actionPerformed(ActionEvent e) {

if(egetSource()==clear)Mclear();

else if(egetSource()==up)Mup();

else if(egetSource()==down)Mdown();

else if(egetSource()==save)Msave();

else if(egetSource()==load)Mload();

else if(egetSource()==fillC||egetSource()==drawB)Mcp();

}

}

class CLabel extends JLabel{

static Color[] cs={Colorred,Colororange,Coloryellow,Colorgreen,Colorcyan,

Colorblue,Colormagenta,Colormagentabrighter(),

Colorwhite,Colorblack,Colorgray,ColorLIGHT_GRAY,ColorDARK_GRAY,};

static int i;

CLabel(){

thissetOpaque(true);

thissetBackground(cs[i++]);

thissetBorder(BorderFactorycreateLineBorder(Colorblack));

thissetPreferredSize(new Dimension(10,20));

}

}

class M{

static JFileChooser jfc=new JFileChooser();

static Menu m=new Menu();

static CVS c=new CVS();

static SA sa=new SA();

static S ts=null,selected=null;

static Color fc,bc;

static void clear(){

sassclear();

crepaint();

}

public static void cp() {

Systemoutprintln(selected);

if(selected!=null){

selectedfillColor=mfcgetBackground();

selectedborderColor=mbcgetBackground();

selectedfc=mfillCisSelected();

selecteddb=mdrawBisSelected();

crepaint();

}

}

public static void up() {

if(selected!=null){

saupZ(selected);

crepaint();

}

}

public static void down(){

if(selected!=null){

sadownZ(selected);

crepaint();

}

}

static{

jfcsetFileFilter(new FileNameExtensionFilter("JDraw file (jdraw,jdr)","jdr","jdraw"));

}

static void save(){

int x=jfcshowSaveDialog(c);

if(x==JFileChooserAPPROVE_OPTION){

File f = jfcgetSelectedFile();

try{

ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f));

ooswriteObject(sa);

oosflush();

oosclose();

}catch(Exception e){}

}

}

static void load(){

int x=jfcshowOpenDialog(c);

if(x==JFileChooserAPPROVE_OPTION){

File f = jfcgetSelectedFile();

try{

ObjectInputStream oos=new ObjectInputStream(new FileInputStream(f));

Object r=oosreadObject();

if(r!=null){

sa=(SA)r;

crepaint();

}

oosclose();

}catch(Exception e){eprintStackTrace();}

}

}

static int mx,my,tx,ty,ox,oy;

static int pc=0,pmax;

static int sm;

static boolean ne=true;

static int mid;

static void mp(Point p){

mid=mmethodgetSelectedIndex();

if(mid==0){

if(ne){

mx=px;my=py;

pc=0;

sm=msboxgetSelectedIndex();

pmax=sm==42:1;

ne=false;

}

++pc;

}

else if(mid==1){

checkSel(p);

mx=px;my=py;

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sassremove(selected);

crepaint();

}

}

}

private static void checkSel(Point p) {

selected=null;

for(int i=sasssize();i>0; i--)

if(sassget(i-1)shapecontains(p)){

selected=sassget(i-1);break;

}

saselect(selected);

crepaint();

}

static void mt(){

Shape s=null;

int cx,cy,cw,ch;

switch(sm){

case 0:

case 2:

cx=Mathmin(mx,tx);

cy=Mathmin(my,ty);

cw=Mathabs(mx-tx);

ch=Mathabs(my-ty);

if(sm==0)

s=new Ellipse2DDouble(cx,cy,cw,ch);

else

s=new Rectangle(cx,cy,cw,ch);

break;

case 1:

s=new Line2DFloat(mx,my,tx,ty);

break;

case 3:

cw=Mathabs(mx-tx);

ch=Mathabs(my-ty);

int cd=(int)Mathsqrt(Mathpow(mx-tx,2)+Mathpow(my-ty,2))2;

cx=mx-cd/2;

cy=my-cd/2;

s=new Ellipse2DDouble(cx,cy,cd,cd);

break;

case 4:

Path2D p=new Path2DDouble();

pmoveTo(mx,my);

if(pc==1){

plineTo(tx, ty);

}

else{

pquadTo(ox,oy,tx,ty);

}

s=p;

break;

}

ts=new S(s,mfcgetBackground(),mbcgetBackground(),mfillCisSelected(),mdrawBisSelected(),null);

crepaint();

}

static void md(Point p){

if(mid==0){

if(!sassisEmpty()){

sassget(sasssize()-1)sel=false;

}

if(pc>1){

ox=px;oy=py;

}

else{

tx=px;ty=py;

}

mt();

}

else if(mid==1){

if(selected!=null){

moveTo(selected,p);

crepaint();

}

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sassremove(selected);

crepaint();

}

}

}

static void moveTo(S s, Point p) {

if(sshape instanceof Rectangle){

Rectangle r=(Rectangle)sshape;

rsetLocation(rx+px-mx,ry+py-my);

mx=px;my=py;

}

else if(sshape instanceof Ellipse2D){

Ellipse2D e=(Ellipse2D)sshape;

esetFrame(egetX()+px-mx,egetY()+py-my,egetWidth(),egetHeight());

mx=px;my=py;

}

}

static void mr(Point p) {

if(pc==pmax){

pc=0;

ne=true;

saadd(ts);

selected=ts;

ts=null;

}

}

}

class S implements Serializable{

boolean fc,db,sel=true;

Shape shape;

Color fillColor,borderColor;

Stroke stroke;

static Stroke bstroke=new MyBasicStroke();

static Stroke selectStroke=new BasicStroke(1,BasicStrokeCAP_BUTT,BasicStrokeJOIN_MITER,1,new float[]{5,2},1);

S(Shape s,Color c,Color b,boolean f,boolean d,Stroke k){

thisshape=s;thisfillColor=c;thisborderColor=b;thisfc=f;thisdb=d;thisstroke=k==nullbstroke:k;

}

void draw(Graphics2D g){

if(fc){

gsetColor(fillColor);

gfill(shape);

}

if(db){

gsetColor(borderColor);

gsetStroke(stroke);

gdraw(shape);

}

if(sel){

gsetColor(Colorgreen);

gsetStroke(selectStroke);

gdraw(shapegetBounds());

}

}

}

class MyBasicStroke extends BasicStroke implements Serializable{}

class SA implements Serializable{

ArrayList<S> ss=new ArrayList<S>();

void add(S s){

if(s!=null){

for(S sx:ss)

sxsel=false;

ssadd(s);

}

}

S remove(int i){

return ssremove(i);

}

void remove(S s){

ssremove(s);

}

void upZ(S s){

indexZ(s,1);

}

void downZ(S s){

indexZ(s,-1);

}

void indexZ(S s, int i) {

int si=ssindexOf(s);

if(si+i<0||si+i>sssize()-1)return;

swap(s,ssget(si+i));

}

void swap(S a,S b){

int ai=ssindexOf(a);

int bi=ssindexOf(b);

ssset(ai,b);

ssset(bi,a);

}

void select(S s){

for(S x:ss)

xsel=false;

if(s!=null)

ssel=true;

}

void drawAll(Graphics2D g){

for(S s:ss)

sdraw(g);

}

}

您好!

先附初值,然后菱形框判断,然后流程图就是执行下面的程序,最后一个for的第三个语句,回到第二个语句的上面

 

 

希望能帮到您!敬请采纳!

 

 

 

 

 

 

 

 

 

中国物联网校企联盟

java编写图形界面需要用到swing等组件,可以在eclipse中安装windowbuilder来开发窗体,自动生成窗体代码,然后自己再根据需要修改,如:

package mainFrame;

import javaawtEventQueue;

import javaawteventMouseAdapter;

import javaawteventMouseEvent;

import javaxswingImageIcon;

import javaxswingJButton;

import javaxswingJCheckBox;

import javaxswingJFrame;

import javaxswingJLabel;

import javaxswingJPanel;

import javaxswingJPasswordField;

import javaxswingJTextField;

import javaxswingSwingConstants;

import javaxswingUIManager;

import javaxswingUnsupportedLookAndFeelException;

import javaxswingborderEmptyBorder;

public class Mian_login extends JFrame {

private JPanel contentPane;

private JTextField text_LoginName;

private JPasswordField Login_password;

/

Launch the application

/

public static void main(String[] args) {

EventQueueinvokeLater(new Runnable() {

@Override

public void run() {

try {

Mian_login frame = new Mian_login();

framesetVisible(true);

} catch (Exception e) {

eprintStackTrace();

}

}

});

}

/

Create the frame

/

public Mian_login() {

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

setBounds(500, 200, 443, 300);

setResizable(false);

setTitle("登 录");

/获取系统按钮样式/

String lookAndFeel = UIManagergetSystemLookAndFeelClassName();

try {

UIManagersetLookAndFeel(lookAndFeel);

} catch (ClassNotFoundException e1) {

e1printStackTrace();

} catch (InstantiationException e1) {

e1printStackTrace();

} catch (IllegalAccessException e1) {

e1printStackTrace();

} catch (UnsupportedLookAndFeelException e1) {

e1printStackTrace();

}

contentPane = new JPanel();

contentPanesetBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

contentPanesetLayout(null);

JPanel panel = new JPanel();

panelsetOpaque(false);

panelsetBounds(0, 0, 434, 272);

contentPaneadd(panel);

panelsetLayout(null);

JButton btn_Login = new JButton("\u767B\u5F55");

btn_LoginaddMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

}

});

btn_LoginsetBounds(88, 195, 70, 23);

paneladd(btn_Login);

JButton btn_cancel = new JButton("\u53D6\u6D88");

btn_canceladdMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

dispose();

}

});

btn_cancelsetBounds(268, 195, 70, 23);

paneladd(btn_cancel);

JLabel lblNewLabel_name = new JLabel("\u7528\u6237\u540D");

lblNewLabel_namesetHorizontalAlignment(SwingConstantsCENTER);

lblNewLabel_namesetOpaque(true);

lblNewLabel_namesetBounds(88, 48, 70, 23);

paneladd(lblNewLabel_name);

JLabel lblNewLabel_passwd = new JLabel("\u5BC6\u7801");

lblNewLabel_passwdsetHorizontalAlignment(SwingConstantsCENTER);

lblNewLabel_passwdsetOpaque(true);

lblNewLabel_passwdsetBounds(88, 102, 70, 23);

paneladd(lblNewLabel_passwd);

JCheckBox chckbx_remember = new JCheckBox("\u8BB0\u4F4F\u5BC6\u7801");

chckbx_remembersetBounds(102, 150, 84, 23);

paneladd(chckbx_remember);

text_LoginName = new JTextField();

text_LoginNamesetBounds(182, 48, 156, 23);

paneladd(text_LoginName);

text_LoginNamesetColumns(10);

Login_password = new JPasswordField();

Login_passwordsetBounds(182, 102, 156, 23);

paneladd(Login_password);

JCheckBox chckbx_AutoLogin = new JCheckBox("\u81EA\u52A8\u767B\u5F55");

chckbx_AutoLoginsetBounds(233, 150, 84, 23);

paneladd(chckbx_AutoLogin);

JLabel Label_background = new JLabel("");

Label_backgroundsetIcon(new ImageIcon("E:\\JAVA_workplace\\0002-\u754C\u9762\u8BBE\u8BA1\\images\\background3jpg"));

Label_backgroundsetBounds(0, 0, 437, 272);

contentPaneadd(Label_background);

}

}

使用java画圆要用到绘图类Graphics,下面是实例代码和运行效果:

package comdikeademo01;

import javaawt;

import javaxswing;

// java绘图原理

public class demo_01  extends JFrame {

MyPanel mp = null;

public static void main(String[] args) {

// TODO 自动生成的方法存根

demo_01 demo01 = new demo_01();

}

public demo_01(){

mp = new MyPanel();

thisadd(mp);

thissetSize(400, 300);

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

thissetVisible(true);

}

}

// 定义一个MyPanel面板,用于绘图区域

class MyPanel extends JPanel{

//覆盖JPanel

// Graphics 是绘图的重要类,可以理解成一支画笔

public void paint(Graphics g){

//  1 调用父类函数完成初始化任务

//  这句话不可以少

superpaint(g);

// 先画出一个圆圈

gdrawOval(100, 100, 30, 30);

}

}

代码复制进ide编程工具,运行效果如下:

这不是随便画

import javaawtGraphics;

import javaxswingJFrame;

public class Table extends JFrame {

public Table() {

setTitle("Table");

setSize(500, 500);

thissetVisible(true);

setResizable(false);

setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

public void paint(Graphics g) {

for (int i = 0; i < 5; i++) {

gdrawLine(50, 50 + i  100, 450, 50 + i  100);

}

for (int i = 0; i < 9; i++) {

gdrawLine(50 + i  50, 50, 50 + i  50, 450);

}

}

public static void main(String args[]) {

new Table();

}

}

以上就是关于GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!全部的内容,包括:GUI画图板(绘图板)设计,用Java编写程序代码!!谢谢!!、Java中for循环的流程图怎么画、怎样用java编写图形界面的Application程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9833486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存