「java绘图板」java绘图板的实现

博主:adminadmin 2022-11-24 08:33:08 88

今天给各位分享java绘图板的知识,其中也会对java绘图板的实现进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 绘图板 如何实现画直线的功能

这个简单

可以调用方法drawline(int x1, int y1, int x2, int y2)

其中(x1, y1), (x2, y2)分别为直线起点和终点的坐标

特意给你写了个小例子,希望能帮到你

***************************************

import javax.swing.*;

import java.awt.*;

public class DrawLine extends JPanel {

public static void main(String[] args) {

JFrame frame = new JFrame("DrawLine");

frame.getContentPane().add(new DrawLine());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(300, 200);

frame.setVisible(true);

}

protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.drawLine(50, 50, 200, 250);

}

}

****************************

将程序复制到记事本中并改名为DrawLine.java(注意大小写)

然后在命令行中用 CD+文件夹 使命令范围到DrawLine.java的文件夹中

然后执行命令javac DrawLine.java

再执行命令java DrawLine

你会看到结果

2. 参考Windows附件中的绘图工具,使用Java语言设计并实现一个简单的绘图板。(界面使用A

Java语言设计并实现一个简单的绘图板。(界面使用A有的 很多,是个人原创。

请问java在绘图程序的绘图板上怎么实现选中已经画的图形,移动选中图形和改变图形的大小操作

每个图形都分别花在单独的画板上,就像图层一样,然后移动画板就能有移动图形的效果了。

Java绘图机制是什么样的

JAVA的绘图功能非常丰富,绘图包括字体、颜色、图形,以下我们将分技术专题来讲。

一、关于JAVA的绘图机制。

JAVA中的任何一个图形组件,小到文本框、标签,大到一个FRAME,一个DIALOG,都有一个专门负责显示其界面的函数,这个函数名称是固定的:paint,它的原型为: public void paint(Graphics g) { …… } 每当组件大小、位置、组件内容发生变化时,该函数即负责生成新的图形界面显示。由于该函数可以被子类继承,因此,继承的子类有能力修改该函数。如果子类中没有出现该函数,则表示其行为完全继承自父类。则不管是组件中是否添加了新的内容,是否发生了大小的改变,是否发生了位移,父类都要有一个专门的线程,来负责描绘变化以后的组件界面。 paint函数由父类自动维护,并且如果子类一旦重载该函数,必须自己去维护所有的界面显示。

二、设置画笔颜色

1、颜色常识

任何颜色都是三原色组成(RGB),JAVA中支持224位彩色,即红绿蓝色分量可取值介于0..255之间。下面首先学习一个JAVA中的类Color Color中的常量:

public final static Color black=new Color(0,0,0);

public final static Color blue=new Color(0,0,255);

…..

Color的构造函数:

public Color(int r,int g,int b);

使用举例:如果想构造一个灰色对象,则用下面的句子:

Color gray=new Color(205,205,205);

2、设置画笔颜色语法

g.setColor(color); //color是一个Color对象

每修改一次颜色它影响的就是下面所有的绘图语句,一直影响到再次碰到setColor函数才以新的颜色代替。

3、使用JColorChooser组件选择颜色 JAVA中有一个已经定义好的选色器,通过简单的语法我们就可以将该窗口调出来,从其中选择自己喜欢的颜色。下面的这个例子就是通过颜色选取器选取颜色,并将选择到的颜色做为窗体的背景色。

(1)JColorChooser简介 JColorChooser组件的showDialog()方法让用户从弹出的窗口中选择一个颜色,并传给Color对象。其调用语法如下: color=JColorChooser.showDialog(this,”选色”,color); 第一个参数指定调用选色器的父窗体,第二个参数指定选色器窗口标题,最后一个为接收颜色的颜色对象。

4、如何将一个图形(以文件存在,如JPG或者GIF)画到窗体的画布中其实放置图形到画板中实际就是调用了画板的drawImage函数。其大致思路如下:首先获取一个ImageIcon对象,这个对象将会从指定的文件中读取相关图象信息,它支持GIF和JPG、BMP等基本图象格式。语法如下:

ImageIcon icon=new ImageIcon(GraExp5.class.getResource("1.gif"));

获取到图象的图标以后,就可以从图标中获取到绘制到画板上的实际需要的图象:

Image img=icon.getImage();

有了这个图象对象,我们就可以用画板的drawImage函数画图了。

g.drawImage(img,0,0,null);

JAVA 第一次绘制画板的时候画板会闪烁

可能是你加载canvas的时候闪的

可以新建一个BufferedImage img 和Graphics2D g2d=img.createGraphics;

用g2d绘图,例如g2d.drawRect(0,0,100,100);

然后直接在jpanel上利用public void paintComponent(Graphics g)函数 g.drawImage(img,0,0,width,height,this)画出来, 可以解决闪烁问题。canvas属于比较重的组件 不推荐使用

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

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

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

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

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

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

import java.awt.*;

import java.awt.event.*;

import java.awt.geom.*;

import java.awt.image.BufferedImage;

import java.io.*;

import java.util.ArrayList;

import javax.swing.*;

import javax.swing.filechooser.FileNameExtensionFilter;

public class JDraw {

public static void main(String[] args) {

JFrame f=new JFrame();

f.setDefaultCloseOperation(3);

f.setSize(880,600);

f.setLocationRelativeTo(null);

f.getContentPane().add(M.c);

f.getContentPane().add(M.m,"South");

f.setVisible(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=this.getWidth();

int h=this.getHeight();

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

makeBuff(w,h);

}

private void makeBuff(int w,int h) {

Graphics g = tbuff.getGraphics();

g.drawImage(buff,0,0,null);

g.dispose();

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

g=buff.getGraphics();

g.drawImage(tbuff,0,0,null);

g.dispose();

}

BufferedImage buff,tbuff;

CVS(){

this.addComponentListener(this);

this.addMouseListener(this);

this.addMouseMotionListener(this);

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

}

public void paint(Graphics gr){

Graphics2D g = buff.createGraphics();

g.setBackground(new Color(0xff000000,true));

g.clearRect(0,0,getWidth(),getHeight());

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

M.sa.drawAll(g);

if(M.ts!=null)

M.ts.draw(g);

g.dispose();

gr.drawImage(buff,0,0,this);

gr.dispose();

}

public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

M.mp(e.getPoint());

}

public void mouseReleased(MouseEvent e) {

M.mr(e.getPoint());

}

public void mouseDragged(MouseEvent e) {

M.md(e.getPoint());

}

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(){

this.setLayout(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; icl.length; i++){

cl[i]=new CLabel();

cl[i].addMouseListener(this);

add(cl[i]);

}

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

bc=new JRadioButton("bc");

bg=new ButtonGroup();

bg.add(fc);bg.add(bc);

add(fc);add(bc);

fc.setOpaque(true);

bc.setOpaque(true);

fc.setBackground(Color.white);

bc.setBackground(Color.blue);

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

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

fillC.addActionListener(this);

drawB.addActionListener(this);

add(fillC);add(drawB);

clear=new JButton("clear");

clear.addActionListener(this);

add(clear);

up=new JButton("zUp");

up.addActionListener(this);

add(up);

down=new JButton("zDown");

down.addActionListener(this);

add(down);

save=new JButton("Save");

save.addActionListener(this);

add(save);

load=new JButton("Load");

load.addActionListener(this);

add(load);

}

public void mouseClicked(MouseEvent e) {

JLabel l=(JLabel)e.getSource();

if(e.getClickCount()==2){

Color sc=JColorChooser.showDialog(null, "Color chooser", l.getBackground());

l.setBackground(sc);

mousePressed(e);

}

}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mousePressed(MouseEvent e) {

Color c=((JLabel)e.getSource()).getBackground();

if(fc.isSelected())

fc.setBackground(c);

else if(bc.isSelected())

bc.setBackground(c);

M.cp();

}

public void mouseReleased(MouseEvent e) {}

public void actionPerformed(ActionEvent e) {

if(e.getSource()==clear)M.clear();

else if(e.getSource()==up)M.up();

else if(e.getSource()==down)M.down();

else if(e.getSource()==save)M.save();

else if(e.getSource()==load)M.load();

else if(e.getSource()==fillC||e.getSource()==drawB)M.cp();

}

}

class CLabel extends JLabel{

static Color[] cs={Color.red,Color.orange,Color.yellow,Color.green,Color.cyan,

Color.blue,Color.magenta,Color.magenta.brighter(),

Color.white,Color.black,Color.gray,Color.LIGHT_GRAY,Color.DARK_GRAY,};

static int i;

CLabel(){

this.setOpaque(true);

this.setBackground(cs[i++]);

this.setBorder(BorderFactory.createLineBorder(Color.black));

this.setPreferredSize(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(){

sa.ss.clear();

c.repaint();

}

public static void cp() {

System.out.println(selected);

if(selected!=null){

selected.fillColor=m.fc.getBackground();

selected.borderColor=m.bc.getBackground();

selected.fc=m.fillC.isSelected();

selected.db=m.drawB.isSelected();

c.repaint();

}

}

public static void up() {

if(selected!=null){

sa.upZ(selected);

c.repaint();

}

}

public static void down(){

if(selected!=null){

sa.downZ(selected);

c.repaint();

}

}

static{

jfc.setFileFilter(new FileNameExtensionFilter("JDraw file (*.jdraw,*.jdr)","jdr","jdraw"));

}

static void save(){

int x=jfc.showSaveDialog(c);

if(x==JFileChooser.APPROVE_OPTION){

File f = jfc.getSelectedFile();

try{

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

oos.writeObject(sa);

oos.flush();

oos.close();

}catch(Exception e){}

}

}

static void load(){

int x=jfc.showOpenDialog(c);

if(x==JFileChooser.APPROVE_OPTION){

File f = jfc.getSelectedFile();

try{

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

Object r=oos.readObject();

if(r!=null){

sa=(SA)r;

c.repaint();

}

oos.close();

}catch(Exception e){e.printStackTrace();}

}

}

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=m.method.getSelectedIndex();

if(mid==0){

if(ne){

mx=p.x;my=p.y;

pc=0;

sm=m.sbox.getSelectedIndex();

pmax=sm==4?2:1;

ne=false;

}

++pc;

}

else if(mid==1){

checkSel(p);

mx=p.x;my=p.y;

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sa.ss.remove(selected);

c.repaint();

}

}

}

private static void checkSel(Point p) {

selected=null;

for(int i=sa.ss.size();i0; i--)

if(sa.ss.get(i-1).shape.contains(p)){

selected=sa.ss.get(i-1);break;

}

sa.select(selected);

c.repaint();

}

static void mt(){

Shape s=null;

int cx,cy,cw,ch;

switch(sm){

case 0:

case 2:

cx=Math.min(mx,tx);

cy=Math.min(my,ty);

cw=Math.abs(mx-tx);

ch=Math.abs(my-ty);

if(sm==0)

s=new Ellipse2D.Double(cx,cy,cw,ch);

else

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

break;

case 1:

s=new Line2D.Float(mx,my,tx,ty);

break;

case 3:

cw=Math.abs(mx-tx);

ch=Math.abs(my-ty);

int cd=(int)Math.sqrt(Math.pow(mx-tx,2)+Math.pow(my-ty,2))*2;

cx=mx-cd/2;

cy=my-cd/2;

s=new Ellipse2D.Double(cx,cy,cd,cd);

break;

case 4:

Path2D p=new Path2D.Double();

p.moveTo(mx,my);

if(pc==1){

p.lineTo(tx, ty);

}

else{

p.quadTo(ox,oy,tx,ty);

}

s=p;

break;

}

ts=new S(s,m.fc.getBackground(),m.bc.getBackground(),m.fillC.isSelected(),m.drawB.isSelected(),null);

c.repaint();

}

static void md(Point p){

if(mid==0){

if(!sa.ss.isEmpty()){

sa.ss.get(sa.ss.size()-1).sel=false;

}

if(pc1){

ox=p.x;oy=p.y;

}

else{

tx=p.x;ty=p.y;

}

mt();

}

else if(mid==1){

if(selected!=null){

moveTo(selected,p);

c.repaint();

}

}

else if(mid==2){

checkSel(p);

if(selected!=null){

sa.ss.remove(selected);

c.repaint();

}

}

}

static void moveTo(S s, Point p) {

if(s.shape instanceof Rectangle){

Rectangle r=(Rectangle)s.shape;

r.setLocation(r.x+p.x-mx,r.y+p.y-my);

mx=p.x;my=p.y;

}

else if(s.shape instanceof Ellipse2D){

Ellipse2D e=(Ellipse2D)s.shape;

e.setFrame(e.getX()+p.x-mx,e.getY()+p.y-my,e.getWidth(),e.getHeight());

mx=p.x;my=p.y;

}

}

static void mr(Point p) {

if(pc==pmax){

pc=0;

ne=true;

sa.add(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,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER,1,new float[]{5,2},1);

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

this.shape=s;this.fillColor=c;this.borderColor=b;this.fc=f;this.db=d;this.stroke=k==null?bstroke:k;

}

void draw(Graphics2D g){

if(fc){

g.setColor(fillColor);

g.fill(shape);

}

if(db){

g.setColor(borderColor);

g.setStroke(stroke);

g.draw(shape);

}

if(sel){

g.setColor(Color.green);

g.setStroke(selectStroke);

g.draw(shape.getBounds());

}

}

}

class MyBasicStroke extends BasicStroke implements Serializable{}

class SA implements Serializable{

ArrayListS ss=new ArrayListS();

void add(S s){

if(s!=null){

for(S sx:ss)

sx.sel=false;

ss.add(s);

}

}

S remove(int i){

return ss.remove(i);

}

void remove(S s){

ss.remove(s);

}

void upZ(S s){

indexZ(s,1);

}

void downZ(S s){

indexZ(s,-1);

}

void indexZ(S s, int i) {

int si=ss.indexOf(s);

if(si+i0||si+iss.size()-1)return;

swap(s,ss.get(si+i));

}

void swap(S a,S b){

int ai=ss.indexOf(a);

int bi=ss.indexOf(b);

ss.set(ai,b);

ss.set(bi,a);

}

void select(S s){

for(S x:ss)

x.sel=false;

if(s!=null)

s.sel=true;

}

void drawAll(Graphics2D g){

for(S s:ss)

s.draw(g);

}

}

java绘图板的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java绘图板的实现、java绘图板的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。