2017-04-30 3 views
0

Je suis en train de tirer sur la toile en ajoutant la fonction de addPaintListeners dans le fichier principal comme suit, mais je reçois une erreur « ne peut pas résoudre la méthode » addPaintListener (eos.listeners.PaintListener)cannnot résoudre méthode addPaintListener

Toile utilisant notre PaintListener. Ce canevas est le même que celui de la classe Official Java.AWT.Canvas.

Nous avons ajouter un tampon sur la toile afin que nous puissions tirer parti de et nous avons ajouté une propriété PaintListener:

a ajouté une fonction à addPaintListeners sur la toile

import package eos; 

import eos.listeners.PaintListener; 
import eos.utility.Util; 
import javax.swing.*; 

import java.awt.*; 

import java.awt.event.WindowAdapter; 

import java.awt.event.WindowEvent; 


public class Main { 
private static JLabel splash = new JLabel(Util.loadIcon("http://www.runescape.com/img/game/splash.gif")); 

private static void displayFrame(String world, int width, int height) { 
    JFrame frame = new JFrame("Eos"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setResizable(false); 

    if (splash != null) { 
     frame.add(splash); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    centerFrame(frame); 

    ClientApplet applet = new ClientApplet(world, width, height); 
    frame.add(applet); 
    applet.start(); 
    if (splash != null) { 
     frame.remove(splash); 
    } 
    frame.revalidate(); 
    frame.pack(); 

    centerFrame(frame); 

    frame.addWindowListener(new WindowAdapter() { 
     @Override 
     public void windowClosing(WindowEvent e) { 
      frame.setVisible(false); 
      applet.stop(); 
      frame.dispose(); 
      super.windowClosed(e); 
     } 
    }); 
} 


private static void centerFrame(JFrame frame) { 
    Toolkit toolkit = Toolkit.getDefaultToolkit(); 
    int cX = (toolkit.getScreenSize().width/2) - (frame.getWidth()/2); 
    int cY = (toolkit.getScreenSize().height/2) - (frame.getHeight()/2); 
    frame.setMinimumSize(frame.getSize()); 
    frame.setLocation(cX, cY); 
    frame.setVisible(true); 
    frame.setResizable(true); 
} 

public static void notifyCanvasReady(Canvas canvas) { 
    canvas.addPaintListener((PaintListener) g -> { 
     g.setColor(Color.white); 
     g.drawString("HELLO WORLD", 50, 50); 




    }); 
} 

public static void main(String[] args) { 
    displayFrame("http://runescape.com", 800, 600); 
} 
} 
package java.awt; 

import eos.Main; 
import eos.listeners.PaintListener; 

import javax.accessibility.Accessible; 
import javax.accessibility.AccessibleContext; 
import javax.accessibility.AccessibleRole; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.awt.peer.CanvasPeer; 


public class Canvas extends Component implements Accessible { 
private static final long serialVersionUID = -2284879212465893870L; 
private static int nameCounter = 0; 
private static final String base = "canvas"; 

private BufferedImage debugImage; 
private transient PaintListener paintListener; 

public Canvas() { 
    Main.notifyCanvasReady(this); 
} 

public Canvas(GraphicsConfiguration config) { 
    this(); 
    setGraphicsConfiguration(config); 
} 

public void addPaintListener(PaintListener listener) { 
    paintListener = (PaintListener)AWTEventMulticaster.addInternal(paintListener, listener); 
} 

@Override 
public Graphics getGraphics() { 
    if (debugImage == null || debugImage.getWidth() != getWidth() || debugImage.getHeight() != getHeight()) { 
     debugImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); 
    } 

    Graphics g = debugImage.getGraphics(); 

    if (paintListener != null) { 
     paintListener.onPaint(g); 
    } 

    super.getGraphics().drawImage(debugImage, 0, 0, null); 

    return g; 
} 

@Override 
public void setVisible(boolean visible) { 
    super.setVisible(visible); 
} 

@Override 
void setGraphicsConfiguration(GraphicsConfiguration gc) { 
    synchronized(getTreeLock()) { 
     CanvasPeer peer = (CanvasPeer)getPeer(); 
     if (peer != null) { 
      gc = peer.getAppropriateGraphicsConfiguration(gc); 
     } 
     super.setGraphicsConfiguration(gc); 
    } 
} 

@Override 
String constructComponentName() { 
    synchronized (Canvas.class) { 
     return base + nameCounter++; 
    } 
} 

@Override 
public void addNotify() { 
    synchronized (getTreeLock()) { 
     if (peer == null) 
      peer = getToolkit().createCanvas(this); 
     super.addNotify(); 
    } 
} 

@Override 
public void paint(Graphics g) { 
    g.clearRect(0, 0, width, height); 
} 

@Override 
public void update(Graphics g) { 
    g.clearRect(0, 0, width, height); 
    paint(g); 
} 

@Override 
boolean postsOldMouseEvents() { 
    return true; 
} 

@Override 
public void createBufferStrategy(int numBuffers) { 
    super.createBufferStrategy(numBuffers); 
} 

@Override 
public void createBufferStrategy(int numBuffers, BufferCapabilities caps) throws AWTException { 
    super.createBufferStrategy(numBuffers, caps); 
} 

@Override 
public BufferStrategy getBufferStrategy() { 
    return super.getBufferStrategy(); 
} 

@Override 
public AccessibleContext getAccessibleContext() { 
    if (accessibleContext == null) { 
     accessibleContext = new AccessibleAWTCanvas(); 
    } 
    return accessibleContext; 
} 

protected class AccessibleAWTCanvas extends AccessibleAWTComponent { 
    private static final long serialVersionUID = -6325592262103146699L; 

    @Override 
    public AccessibleRole getAccessibleRole() { 
     return AccessibleRole.CANVAS; 
    } 
} 
} 
package eos.listeners; 

import java.awt.*; 
import java.util.EventListener; 




public interface PaintListener extends EventListener { 
public void onPaint(Graphics g); 
} 

Répondre

0

Peut-être que le problème est dans la façon dont vous appelez cette méthode dans Main. Essayez cette approche:

public static void notifyCanvasReady(Canvas canvas) { 
    canvas.addPaintListener(new PaintListener() { 
     @Override 
     public void onPaint(Graphics g) { 
      g.setColor(Color.white); 
      g.drawString("HELLO WORLD", 50, 50);    
     } 
    }); 
} 
+0

Salut J'ai remplacé le code original par le vôtre et j'ai eu cette erreur. 'Erreur: (67, 15) java: ne peut pas trouver le symbole symbole: méthode addPaintListener () Lieu: toile variable de type java.awt.Canvas' Alors peut-être –

+0

il y a un problème avec organisation et commande d'importation. – Gyrotank