GeneralPath-Kreise werden keine Kreise

Status
Nicht offen für weitere Antworten.

1337iceskater

Aktives Mitglied
Hallo Freunde der Java-Programmierung,

Ich habe mal wieder ein Problem, es geht dabei um ein Verhalten von einem GeneralPath-Objekt.
Es soll eigentlich ein Kreis werden, jedoch wird das Objekt eher in Augenform dargestellt und hat vor allem Ecken und erreicht die Grenze des JComponents, auf dem es gemalt wird, nicht.

Hier jetzt aber erstmal der Code:

Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Ellipse2D;
import java.awt.geom.GeneralPath;
 
import javax.swing.JComponent;
 
public class Field extends JComponent implements MouseListener, MouseMotionListener{
 
    private static final long serialVersionUID = 1L;
    private int xPos;
    private int yPos;
    private boolean selected = false;
    private boolean cleared = false;
    private int lang;
    private Color origColor;
    private Color color;
    private GeneralPath p;
    private Field north;
    private Field left;
    private Field right;
    private Field south;
    private GameField gf;
    
    public Field(int x, int y, int color, GameField gf){
        this.gf = gf;
        this.xPos=x;
        this.yPos=y;
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
        this.setVisible(true);
        switch(color){
        case 0: {
            this.color = new Color(255, 0, 255);
            this.origColor = new Color(255, 0, 255);
            break;
        }
        case 1: {
            this.color = Color.YELLOW;
            this.origColor = Color.YELLOW;
            break;
        }
        case 2: {
            this.color = Color.RED;
            this.origColor = Color.RED;
            break;
        }
        case 3: {
            this.color = new Color(0, 0, 200);
            this.origColor = new Color(0, 0, 200);
            break;
        }
        case 4: {
            this.color = Color.GREEN;
            this.origColor = Color.GREEN;
            break;
        }
        }
    }
    
    public void setNorth(Field f){
        this.north = f;
    }
    
    public void setSouth(Field f){
        this.south = f;
    }
    
    public void setLeft(Field f){
        this.left = f;
    }
    
    public void setRight(Field f){
        this.right = f;
    }
    
    public boolean isSelected(){
        return this.selected;
    }
    
    public boolean isCleared(){
        return this.cleared;
    }
    
    public int min(int i, int j){
        if(i < j){
            return i;
        }
        else{
            return j;
        }
    }
    
    public void reset(){
        this.selected = false;
        this.setColor(origColor);
        repaint();
    }
    
    public void setColor(Color col){
        this.color = col;
    }
    
    public Color getOrigColor(){
        return this.origColor;
    }
    
    public void setOrigColor(Color c){
        this.origColor = c;
    }
    
    public void setCleared(boolean cl){
        this.cleared = cl;
    }
    
    public void draw(Graphics g){
        if(!this.cleared){
            Graphics2D g2 = (Graphics2D)g;
            g2.setColor(this.color);
            p = new GeneralPath();
            
            /* Funktion zum Zeichnen eines Karos.
            p.moveTo(0, this.getHeight()/2);
            p.lineTo(this.getWidth()/2, 0); p.lineTo(this.getWidth(), this.getHeight()/2);
            p.lineTo(this.getWidth()/2, this.getHeight()); p.lineTo(0, this.getHeight()/2);*/
            
            //Funktion zum Zeichnen eines Kreises, die nicht funktioniert.
            p.moveTo(0, this.getHeight()/2);
            p.curveTo(0, this.getHeight()/2, this.getWidth()/2, 0, this.getWidth(), this.getHeight()/2);
            p.curveTo(this.getWidth(), this.getHeight()/2, this.getWidth()/2, this.getHeight(), 0, this.getHeight()/2);
            g2.fill(p);
        }
    }
 
    public int maxOf(int i, int j){
        if(i > j){
            return i;
        }
        else{
            return j;
        }
    }
    
    public void markValidNeighb(String s){
        boolean more = false;
        mark();
        if(!s.equalsIgnoreCase("so")&&this.north!=null&&!this.north.isSelected()&&this.north.getOrigColor().equals(this.origColor)){
            more = true;
            north.markValidNeighb("no");
        }
        if(!s.equalsIgnoreCase("ri")&&this.left!=null&&!this.left.isSelected()&&this.left.getOrigColor().equals(this.origColor)){
            more = true;
            left.markValidNeighb("le");
        }
        if(!s.equalsIgnoreCase("le")&&this.right!=null&&!this.right.isSelected()&&this.right.getOrigColor().equals(this.origColor)){
            more = true;
            right.markValidNeighb("ri");
        }
        if(!s.equalsIgnoreCase("no")&&this.south!=null&&!this.south.isSelected()&&this.south.getOrigColor().equals(this.origColor)){
            more = true;
            south.markValidNeighb("so");
        }
        if(!more&&s.equalsIgnoreCase("")){
            this.reset();
        }
    }
    
