「java添加画板」java编写一个简单的画板程序

博主:adminadmin 2022-12-01 19:35:06 66

本篇文章给大家谈谈java添加画板,以及java编写一个简单的画板程序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java 涂鸦画板

 

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Label;

import java.awt.Panel;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseMotionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

public class MouseDrawPanel extends Frame

{

private static final long serialVersionUID = 1L;

MouseEvent e = null;

int startX = -1;

int startY = -1;

int endX = -1;

int endY = -1;

boolean left = false;

public MouseDrawPanel ( String title )

{

setTitle (title);

setLayout (new BorderLayout ());

setResizable (false);

setSize (500, 400);

setLocationRelativeTo (null);

addWindowListener (new WindowAdapter ()

{

@Override

public void windowClosing ( WindowEvent e )

{

System.exit (0);

}

});

}

@Override

public void paintComponents ( Graphics g )

{

float lineWidth = 8.0f;

( (Graphics2D) g ).setStroke (new BasicStroke (lineWidth));

g.setColor (Color.YELLOW);

g.drawLine (startX, startY, endX, endY);

g.dispose ();

}

public static void main ( String[] args )

{

final MouseDrawPanel mdp = new MouseDrawPanel ("Use Mouse Draw");

Panel panel = new Panel ();

panel.setLayout (new FlowLayout (FlowLayout.LEFT));

Label startL = new Label ("start: ");

Label endL = new Label ("end: ");

final Label nowL = new Label ("now: ");

final Label startR = new Label ("000,000");

final Label endR = new Label ("000,000");

final Label nowN = new Label ("000,000");

panel.add (startL);

panel.add (startR);

panel.add (endL);

panel.add (endR);

panel.add (nowL);

panel.add (nowN);

mdp.add (panel, "South");

mdp.addMouseMotionListener (new MouseMotionListener ()

{

@Override

public void mouseMoved ( MouseEvent e )

{

if (mdp.left)

{

nowN.setText (e.getX () + " , " + e.getY ());

}

}

@Override

public void mouseDragged ( MouseEvent e )

{

if (mdp.left)

{

mdp.endX = e.getX ();

mdp.endY = e.getY ();

mdp.paintComponents (mdp.getGraphics ());

mdp.startX = mdp.endX;

mdp.startY = mdp.endY;

endR.setText (mdp.endX + " , " + mdp.endY);

}

}

});

mdp.addMouseListener (new MouseAdapter ()

{

@Override

public void mousePressed ( MouseEvent e )

{

if (e.getButton () == MouseEvent.BUTTON1)

{

mdp.startX = e.getX ();

mdp.startY = e.getY ();

startR.setText (mdp.startX + " , " + mdp.startY);

mdp.left = true;

}

else

{

mdp.left = false;

}

}

@Override

public void mouseReleased ( MouseEvent e )

{

if (mdp.left)

{

endR.setText (e.getX () + " , " + e.getY ());

}

}

});

mdp.setVisible (true);

}

}

Java中添加Canvas 的问题!

继承Canvas类 ,也是Component 类的子类,所以

调用 Canvas 子类的 .setBounds(arg0, arg1, arg2, arg3); 设置在 窗体容器的位置和大小, 四个参数本别是 x, y , top , bottom,是一个矩形区域

补充:不是没有效果,是你没布局好呀. 控件不显示,一定把位置搞错了, 你这个Canvas的子类要放在顶层容器中. 不能放在 Frame中的. 比如你有一个 JPanel,你应该把Canvas的子类放在JPanel容器中

bbs.p-mind.cn

欢迎访问编程语言论坛,这里 可能会找到你的学习资料

java画板

//有问题的话,给我发百度消息

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.LinkedList;

import java.util.List;

import javax.swing.JFrame;

import javax.swing.JPanel;

/**功能介绍

* 1.改变线条长度时鼠标形状的改变(鼠标位于线条两端时,四种鼠标状态)

* 2.移动线条时鼠标形状的改变(鼠标位于线条中间)

* 3.删除时鼠标形状的改变

* 4.最后一条直线颜色的不同

* 5.最大化、最小化、窗口大小改变时,线条的重绘

*

*/

public class LineDraw extends JFrame{

/**

*我需要在一个背景下能在任意位置添加线条,

能通过鼠标左键拉长,并且如果当鼠标点到直线中央时能拖动线条,当用鼠标右键点击直线时直线能消失。

*/

private LineDrawPanel drawPanel=new LineDrawPanel();

public static void main(String[] args) {

new LineDraw("画图面板");

}

public LineDraw(String title) {

super(title);

setBounds(300, 100, 500, 400);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

add(drawPanel);

validate();

}

}

class LineDrawPanel extends JPanel{

private int x1;

private int y1;

private Line lastLine;//最后一条线,也是当前正在画的线,注意线的颜色

private boolean isDrawing;//是否正在画的标记

private Line moveLine;//正在移动的线条

private Line changeLine;//正在改变长度的线条

private ListLine list=new LinkedListLine();

public LineDrawPanel() {

init();

}

public void init() {

MouseAdapter adapter=new MouseAdapter() {

@Override

public void mousePressed(MouseEvent e) {

if(e.getButton()==MouseEvent.BUTTON1){

x1 = e.getX();

y1 = e.getY();

moveLine=getMoveLine(x1, y1);

if(moveLine!=null){

setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));

setToolTipText("移动");

return;

}

changeLine=getChangeLine(x1, y1);

if(changeLine!=null){

return;

}

setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

setToolTipText("画图");

isDrawing=true;

}

}

@Override

public void mouseMoved(MouseEvent e) {

Line l=getChangeLine(e.getX(), e.getY());

if(l!=null){//设置四种鼠标形状

setToolTipText("变长");

if(Math.abs(l.x1-l.x2)4){

setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));

}

else if(Math.abs(l.y1-l.y2)4){

setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));

}

