在java中使用图形g的Paint()外部

嘿,我想创建一个小程序“白板”,在浏览时做粗糙的工作。它包括绘图,粗糙,书写等功能。 当用户单击并拖动鼠标时,使用drawLine命令绘制路径。 我已经创建了一个ObjectDrawer类,该类侦听MouseDrag事件,然后使用Graphics g绘制对象。 我使用这个命令来获取图形g,并且我知道它不正确,但我找不到解决方案 Graphic g = obj.getGraphics();在java中使用图形g的Paint()外部

Morever在创建Applet时,我们不创建任何初始化该过程的对象,它会自动调用init()。所以如何使用applet类的变量。我的意思是如果我为WhiteBoard类创建一个对象,无论我创建了多少个对象,变量始终具有相同的值? Eg.Suppose Applet正在使用drawstatus变量作为circle.Now我创建一个对象obj.Does obj.drawStatus是行还是圆?

public class WhiteBoard extends Applet { 

public static int lastx=0;public static int lasty=0;public static String drawStatus="line";

public void init(){

setLayout(new BorderLayout());

MainPanel p=new MainPanel();

add(p,BorderLayout.SOUTH);

setBackground(Color.WHITE);

setForeground(Color.BLUE);

addMouseListener(new PositionRecorder());

addMouseMotionListener(new ObjectDrawer());

}

public void record(int x,int y){

lastx=x;

lasty=y;

}

}

public class ObjectDrawer extends MouseAdapter {

WhiteBoard obj=new WhiteBoard();

int lastx=WhiteBoard.lastx;

int lasty=WhiteBoard.lasty;int x,y;

String status=WhiteBoard.drawStatus;

public void MouseDragged(MouseEvent event){

x=event.getX();

y=event.getY();

Graphics g=obj.getGraphics();

g.setColor(Color.cyan);

if(status.equals("line")){

g.drawLine(lastx,lasty,x,y);

}

if(status.equals("rectangle")){

g.drawRect(lastx,lasty,x-lastx,y-lasty);

}

if(status.equals("circle")){

int r=(int)Math.sqrt(Math.pow(x-lastx,2)+Math.pow(y-lasty, 2));

g.drawOval(lastx,lasty,2*r,2*r);

}

}

}

,这里将在applet或其他地方的克(图形)漆呢,是不是正确的创建对象和使用的getGraphics呢?因为它初始化小程序,这obj中的对象的arent唯一same.I意思初始化applet的obj可以改变图形?

public class PositionRecorder extends MouseAdapter { 

WhiteBoard obj=new WhiteBoard();

public void mouseEntered(MouseEvent event) {

//requestFocus(); // Plan ahead for typing

obj.record(event.getX(), event.getY());

}

public void mousePressed(MouseEvent event) {

obj.record(event.getX(), event.getY());

}

}

对不起,这个问题变得有点漫长和困惑,因为我不明白真正的问题是什么。 感谢您的阅读 编辑: 我的新代码which worked.Pleasse解释为什么现在它的工作?我的面板(按钮)只有当我在南部地区移动我的鼠标,否则它根本不可见吗?在面板的applet中设置可见(true)?

import javax.swing.*; 

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.*;

import java.awt.event.MouseEvent;

public class WhiteBoard extends JApplet implements MouseListener,MouseMotionListener,KeyListener{

public int lastx=0;public int lasty=0;

Graphics g;Font f;

public void init(){

MainPanel p=new MainPanel();

getContentPane().add(BorderLayout.SOUTH,p);

setBackground(Color.WHITE);

addMouseListener(this);

addMouseMotionListener(this);

addKeyListener(this);

g=getGraphics();g.setColor(Color.BLUE);

f=new Font("SERIF",Font.BOLD,16);

g.setFont(f);

}

public void record(int x,int y){

lastx=x;

lasty=y;

}

public void paint(Graphics g){

}

public void mouseMoved(MouseEvent event){

record(event.getX(),event.getY());

}

public void mouseEntered(MouseEvent event) {

requestFocus(); // Plan ahead for typing

record(event.getX(), event.getY());

}

public void mousePressed(MouseEvent event) {

record(event.getX(), event.getY());

}

public void mouseDragged(MouseEvent event){

int x,y;

x=event.getX();

y=event.getY();

g.drawLine(lastx,lasty,x,y);

record(x,y);

}

public void keyTyped(KeyEvent ke){

String msg=String.valueOf(ke.getKeyChar());

g.drawString(msg,lastx,lasty);

record(lastx+9,lasty);

}

public void keyReleased(KeyEvent ke){}

public void keyPressed(KeyEvent ke){}

public void mouseClicked(MouseEvent event){}

public void mouseExited(MouseEvent event){}

public void mouseReleased(MouseEvent event){}

}

回答:

您需要重写applet的paint()方法。

@override 

public void paint(Graphics g)

{

super.paint(g);

g.setColor(Color.cyan);

if(status.equals("line")){

g.drawLine(lastx,lasty,x,y);

}

if(status.equals("rectangle")){

g.drawRect(lastx,lasty,x-lastx,y-lasty);

}

if(status.equals("circle")){

int r=(int)Math.sqrt(Math.pow(x-lastx,2)+Math.pow(y-lasty, 2));

g.drawOval(lastx,lasty,2*r,2*r);

}

}

在的mouseDragged()你将需要x和y保存为实例变量虽然

后,在的mouseDragged()调用重绘()

以上是 在java中使用图形g的Paint()外部 的全部内容, 来源链接: utcz.com/qa/265414.html

回到顶部