Java: die Verwendung von Grafik-Komponente innerhalb eines ActionListener
Habe ich zwei separate Klasse-und Treiber-Dateien, und in der class-Datei, die ich erstellen die paint-Methode:
public void paint(Graphics g){
g.drawLine(......
....
//along with all of my other draw commands
}
Weiter unten im code erstelle ich ein JButton und innerhalb dieser button action listener-ich weiß nicht, wie Sie ein Graphics-Objekt zu erstellen, mehr Grafiken in den JFrame. Sollte ich etwas hinzufügen, um mein Fahrer, um dies zu verwirklichen, oder gibt es eine Möglichkeit, verwenden Sie diese Grafiken in meine action listener? Danke, jede Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie ziehen alles in die
paint
Methode. DieactionPerformed
sollten sich nur ändern Sie den Status von etwas bereits in derpaint
- Methode, und rufen Sie dannrepaint
. Zum BeispielDann in Ihre
actionPerformed
können Sie ändern den Zustand derdrawWorld
zutrue
- und call -repaint()
.So wie Sie sehen können, alles, was gezeichnet werden soll in der
paintComponent
Methode. Sie kann nur verstecken und Farbe renderings, und machen Sie "sichtbar" von einem action-Befehl. Sollten Sie bereits vordefiniert, was könnte posibly gezogen werden. Dann ändern Sie einfach den Zustand der it-renderingUnd wie @MadPrgrammer wies darauf hin, Sie sollten keine Gemälde auf der top-level-Container wie
JFrame
. Stattdessen malen Sie auf eine benutzerdefinierteJPanel
oderJComponent
ab und setzen diepaintComponent
Methode, stattJFrame
undpaint
Hier ist ein Beispiel, wo ich ziehen Sie ein neues Quadrat, jedes mal, wenn die Taste gedrückt wird. Wenn Blick auf den code werfen, werden Sie sehen, dass in den
paintComponent
Methode, die ich in einer Schleife durch eine Liste vonSquare
s und zeichnen Sie Sie, und in deractionPerformed
alle ich tun ist, fügen Sie eine neueSquare
zu denList
- und call -repaint()
Es ist schwierig, zu 100%, aber es würde scheinen, wie Sie nicht verstehen, wie custom-painting erfolgt im Gange.
Beginnen wir mit einem Blick auf Performing Custom Painting und Malen in AWT und Swing.
Im wesentlichen die Malerei wird veranstaltet von der Repaint-Manager, der entscheidet, was und Wann was gezeichnet werden soll. Es ruft dann (über eine Kette von Methoden) der
paint
Methode von den Komponenten, die Sie denkt, die aktualisiert werden müssen, übergeben Sie einen Verweis auf eineGraphics
Kontext verwendet werden sollte, um tatsächlich Farbe auf.Grundsätzlich, wenn immer Ihr paint-Methode aufgerufen wird, sollten Sie malen Sie den aktuellen Zustand Ihrer Malerei.
Sollten Sie vermeiden, das überschreiben
paint
und stattdessenpaintComponent
von Klassen erweiternJComponent
Ihre Frage ist ein wenig auf der Seite vage, was Sie eigentlich Fragen, aber generell:
paint
in Swing überschreibt manpaintComponent
.Wenn Euch schon bewusst ist, diese kann man überschreiben werden
paint
weil Sie es tun auf einem JFrame und Sie fand, dass JFrame keinenpaintComponent
Methode. Sollten Sie nicht außer Kraft gesetztpaint
auf ein JFrame. Erstellen Sie stattdessen ein JPanel oder etwas um im Rahmen ein und überschreibenpaintComponent
auf dem Bedienfeld.Klingt es wie Sie wollen, zu tun, die Malerei außerhalb der
paintComponent
in dem Fall wohl der beste Weg ist, machen die Malerei zu einem separaten Bild. Dann malen Sie das Bild auf dem panel inpaintComponent
. Sie können auch setzen Sie ein Bild in einem JLabel als ein ImageIcon. Hier ist ein sehr einfaches Zeichenprogramm mit MouseListener das zeigt (entnommen aus hier):@MadProgrammer hat bereits verknüpft mit den Artikeln, die ich im Begriff war, zu verknüpfen.