java多个panel类_100分关于多线程JPanel类的graphic

收录日期:2021/02/25 22:17:08 时间:2016/06/09 18:42:31 标签:Java SE

定义一个多线程JPanel类,在paint(Graphics g)方法里,

如果直接g.drawXXX()进行绘图没问题,

但是如果this.getGraphics().drawXXX()就会闪动

这是怎么回事丫。

我想在此类中定义绘图方法绘制图形的各个部分,但每次都要传入“Graphics g”,才能正确绘图,而这样的方法无法被此类之外的方法调用,因为要传入“Graphics g”,而别的类并没有这个Graphics。

想请问各位DX,能够使用this.getGraphics()来绘图,并且屏幕不闪

还有,paint里的Graphic g对象是哪里的,谢谢!

代码如下:

import java.awt.*;

import java.awt.event.*;

import java.awt.font.*;

import java.awt.geom.*;

import java.applet.*;

import javax.swing.*;

import java.sql.*;

import java.awt.geom.*;

public class Applet1 extends Applet {

private boolean isStandalone = false;

ClassLineGraphPanel LineGraphPanel  = new ClassLineGraphPanel();

//Get a parameter value

public String getParameter(String key, String def) {

return isStandalone ? System.getProperty(key, def) :

(getParameter(key) != null ? getParameter(key) : def);

}

//Construct the applet

public Applet1() {

}

//Initialize the applet

public void init() {

try {

jbInit();

}

catch(Exception e) {

e.printStackTrace();

}

}

//Component initialization

private void jbInit() throws Exception {

this.setLayout(null);

this.add(LineGraphPanel);

LineGraphPanel.setBounds(new Rectangle(0, 0, 100, 100));

LineGraphPanel.start();

}

//Get Applet information

public String getAppletInfo() {

return "Applet Information";

}

//Get parameter info

public String[][] getParameterInfo() {

return null;

}

}

class ClassLineGraphPanel extends JPanel implements Runnable

{

int i = 0;    //counter

int sleepinterval = 100;//sleep interval. NOTE! keep it equal to sleepinterval@class ClassLineGraph

boolean runthread = true;    //flag that control the running of the thread

Thread panelthread=null;

public void start()

{

if (panelthread==null)

{

panelthread=new Thread (this);

panelthread.start();

}

}

public void stop()

{

panelthread.stop();

panelthread=null;

}

public void run()

{

while(runthread)

{

repaint();    //clear the canvas and repaint

try{Thread.sleep(sleepinterval);}    //sleep

catch(InterruptedException e){}

}

}

public void repaint()

{

super.repaint();//40, 0, 400, 300+45);    //important! clear the canvas

}

public void paint(Graphics g)

{

super.paint(g);

i++;

this.getGraphics().drawLine(0,0,50,50);

//g.drawLine(0,0,50,50);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值