其实就是repaint()问题,现在我也在研究先帮你up
解决方案 »
- 求教用JAVA写坦克的代码,最好能专打靠墙那种的
- 请问如何调用输入的数字的每一位啊?
- 关于this和super的问题~!
- 看了一段代碼,但少了點東西。想知道怎麼填上去。
- 如何去掉applet弹出窗口下面的提示“Java Applet Window"
- [求解]为什么要设计final类和方法?
- 应用 ICMP 协议进行编程,实现 Ping 命令和 Traceroute 命令的功能
- 有谁知道如何用jre 1.3?
- IntelliJ IDEA 12能否集成jbpm6
- 数组中的值不重复,从数组随机返回一个值,要求不能重复
- 求教:sun有了awt为什么还要提供swing?
- 为什么出现:无法从套接字读取更多的数据
现在我的系统中等有两个容器:一个就是CLASS本身,继承了APPLET的,一个就是我定义的PANEL,我上面有的地方要调用两次repaint():
drawPanel.repaint();//调用Panel的刷新;
repaint();//调用Frame的刷新;
现在这两个方法被两个容器调用弄得我有点糊涂了.还有一个很重要的问题:现在当别的窗口从APPLET之上拖过的时候,这个事件居然捕捉不到了,APPLET之上的图就那样的被他擦掉了而不重绘,烦啊,为什么会这样了,这本来会自动调用repaint()这个方法的啊,为何不调用了呢?
建议你看一下基础书,它们里面都会叫道Applet工作原理,及其各个方法是如何被调用以及何时被调用。
在我的APPLET中有个单独的Panel,现在关键是如何重写那个Panel的paint()方法,我上面重写的paint()方法在Panel刷新的时候并不被调用啊.只有在整个APPLET窗口有变动的时候它才调用那个我重写的paint()方法,这个问题该如何解决了?
import java.net.URL;
import java.applet.Applet;
import java.awt.event.*;
import java.io.*;
import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.zip.GZIPInputStream;public class Read_wal_file extends Applet implements ActionListener{
private Button butZoomIn;
private Button butZoomOut;
private Button butMove;
private Button butFitView;
private Button butZoomPart;
private Button butQuery;
private Button butRefresh;
private Panel butPanel;
private Panel drawPanel;
private Label label;
private Canvas canvas;
private Scrollbar scrollbar;
private Hashtable hashtable;
String s = null;
private float moveX1,moveX2,moveY1,moveY2,x,y;
private float moveOffsetX,moveOffsetY;
public Read_wal_file(){
butZoomIn = new Button("·Å´ó");
butZoomOut = new Button("ËõС");
butZoomPart = new Button("¾Ö²¿·Å´ó");
butMove = new Button("Òƶ¯");
butFitView = new Button("È«ÆÁÏÔʾ");
butRefresh = new Button("Ë¢ÐÂ");
butQuery = new Button("ÐÅÏ¢²éѯ");
butPanel = new Panel();
drawPanel = new Panel();
canvas = new Canvas();
label = new Label();
} public void init(){
butPanel.setLayout(new GridLayout(1,7)) ;
butPanel.add("East",butZoomIn);
butPanel.add("Center",butZoomOut);
butPanel.add(butMove);
butPanel.add(butFitView);
butPanel.add(butZoomPart);
butPanel.add(butQuery);
butPanel.add(butRefresh);
butZoomIn.addActionListener(this);
butZoomOut.addActionListener(this);
butMove.addActionListener(this);
butFitView.addActionListener(this);
butZoomPart.addActionListener(this);
butQuery.addActionListener(this);
butRefresh.addActionListener(this);
canvas.setBackground(Color.PINK) ;
this.setLayout(new BorderLayout()) ;
this.add(butPanel,BorderLayout.NORTH );
this.add(drawPanel,BorderLayout.CENTER );
this.add(label,BorderLayout.SOUTH );
butPanel.setSize(500,20) ;
drawPanel.setBackground(Color.cyan );
drawPanel.addMouseListener(mouseListener);
drawPanel.addMouseMotionListener(MouseMotionListener1); this.setVisible(true);
System.out.println("panel size:"+drawPanel.size());
System.out.println("panel max"+drawPanel.getMaximumSize());
System.out.println("min"+drawPanel.getMinimumSize());
System.out.println("x_width = "+drawPanel.getWidth());
System.out.println("y_height = "+drawPanel.getHeight());
this.setSize(1200,860);
try{
initDoc();
}catch(Exception e){
System.out.println("³õʼ»¯³ö´í");
e.printStackTrace();
}
hashtable = ReadFile.hashtable;
repaint();
} public void initDoc(){
String exName;
URL url = null;
try{
url = new URL("http://aa/aa.wal");
}catch(Exception e){
e.printStackTrace();
System.out.println("¶ÁÈ¡Îļþ³ö´í!");
}
exName = url.getFile();
exName = exName.substring(exName.lastIndexOf(".")+1);
exName = exName.toLowerCase();
if(exName.equals("wal")){
ReadFile.readLine(url);
}else if(exName.equals("wat")){
System.out.println("Ö´ÐжÁµã");
ReadFile.loadDot(url);
}else if(exName.equals("wap")){
ReadFile.readPoly(url);
}else{
System.out.println("ÕÒ²»µ½Îļþ");
System.exit(1);
}
}
MouseMotionListener MouseMotionListener1 = new MouseMotionAdapter(){
public void mouseDragged(MouseEvent e){
x = e.getPoint() .x;
y = e.getPoint() .y;
if(SysStatus.getIsZoomPart()){
Graphics g = drawPanel.getGraphics();
g.setXORMode(getBackground() ) ;
g.drawRect((int)moveX1,(int)moveY1,(int)(x-moveX1),(int)(y-moveY1));
g.drawRect((int)moveX1,(int)moveY1,(int)(moveX2-moveX1),(int)(moveY2-moveY1));
} }
public void mouseMoved(MouseEvent e){
label.setText("Ä¿Ç°Êó±êλÖÃ:"+"\tX="+e.getX() +"\tY="+e.getY() );
}
};
MouseListener mouseListener = new MouseAdapter(){
public void mousePressed(MouseEvent e){
moveX1 = e.getPoint() .x;
moveY1 = e.getPoint() .y;
label.setText("°´ÏÂÊó±êλÖÃΪ"+e.getPoint().x);
System.out.println("°´ÏÂÊó±êλÖÃΪ"+e.getPoint().x);
}
public void mouseReleased(MouseEvent e){
moveX2 = e.getPoint() .x;
moveY2 = e.getPoint() .y;
System.out.println("ËÉ¿ªÊó±êλÖÃΪ"+e.getPoint().x);
//Èç¹ûÊÇÔÚÖ´ÐÐÒƶ¯²Ù×÷;
if(SysStatus.getIsMove()){
//¼ÆËãÒƶ¯Æ«ÒÆÁ¿;
moveOffsetX = moveX2 - moveX1;
moveOffsetY = moveY2 - moveY1;
ChangeXY.setMove(moveOffsetX,moveOffsetY);
label.setText("ËÉ¿ªÊó±êλÖÃΪ"+e.getPoint().x+"\t\t¸Ã´ÎÒƶ¯Æ«ÒÆÁ¿Îª:X:"+moveOffsetX+",Y:"+moveOffsetY);
drawPanel.repaint();
repaint();
}
if(SysStatus.getIsZoomPart()){
moveOffsetX = moveX2 - moveX1;
moveOffsetY = moveY2 - moveY1;
repaint();
}
}
public void mouseClicked(MouseEvent e){
if(SysStatus.getIsQuery()){
IDquery(e.getPoint().x,e.getPoint().y);
}
}
};
public void actionPerformed(ActionEvent e) {//¶¨Ò尴ťʼþ¼àÌý;
if(e.getSource() == butMove){
System.out.println("Òƶ¯");
Scale.fit();
SysStatus.setIsMove(true);
}
........
}
public void paint(Graphics g){
super.paint(g);
drawImg();
drawPanel.paint(g);
System.out.println("µ÷ÓÃPAINT");
} public void drawImg(){
int x1,x2,y1,y2;
String lineSet;//ÏßÐÎÉèÖÃ;
Vector v = new Vector();
Graphics g = drawPanel.getGraphics();
PointXY getXY1 = null;
PointXY getXY2 = null;
float rectMaxX,rectMinX,rectMaxY,rectMinY;//ÖØмÆËãÍâ½Ó¾ØÐÎ;
if(hashtable != null){
for(int k=0;k<lineCount-1;k++){
v = (Vector)hashtable.get(new Integer(k));
rectMaxX = rectMaxY = -10000;
rectMinX = rectMinY = 10000;
getXY1 =(PointXY)v.get(1);
}
for(int i=2;i<v.size()-2;i++){
getXY2=(PointXY)v.get(i);
x1 = (int)getXY1.getX();
y1 = (int)getXY1.getY();
x2 = (int)getXY2.getX();
y2 = (int)getXY2.getY(); g.drawLine(x1,y1,x2,y2);
getXY1=getXY2;//½«getXY1Ö¸ÏòÏÂÒ»¸öµã;
}
}
}
}
那么你写的panel类的paint方法是在Applet类的Paint方法中被调用的。那么也只用上面三种情况下会调用你的paint方法。
如果想在其它情况下调用,就写在相应的代码处(调用你的panel类的repaint方法)。
我APPLET有三部分,从上到下三个panel,中间的一大块是画图用的一个大Panel .1、当有别的窗口拖过我的APPLET的时候,如果别的窗口也经过我APPLET的窗口的四边(上下左右APPLET的整个窗口的最大边),那时会调用我得写的Paint方法,我的paint()方法调用了drawImg()方法重新画图.但这个时候有时候图会重新画过,有时候了只是背景刷新.不知为何?2、当别的窗口只是在我的APPLET窗口的那个大Panel区域拖动的时候,则只是背景刷新,根本就不会调用我重写的paint()方法了。也不知为何?(但如果我把图直接画在Applet中,就是不另外再定义一个Panel来画图,则上面的问题都不会发生了)