else{

double k=(l.y1-l.y2)*1.0/(l.x1-l.x2);

if(k=0) setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));

else setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));

}

}else{

l=getMoveLine(e.getX(), e.getY());

if(l!=null) {

setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));

setToolTipText("移动");

return;

}

l=getDelLine(e.getX(), e.getY());

if(l!=null){

setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));

setToolTipText("右键删除");

}else {

setCursor(Cursor.getDefaultCursor());

}

}

}

@Override

public void mouseDragged(MouseEvent e) {

if(moveLine!=null){

moveLine.move(e.getX()-x1, e.getY()-y1);

x1 = e.getX();

y1 = e.getY();

repaint();

return;

}

if(changeLine!=null){

int xVal=e.getX()-x1;

int yVal=e.getY()-y1;

if(Math.abs(xVal)5||Math.abs(yVal)5)

return;

changeLine.changeLength(xVal,yVal );

x1 = e.getX();

y1 = e.getY();

repaint();

return;

}

if(isDrawing){

int xVal=e.getX()-x1;

int yVal=e.getY()-y1;

if(Math.abs(xVal)3||Math.abs(yVal)3)

return;

lastLine=new Line(x1, y1, e.getX(), e.getY());

repaint();

}

}

@Override

public void mouseReleased(MouseEvent e) {

if(e.getButton()==MouseEvent.BUTTON1){

if(moveLine!=null){//移动

moveLine=null;

repaint();

return;

}

if(changeLine!=null){//改变长度

return;

}

if(isDrawing){//画线条

isDrawing=false;//重置

lastLine=null;

setCursor(Cursor.getDefaultCursor());

int xVal=e.getX()-x1;

int yVal=e.getY()-y1;

if(Math.abs(xVal)3||Math.abs(yVal)3)

return;

Line l=new Line(x1, y1, e.getX(), e.getY());

list.add(l);

}

}else if(e.getButton()==MouseEvent.BUTTON3){//鼠标右键

Line delLine=getDelLine(e.getX(), e.getY());//该删除的线

if(delLine!=null){

list.remove(delLine);

int size=list.size();

lastLine=(size0?list.get(size-1):null);

repaint();

}

}

}

};

addMouseListener(adapter);//添加鼠标动作事件

addMouseMotionListener(adapter);//添加鼠标移动事件

}

public void paint(Graphics g) {

super.paint(g);//调用父类的方法

g.setColor(Color.BLUE);

for (Line l:list) {

l.drawLine(g);

}

g.setColor(Color.red);//画最后一个线条

if(lastLine!=null){

lastLine.drawLine(g);

}else {

if(list.size()0) list.get(list.size()-1).drawLine(g);

}

}

public Line getChangeLine(int x,int y){//获取能够改变的直线

for (Line l:list) {

if(l.isCanChange(x,y))

return l;

}

return null;

}

public Line getDelLine(int x,int y){//获取能够删除的直线

for (Line l:list) {

if(l.isCanDel(x,y))

return l;

}

return null;

}

public Line getMoveLine(int x,int y){//获取能够移动的直线

for (Line l:list) {

if(l.isCanMove(x, y))

return l;

}

return null;

}

}

class Line{

public int x1;

public int y1;

public int x2;

public int y2;

public static boolean isStart;//决定改变的线条的那一端

public Line(int x1, int y1, int x2, int y2) {

this.x1 = x1;

this.y1 = y1;

this.x2 = x2;

this.y2 = y2;

}

public void drawLine(Graphics g){

g.drawLine(x1, y1, x2, y2);

}

public void move(int xVal,int yVal){//线条移动

x1+=xVal;

x2+=xVal;

y1+=yVal;

y2+=yVal;

}

public void changeLength(int xVal,int yVal){//改变长度 (该算法有点问题)

if(x1==x2){

xVal=0;

}else {

double k=(y1-y2)*1.0/(x1-x2);

System.out.println(k);

yVal=(int) Math.round(k*xVal);

}

if(isStart){

x1+=xVal;

y1+=yVal;

}else {

x2+=xVal;

y2+=yVal;

}

//x1=(x10?0:x1);

//y1=(y10?0:y1);

}

public boolean isLineValue(){//判断所画的线条是否有效

int len2=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);

if(len2==0) return false;

if(Math.sqrt(len2)=1)//长度小于1的,视为无效线条

return false;

return true;

}

public boolean isCanDel(int x,int y){//线条是否可被删除

int sideA2=(x-x1)*(x-x1)+(y-y1)*(y-y1);

int sideB2=(x-x2)*(x-x2)+(y-y2)*(y-y2);

int sideC2=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);

if(sideA2==0||sideB2==0)return true;

double cosC=(sideA2+sideB2-sideC2)/(2*Math.sqrt(sideA2*sideB2));

if(cosC-0.99) return true;

return false;

}

public boolean isCanChange(int x,int y){//线条是否可改变长度,仅鼠标位于线条两端时才可改变

if(Math.abs(x1-x)2Math.abs(y1-y)2){

isStart=true;

return true;

}

if(Math.abs(x2-x)2Math.abs(y2-y)2){

isStart=false;

return true;

}

return false;

}

public boolean isCanMove(int x,int y){//线条是否可移动

int midX=(x1+x2)/2;

int midY=(y1+y2)/2;

//if(midX==xmidY==y) return false;

if(Math.abs(midX-x)5Math.abs(midY-y)5)

return true;

return false;

}

}

java添加画板的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java编写一个简单的画板程序、java添加画板的信息别忘了在本站进行查找喔。

The End

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