Kann nicht laufen paint-Methode von der main-Methode
In der main-Methode, ich bin versucht, dies ausführen:
public static void main(String[] args)
{
game.paintBlocks(g);
}
Ist und eine "nicht gelöst werden können "variable" - Fehler für die "g" - parameter.
Anderswo habe ich diese, welche Anrufe auf eine andere Methode in einer anderen Klasse (paint(g)) zu malen, ein raster von Blöcken:
public void paintBlocks(Graphics g)
{
for (int r = 0; r<7; r++)
{
for (int c = 0; c<5; c++)
{
block[r][c].paint(g);
}
}
Muss ich sagen, dass es "g" ist in einer anderen Klasse? Ich bin neu in diesem, und jede Hilfe wäre genial!
- Haben Sie erstellt ein neues Graphics-Objekt g auf die main-Klasse zu verwenden, die es in der main-Funktion? Ich gehe davon aus, dass Sie java importiert.das awt.Grafiken oder kurz java.awt.* .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo möchten Sie malen? Ich gehe davon aus, dass Sie wahrscheinlich wollen, um zu malen, ein Fenster auf den Bildschirm, in dem Fall, dass Sie nicht anrufen-Lackierung* sich selbst, Sie lasse das Swing-framework nennen Sie es an den entsprechenden stellen ein. In diesem Fall, wenn
game
ist einJFrame
, dann brauchen Sie nur um es sichtbar zu machen; oder wenngame
ist eine andere Art von Komponente, dann brauchen Sie, um es ein sichtbares Fenster. Dies ist das Muster, das ich normalerweise benutze, wenn ich unterrichte, einfache Grafiken in Java:Wenn Sie wollen, um zu malen, ein off-screen-image, dann müssen Sie erstellen Sie Ihre eigenen Grafik-Kontext übergeben, um den Lack* Methoden:
Im Fall von
paintBlocks
,g
ist ein parameter, der übergeben wird in der Methode. Im Fall vonmain
,g
auf eine variable, die noch nicht überall erstellt.Grafiken
undGraphics2D
sind abstrakte Klassen, und sind nicht in der Regel instanziiert werden, außer durch eine Schaukel. WasGraphics
undGraphics2D
geben, Sie ist ein Kontext zum zeichnen auf eine Komponente (wie ein JPanel oder ein BufferedImage).Basierend auf Ihre Beschreibung, die Sie wahrscheinlich wollen, um Blöcke zeichnen auf eine Swing-Komponente in irgendeiner Form. (Obwohl es ist ein wenig unklar, das wäre eine normale Art der Sache zu tun.) Was würden Sie normalerweise tun möchten, wenn Sie sind, zeichnen Sie die Blöcke auf eine
JPanel
, zum Beispiel, ist die Erstellung einer Klasse, die Sie erweitertJPanel
ab und setzen diepaintComponent()
Methode. Eine Möglichkeit, Sie könnte tun:Es ist ein weiteres Beispiel, die helfen könnten, Sie auf Seite 9 der diesem Dokument. Die Java-Tutorials für die Java-2D-API kann auch helfen.
Die variable
g
ist nicht definiert in der main-Kontext, weil Sie nicht deklariert/initialisiert es. Wenn Sie sich IhrepaintBlocks(Graphics g)
Methodeg
als parameter übergeben wird, jedoch ist der Geltungsbereich der Variablen(g
) ist innerhalb der geschweiften Klammern({}
) der MethodepaintBlocks(Graphics g)
.Wenn Sie eine Klasse namens
MyClass
erstreckt, eine Komponente, sagenJPanel
können Sie etwas wie das hier tun:Es ist auch gut zu beachten, dass die oben beschriebene Methode in manchen Fällen wäre die Kennzeichnung als schlechten Programmier-Stil. Gibt es eine alternative. Sie können Gebrauch machen von der
paintComponent(Graphics g)
Methode zur Verfügung gestellt, die von der Komponente.Dein main würde dann so Aussehen:
Seinen auch schlechten Programmier-Stil zu nennen
paintComponent(Graphics g)
selbst. Sollten Sie zulassen, dass Ihr system zum aufrufen dieser Methode und das ist, warum Sie dierepaint()
Methode. Das system ruft automatischpaintComponent(Graphics g)
wenn Sie repaint.Vom
paintComponent(Graphics g)
dann können Sie dies tun:Hoffe, dass geholfen!