    public void mark(){
        this.selected = true;
        int red = maxOf(this.origColor.getRed()-50, 0);
        int green = maxOf(this.origColor.getGreen()-50, 0);
        int blue = maxOf(this.origColor.getBlue()-50, 0);
        this.setColor(new Color(red, green, blue));
        repaint();
    }
    
    public void resetValidNeighb(){
        this.reset();
        if(this.north!=null&&this.north.isSelected()&&this.north.getOrigColor().equals(this.origColor)){
            north.resetValidNeighb();
        }
        if(this.left!=null&&this.left.isSelected()&&this.left.getOrigColor().equals(this.origColor)){
            left.resetValidNeighb();
        }
        if(this.right!=null&&this.right.isSelected()&&this.right.getOrigColor().equals(this.origColor)){
            right.resetValidNeighb();
        }
        if(this.south!=null&&this.south.isSelected()&&this.south.getOrigColor().equals(this.origColor)){
            south.resetValidNeighb();
        }
    }
    
    @Override
    public void mouseClicked(MouseEvent e){
        if(!this.cleared){
            if(p.contains(e.getPoint())&&!this.selected){
                gf.resetAllBefore();
                this.markValidNeighb("");
            }
            else if(p.contains(e.getPoint())&&this.selected){
                gf.clearSelected();
            }
        }
        repaint();
    }
    
    public void clear(){
        this.selected = false;
        this.cleared = true;
        repaint();
    }
    
    @Override
    public void paint(Graphics g){
        draw(g);
    }
    
    @Override
    public void mouseEntered(MouseEvent e){
        
    }
 
    @Override
    public void mouseExited(MouseEvent e){
        
    }
 
    @Override
    public void mousePressed(MouseEvent e){
        
    }
 
    @Override
    public void mouseReleased(MouseEvent e){
        
    }
    
    public boolean isIn(Point p){
        if(p.getX()<this.xPos+lang&&p.getX()>this.xPos){
            if(p.getY()<this.yPos+lang&&p.getY()>this.yPos){
                return true;
            }
        }
        return false;
    }
 
    public void setXPos(int xPos) {
        this.xPos = xPos;
    }
 
    public int getXPos() {
        return xPos;
    }
 
    public void setYPos(int yPos) {
        this.yPos = yPos;
    }
 
    public int getYPos() {
        return yPos;
    }
 
    public void setLang(int lang) {
        this.lang = lang;
    }
 
    public int getLang() {
        return lang;
    }
 
    public void setNeighbours(Field north, Field left, Field right, Field south){
        this.north = north;
        this.left = left;
        this.right = right;
        this.south = south;
    }
    
    @Override
    public void mouseDragged(MouseEvent e){
        
    }
 
    @Override
    public void mouseMoved(MouseEvent e){
        
    }
}

Genauer geht es um diese Funktion:

Java:
public void draw(Graphics g){
        if(!this.cleared){
            Graphics2D g2 = (Graphics2D)g;
            g2.setColor(this.color);
            p = new GeneralPath();
            
            /* Funktion zum Zeichnen eines Karos.
            p.moveTo(0, this.getHeight()/2);
            p.lineTo(this.getWidth()/2, 0); p.lineTo(this.getWidth(), this.getHeight()/2);
            p.lineTo(this.getWidth()/2, this.getHeight()); p.lineTo(0, this.getHeight()/2);*/
            
            //Funktion zum Zeichnen eines Kreises, die nicht funktioniert.
            p.moveTo(0, this.getHeight()/2);
            p.curveTo(0, this.getHeight()/2, this.getWidth()/2, 0, this.getWidth(), this.getHeight()/2);
            p.curveTo(this.getWidth(), this.getHeight()/2, this.getWidth()/2, this.getHeight(), 0, this.getHeight()/2);
            g2.fill(p);
        }
    }

Der untere Teil der Funktion macht irgendwie nicht das, was er soll...

Ich hoffe ihr könnt mir helfen und bedanke mich an dieser Stelle schonmal!

