Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

take off blinking while dragging an image ??

Posted on 1998-07-06
6
Medium Priority
?
219 Views
Last Modified: 2010-04-16
Hi experts, I'd like to know how to take off the blinking while dragging an image? (for JDK 1.0.2)

 Thank you.
0
Comment
Question by:Deladier
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 16

Expert Comment

by:imladris
ID: 1224900
How is the dragging being done?

0
 

Author Comment

by:Deladier
ID: 1224901
Sorry. Dragging way is:

    public boolean mouseDrag(Event ev, int x, int y) {
      if(over == 1) { //over an image
         x = x - 8; //center image
         y = y - 6; //center image
          ima.setElementAt((new Integer(x)), (which+6));
          ima.setElementAt((new Integer(y)), (which+7));
        repaint();
      }

        for(int z=0; z<=((ima.size())-8); z=z+8) { //for1
         dy = Integer.valueOf(ima.elementAt(z+7).toString()).intValue();
         if(y>=dy & y<=(dy+12) & y!=dy & (ima.elementAt(z+2).toString()) != "I") {
          which2 = z;
          moveOver = 1;
         }
        } //for1
     
     
     return true;
    }

In 'if' loop I know that I already pressed over an image (over = 1 from mouseDown) and not over nothing.
'ima' is a Vector with images and the respective coordinates.
Do you think 'for' loop is the problem?. This 'for' loop is used in order to recognize over what image is dragging the image
0
 
LVL 16

Expert Comment

by:imladris
ID: 1224902
No, I don't think so. I'm more concerned with the paint method. Could you post that as well? Have you overridden the update method (which clears the screen before paint is called (which will cause a flicker)?

0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:Deladier
ID: 1224903
You're right, I haven't used update method, where do I put it?.
Here's the paint method:

  public void paint(Graphics g) {
    g.drawImage(getImage(getDocumentBase(), "menutree/w_raiz.gif"), 12, 0, this);
    Font raizfuen = new Font("Courier", Font.PLAIN, 10);
    g.setFont(raizfuen);
    g.setColor(Color.blue);
    g.drawString("Root", 30, 11);
   
    g.drawImage(getImage(getDocumentBase(), "menutree/w_raiz.gif"), 65, 0, this);
    Font borrafuen = new Font("Courier", Font.PLAIN, 10);
    g.setFont(borrafuen);
    g.setColor(Color.red);
    g.drawString("Erase Element", 83, 11);
       
   for(int u=0; u<=((ima.size())-8); u=u+8) { //forqw
    if((ima.elementAt(u).toString()) == "F" &
       (ima.elementAt(u+1).toString()) == "C" &
       (ima.elementAt(u+2).toString()) == "V") { //iffc
      String nomfold = ima.elementAt(u+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/wcf.gif"),
      (Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomfold,
       ((Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()) + 10));    
    } //iffc

    if((ima.elementAt(u).toString()) == "F" &
       (ima.elementAt(u+1).toString()) == "A" &
       (ima.elementAt(u+2).toString()) == "V") { //iffa
      String nomfold = ima.elementAt(u+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/wof.gif"),
      (Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomfold,
       ((Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()) + 10));    
    } //iffa    
   
    if((ima.elementAt(u).toString()) == "B" &
       (ima.elementAt(u+2).toString()) == "V") { //aq
      String nomdoc = ima.elementAt(u+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/wdoc.gif"),
      (Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomdoc,
       ((Integer.valueOf(ima.elementAt(u + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(u + 7).toString()).intValue()) + 10));
    } //aq
   
   } //forqw

    if(moveOver == 1 & (ima.elementAt(which2).toString()) == "B" &
       (ima.elementAt(which2+2).toString()) != "I") { //zx
      String nomdoc = ima.elementAt(which2+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/ddoc.gif"),
      (Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomdoc,
       ((Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()) + 10));
    } //zx

    if(moveOver == 1 & (ima.elementAt(which2).toString()) == "F" &
       (ima.elementAt(which2+1).toString()) == "C") { //zx1
      String nomdoc = ima.elementAt(which2+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/dcf.gif"),
      (Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomdoc,
       ((Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()) + 10));
    } //zx1

    if(moveOver == 1 & (ima.elementAt(which2).toString()) == "F" & 
       (ima.elementAt(which2+1).toString()) == "A") { //zx2
      String nomdoc = ima.elementAt(which2+5).toString();
      g.drawImage(getImage(getDocumentBase(), "menutree/dof.gif"),
      (Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()),
      (Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()), this);  
       Font fuente = new Font("Helvetica", Font.PLAIN, 10);
       g.setFont(fuente);      
       g.drawString(nomdoc,
       ((Integer.valueOf(ima.elementAt(which2 + 6).toString()).intValue()) + 22),
       ((Integer.valueOf(ima.elementAt(which2 + 7).toString()).intValue()) + 10));
    } //zx2
  }



0
 
LVL 16

Accepted Solution

by:
imladris earned 120 total points
ID: 1224904
Each component has an update method. The code is:

    public void update(Graphics g) {
      g.setColor(getBackground());
      g.fillRect(0, 0, width, height);
      g.setColor(getForeground());
      paint(g);
    }

As you can see, this method "blanks" the screen (with a fillRect set to use the background colour) and then calls paint. The advantage of this is that when your paint method is called, you start "drawing" on a clean slate. The disadvantage is the flicker. You should override the update method to be:

    public void update(Graphics g) {
      paint(g);
    }

This will remove the flicker. On the other hand, YOU are now responsible for removing old/unwanted display items. One standard way of dealing with this is to use an animation technique labelled double buffering. An offscreen display buffer is created, the current state of the display "drawn" into this buffer, then it is displayed in a single call. The following will accomplish this:

public void update(Graphics g)
{   Image bufimg;

    //create an Image the size of your display
    bufimg=createImage(width,height);
    //get graphics context for it
    Graphics bg=bufimg.getGraphics();
    //draw into it
    paint(bg);
    //put it on the screen
    g.drawImage(bufimg,0,0,null);
    //free operating system resources taken up
    bg.dispose();
    return;
}


In this scenario you are, of course, always double buffering. If that's not desirable, this mechanism can be employed in a suitable location in the code when needed. For instance, what is now the paint logic could go in a seperate method (named showScreen (for example), which takes a Graphics object as argument), and paint could call showScreen, as well as the place that required the double buffering (which would create the Graphics context from some image).

0
 

Author Comment

by:Deladier
ID: 1224905
Thanks.   :)
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
Java functions are among the best things for programmers to work with as Java sites can be very easy to read and prepare. Java especially simplifies many processes in the coding industry as it helps integrate many forms of technology and different d…
This tutorial covers a practical example of lazy loading technique and early loading technique in a Singleton Design Pattern.
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses

610 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question