收录日期: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);
}
}