Oppure

Loading
07/12/10 12:08
killer
salve a tutti...

vorrei delle spiegazioni maggiri a riguardo...non riesco a mettere in pratica questa tecnica.. ho la seguente classe:


public class DesignAnimation extends JPanel implements Runnable {

private String word;
private Point currentPoint;
private Image window, i;
private String direction;
private static boolean running;
private Graphics graphic;
private Image bufferedImage;
private Graphics graphicBuffer;

public DesignAnimation(Image window, Image i, String word, Point initialPoint) { graphicBuffer = i.getGraphics();
graphicBuffer.drawImage(i, currentPoint.x, currentPoint.y, this);
repaint();
this.i = i;
this.word = word;
this.window = window;
currentPoint = initialPoint;
direction = "right";
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(window, 0, 0, getSize().width, getSize().height, this);
g.setFont(new Font("TimesRoman", Font.PLAIN, 40));
g.setColor(Color.red);
g.drawImage(bufferedImage, currentPoint.x, currentPoint.y, this);
int center = (i.getWidth(this) / 2) - 150;
g.drawString(word, currentPoint.x + center, currentPoint.y);
}

public void run() {
running = true;
while (!isInterrupted()) {
if (direction.equals("right";)) {
currentPoint.x++;
repaint();
waitFor(5);
if (currentPoint.x == (520)) {
direction = "left";
}
} else {
if (direction.equals("left";)) {
currentPoint.x--;
repaint();
waitFor(5);
if (currentPoint.x == 0) {
direction = "right";
}
}
}
}
}

public static void interrupt() {
running = false;
}

private boolean isInterrupted() {
return true ? running == false : false;
}

private void waitFor(long time) {
try {
Thread.sleep(time);
} catch (InterruptedException ex) {
}
}
}

mi da questo errore :
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)
at sun.awt.image.ToolkitImage.getGraphics(ToolkitImage.java:292)
at test.DesignAnimation.<init>(DesignAnimation.java:30)
at test.Picture.<init>(Picture.java:35)
at test.Picture.run(Picture.java:132)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


non capisco cosa dovrei sistemare... spero in un vostro aiuto ...grazie: )
Ultima modifica effettuata da killer 07/12/10 12:09
aaa
07/12/10 17:04
killer
Nessun aiuto ? :(
Ultima modifica effettuata da killer 07/12/10 18:09
aaa
07/12/10 22:42
killer
ki mi aiuta ? :( ho bisogno di capire sto doppio buffering... :( non mi funziona..perche ?! :(
Ultima modifica effettuata da killer 08/12/10 15:53
aaa
08/12/10 18:10
pierotofy
    private boolean isInterrupted() {
        return true ? running == false : false;
    } 


Questo intanto e' sbagliato... rileggiti l'uso della sintassi dell'operatore ? :

Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException: getGraphics() not valid for images created with createImage(producer)


Mi sembra abbastanza chiaro... non tutti gli oggetti Image supportano getGraphics, e l'oggetto Image su cui stai cercando di disegnare non supporta questo metodo...

Ma visto che non hai specificato esattamente cosa vuoi fare, e' impossibile darti direzioni per un metodo alternativo su quel che stai cercando di fare.
Il mio blog: piero.dev
08/12/10 18:40
killer
come mai e sbagliata la condizione '?:' ? io ritorno vero se running==false e quindi non è in esecuzione altrimenti torno falso...
Ultima modifica effettuata da killer 08/12/10 18:40
aaa
09/12/10 1:21
paoloricciuti
Postato originariamente da killer:

come mai e sbagliata la condizione '?:' ? io ritorno vero se running==false e quindi non è in esecuzione altrimenti torno falso...

Perchè la sintassi corretta sarebbe:
boolean bool= running==false?true:false;

aaa
09/12/10 10:17
killer
allora ho creato questa classe .... l'ho testata..ma l'immagine lampeggia sempre quando scorre.. e crea un minimo sfarfallio... per il double buffering quali modifiche dovrei apportare ? fatemi sapere presto perche dalle applets non capisco molto bene.. tra l'altro dopo aver fatto il copia incolla, mi da sempre l'errore nel costruttore sul offscreenImage.getGraphics().....chi puo aiutarmi a risolvere il problema ? :)

package test;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;

/**
*
* @author....
*/
public class DoubleBuffering extends JPanel implements KeyListener {

Image initImage;
int currX;
int currY;

public DoubleBuffering(Image image, Dimension dim) {
setDoubleBuffered(true);
currY = 300;
currX = 300;
initImage = image.getScaledInstance(dim.width, dim.height, Image.SCALE_FAST);
}

public void keyTyped(KeyEvent e) {
}

public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
currY -= 5;
break;
case KeyEvent.VK_RIGHT:
currX += 5;
break;
case KeyEvent.VK_DOWN:
currY += 5;
break;
case KeyEvent.VK_LEFT:
currX -= 5;
break;
}
repaint();
}

public void keyReleased(KeyEvent e) {
}

@Override
public void update(Graphics g) {
paintComponent(g);
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(initImage, currX, currY, this);
}
}

aaa