MfG Stefan
 

Marco13

Top Contributor
Nur kurz draugeschaut, aber... du weißt schon, dass curveTo mit kubischen Beziersplines rumfuhrwerkt? Also, damit einen "perfekten" Kreis nachzubauen könnte etwas frickelig werden. Einfacher (wenn es drawArc nicht tut) wäre sicher, ein "Polygon" mit vielen Ecken zu machen - also einfach 30 Kontrollpunkte kreisförmig anordnen und jeweils mit lineTo durchlaufen...
 

1337iceskater

Aktives Mitglied
Ok, danke für die Info.

Ich dachte mir schon,dass das sowas dann wird, aber hab halt gehofft, dass es auch anders geht. Naja, kann man nix machen. Dann mach ichs mit lineTo :p

Vielen Dank trotzdem
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S GeneralPath in Polygon umwandeln..? AWT, Swing, JavaFX & SWT 5
E Zeichnen von Generalpath (Shape) AWT, Swing, JavaFX & SWT 4
aze GeneralPath als ZickZackLinie zeichnen AWT, Swing, JavaFX & SWT 3
aze GeneralPath wie eine Parabel: Scheitelpunkt bestimmen AWT, Swing, JavaFX & SWT 9
Redfrettchen GeneralPath nur zum Zeichnen schließen AWT, Swing, JavaFX & SWT 3
F Elipse2d: generalPath AWT, Swing, JavaFX & SWT 3
M Hough-Transformation für Kreise und andere Formen AWT, Swing, JavaFX & SWT 3
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
P Bestimmte Kreise färben AWT, Swing, JavaFX & SWT 3
wolfgang63 JavaFX Animation, Kreise im vorgegebem Takt durchs Fenster laufen lassen AWT, Swing, JavaFX & SWT 3
J Swing Bild laden, Kreise drin malen, Schreiben AWT, Swing, JavaFX & SWT 2
M Kreise zeichnen AWT, Swing, JavaFX & SWT 6
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
E Swing Rechteck und Kreise verschieben AWT, Swing, JavaFX & SWT 3
M Kreise anklicken (Farbänderung) AWT, Swing, JavaFX & SWT 2
P Kreise Rechtecke AWT, Swing, JavaFX & SWT 5
G Swing Kreise auf JPanel zeichnen AWT, Swing, JavaFX & SWT 11
M In einem JLabel Kreise zeichnen AWT, Swing, JavaFX & SWT 4
M Vokabelprogram - Schleife für Liste soll schrittweise durchlaufen werden AWT, Swing, JavaFX & SWT 3
melaniemueller JavaFX Beispiel kann nicht ausgeführt werden AWT, Swing, JavaFX & SWT 4
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
W Können Animationen in JavaFX "verschluckt" werden? AWT, Swing, JavaFX & SWT 8
M Umwandlung in den HSV-Farbraum lässt die Grafik pixelig werden AWT, Swing, JavaFX & SWT 8
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
Lunar Swing JFrame erstellt; weitere Elemente werden nicht eingefügt/sind nicht zu sehen AWT, Swing, JavaFX & SWT 4
B JavaFX Von welcher Klasse und zu welchem Zeitpunkt werden Event-Objekte erstellt? AWT, Swing, JavaFX & SWT 3
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
J e(fx)clipse funkioniert nicht / imports werden Rot gekennzeichnet AWT, Swing, JavaFX & SWT 1
ronbot77 JavaFX Rechtecke werden nicht neu gezeichnet AWT, Swing, JavaFX & SWT 8
R FXML File kann nicht hinzugefügt werden! AWT, Swing, JavaFX & SWT 2
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
L Image kann nicht gefunden werden AWT, Swing, JavaFX & SWT 1
L Bilder werden in exportierter Datei nicht geladen AWT, Swing, JavaFX & SWT 6
J Bilder aus dem SceneBuilder werden in der Jar nicht dargestellt AWT, Swing, JavaFX & SWT 4
TheWhiteShadow JavaFX Bilder werden ungewollt Skaliert AWT, Swing, JavaFX & SWT 1
MoxxiManagarm JavaFX Auch ich versuche mit JavaFX warm zu werden AWT, Swing, JavaFX & SWT 9
A 2D-Grafik Zeichen werden über unabhängingen JRadioButton nicht gefüllt AWT, Swing, JavaFX & SWT 28
L Swing JPanels werden nicht angezeigt! AWT, Swing, JavaFX & SWT 7
ralfb1105 Swing SwingWorker - max 10 Threats werden gestartet !? AWT, Swing, JavaFX & SWT 5
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
J JavaFX Elemente werden nicht zu TableView hinzugefügt AWT, Swing, JavaFX & SWT 3
SchmidiMC 2D-Grafik Grafiken werden nicht gezeichnet AWT, Swing, JavaFX & SWT 2
J Controler werden nicht inialisiert - Warum ? AWT, Swing, JavaFX & SWT 12
J TableView Daten werden nicht ausgegeben AWT, Swing, JavaFX & SWT 9
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
R JRE, NPAPI Java Plugins: Werden Plugins weiterhin bereit gestellt? AWT, Swing, JavaFX & SWT 5
I JAVA 8, JAVAFX und Eclipse – muss Eclipse extra eingerichtet werden? AWT, Swing, JavaFX & SWT 9
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
DerMauri JavaFX Raspberry Pi meldet "Hauptklasse konnte nicht gefunden oder geladen werden" AWT, Swing, JavaFX & SWT 10
A Swing Programm funktioniert aber zwei Buttons werden angezeigt AWT, Swing, JavaFX & SWT 3
J Swing Strings werden nicht in Textfeld geschrieben AWT, Swing, JavaFX & SWT 8
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
MrSnake ComboBox-Einträge werden unsichtbar AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
X JavaFX Tooltips für XYChart-Knoten werden nicht angezeigt! AWT, Swing, JavaFX & SWT 3
P JavaFX - XCF Datei von Gimp kann nicht angezeigt werden AWT, Swing, JavaFX & SWT 3
J Meine ProgBar und ProgIndi werden nicht aktualisiert AWT, Swing, JavaFX & SWT 28
A Swing Buttons werden trotz setVisible nicht dargestellt AWT, Swing, JavaFX & SWT 14
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
C AWT Textfelder werden nicht automatisch angezeigt AWT, Swing, JavaFX & SWT 2
D Buttons werden nebeneinander angeordnet AWT, Swing, JavaFX & SWT 9
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
9 Swing Registrierte Knöpfe mit Bildern werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
W Swing Farbige JPanels auf JFrame werden nicht gezeigt. Was mach ich falsch? AWT, Swing, JavaFX & SWT 7
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
L Tooltips werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 5
R Swing Buttons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
K JTabs werden nicht angezeigt AWT, Swing, JavaFX & SWT 6
kaoZ Swing JToolBar, ImageIcon werden teilweise verdeckt AWT, Swing, JavaFX & SWT 0
S Swing Tooltips werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
D JavaFX Mysteriöser Dropshadow hinter Tablabelschrift - Schatten kann nicht entfernt werden (FXML + CSS) AWT, Swing, JavaFX & SWT 6
I Swing Bilder werden nach Export nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing JColorChooser's Icon will nicht getauscht werden. AWT, Swing, JavaFX & SWT 10
G JavaFX TableView - Änderungen werden nicht übernommen. AWT, Swing, JavaFX & SWT 3
A Swing Bilder werden nicht angezeigt AWT, Swing, JavaFX & SWT 3
A Swing Parameter werden bei Funktionsaufruf nicht ausgegeben AWT, Swing, JavaFX & SWT 2
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
D Image soll langsam sichtbar werden AWT, Swing, JavaFX & SWT 4
J Abbrechen muss immer einmal mehr gedrückt werden AWT, Swing, JavaFX & SWT 3
A Swing ActionListener kann nicht hinzugefügt werden AWT, Swing, JavaFX & SWT 4
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
S Swing Inhalte von Scroll-Panes werden nicht gezeichnet AWT, Swing, JavaFX & SWT 9
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Mausbewegungen werden gepuffert AWT, Swing, JavaFX & SWT 2
J CMD: Hauptklasse konnte nicht gefunden werden AWT, Swing, JavaFX & SWT 4
F Applet JApplet per html einbinden - Main class kann nicht gefunden werden AWT, Swing, JavaFX & SWT 15
F Bilder werden nicht in's Array geladen AWT, Swing, JavaFX & SWT 4
maestr0 SWT ContainerSelectionDialog kann nicht importiert werden AWT, Swing, JavaFX & SWT 2
X JTable Selektierte Reihe kann nicht gelöscht werden AWT, Swing, JavaFX & SWT 2
T iText - JTable to PDF - titel werden nicht angezeigt AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben