über das zeichnen eines Polygons in java
Hallo bin ich versucht, mich zu verbessern über java2D und zuallererst bin ich den Umgang mit Polygone zeichnen. Allerdings kann ich nicht sehen, das polygon in frame. Ich Las einige tutorials und Beispiele, aber wie gesagt ich Gesicht mit Problemen. hier der Beispielcode der Zeichnung eines Polygons;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Polygon;
import javax.swing.JFrame;
public class jRisk extends JFrame {
private JFrame mainMap;
private Polygon poly;
public jRisk(){
initComponents();
}
private void initComponents(){
mainMap = new JFrame();
mainMap.setSize(800, 600);
mainMap.setResizable(false);
mainMap.setVisible(true);
mainMap.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
int xPoly[] = {150,250,325,375,450,275,100};
int yPoly[] = {150,100,125,225,250,375,300};
poly = new Polygon(xPoly, yPoly, xPoly.length);
}
protected void paintComponent(Graphics g){
super.paintComponents(g);
g.setColor(Color.BLUE);
g.drawPolygon(poly);
}
/**
* @param args
*/
public static void main(String[] args) {
new jRisk();
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
JFrame
keinenpaintComponent(Graphics g)
Methode. Fügen Sie die@Override
annotation und erhalten Sie eine compile-Zeit-Fehler.1) Verwenden Sie
JPanel
und überschreibenpaintComponent
(Sie würde als addJPanel
zu denJFrame
viadJFrame#add(..)
)2) Überschreiben
getPreferredSize()
zurück korrigierenDimension
s, die passen Sie Ihre Zeichnung auf dem Graphics-Objekt, sonst werden Sie nicht gesehen, wieJPanel
Größe ohne Komponenten ist 0,03) dont call
setSize
aufJFrame
... lieber einen richtigenLayoutManager
- und/oder überschreibengetPrefferedSize()
- und call -pack()
aufJFrame
nachdem Sie alle Komponenten Hinzugefügt haben, aber bevor Sie es sichtbar4) Haben, Lesen Sie auf Concurrency in Swing speziell über Event-Dispatch-Thread
5) sehen Klasse naming scheme sollten mit einem Großbuchstaben beginnen und jeder erste Buchstabe eines neues Wort danach groß geschrieben werden soll
6) Auch Sie
extend JFrame
und haben eine variableJFrame
? Nehmen dieextend JFrame
und halten Sie dieJFrame
- variable, wie wir nicht wollen, 2JFrame
s und seine nicht gute Praxis zu erweiternJFrame
es sei denn, die zusätzliche Funktionalitäten hinzufügen,Hier ist dein code mit den oben fixes (entschuldigt die Bildqualität, aber musste um die Größe oder es lief auf 800x600):
Als pro Ihr Kommentar:
Hier ist der aktualisierte code mit
MouseAdapter
und überschriebenmouseClicked
um zu überprüfen, ob Sie auf war innerhalb von polygon.new JRisk()
und den Aufruf im inneren derrun()
Methode. unterscheidet es sich so sehr. ich denke, es ist relevant, mit der Gleichzeitigkeit ?SwingUtilities.invokeXXX
Blöcke, die das für uns tun 🙂JFrame
erstreckt sich nichtJComponent
so nicht überschreibenpaintComponent
. Sie können dies überprüfen, indem die@Override
annotation.Um diese Funktionalität zu extrahieren
paintComponent
um eine neue Klasse erweitertJComponent
. Vergessen Sie nicht, rufensuper.paintComponent(g)
eher alssuper.paintComponents(g)
.http://stackoverflow.com/questions/15167342/arrayindexoutofboundsexception-error-while-drawing-a-polygon
@camickr sagt, dass ich verwenden soll, paintComponent (), wenn ich verwenden swing ?Ersetzen
Mit
paintComponent()