Sonntag, Juli 5, 2020

Java-Grafik zeichne einen Kreis mit bestimmten parameter

Für ein problem ich habe einen Kreis zu zeichnen auf dem Bildschirm mit dem Mittelpunkt bei den Koordinaten (280,300) mit einem radius von 50. Der Hinweis sagt: ein Kreis ist Ein oval mit der gleichen Breite und Höhe. Der Mittelpunkt dieses Kreises ist 50 Pixel weiter unten und 50 Pixel rechts von der NW-Ecke des Ovals.

Gibt es die TryoutPanel Klasse:

import java.awt.*;
import javax.swing.*;

public class TryoutPanel extends JPanel{

  private Color myColor;

  public TryoutPanel(Color c){
    myColor = c;
  }

  public void paintComponent(Graphics g){
    super.paintComponent(g);
    setForeground(myColor);
    g.drawString("top",10,50);
    g.drawLine(10,60, 200,60);
    g.drawString("middle",10,80);
    g.drawLine(10,90, 200,90);
    g.drawString("bottom",10,110);
    g.drawLine(10,120, 200,120);
    g.drawRect(200,300,100,50);
    g.drawOval(200,300,100,50);
    for(int j = 0; j < 9; j++)
      g.drawOval(50,200, 10 + 20*j, 210 - 20*j);
  }
}

Ich geben Sie den code im folgenden:

public void paintComponent(Graphics g){
  super.paintComponent(g);
  setForeground(myColor);
  //INSERT CODE HERE

Habe ich versucht:
g.drawOval(280,300,50,50);

Aber es sagt, dass ich falsche Parameter verwendet. Was mache ich falsch.

  • Wenn der radius 50, dann ist der Durchmesser von 100-dies ist Teil Ihrer Fehler.
  • Ich habe versucht g.DrawOval(280,300,100,100); und es funktioniert immer noch nicht
  • Ja, weil dann dein center würde bei (330, 350).
InformationsquelleAutor user3312944 | 2014-04-16

1 Kommentar

  1. 5

    Den x/y parameter der drawOval ist der oberen/linken Ecke aus, wo das oval gezeichnet wird

    Werden, um in der Lage zu zeichnen den Kreis um den Mittelpunkt, wenn 230x300, müssen Sie subtrahieren Sie den radius von einem Punkt und dann generieren Sie eine Breite und Höhe (Durchmesser), doppelt so…

    g.drawOval(230 - radius, 300 - radius, radius * 2, radius * 2);

    So, in diesem Beispiel basic zeichnet ein Rechteck um den Punkt der 230x300 mit einer Breite/Höhe von 200 (radius = 100) und zieht Linien durch diesen Punkt zu veranschaulichen, der den Mittelpunkt der Ovale gezeichnet dann über…

    Java-Grafik zeichne einen Kreis mit bestimmten parameter

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class TryoutOval {
    
        public static void main(String[] args) {
            new TryoutOval();
        }
    
        public TryoutOval() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLayout(new BorderLayout());
                    frame.add(new TryoutPanel(Color.RED));
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TryoutPanel extends JPanel {
    
            private Color myColor;
    
            public TryoutPanel(Color c) {
                myColor = c;
            }
    
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(400, 400);
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
    
                int centerX = 280;
                int centerY = 300;
    
                int radius = 50;
                int diameter = radius * 2;
    
                int x = centerX - radius;
                int y = centerY - radius;
    
                g.setColor(Color.BLACK);
                g.drawRect(x, y, diameter, diameter);
                g.drawLine(x, y, x + diameter, y + diameter);
                g.drawLine(x + diameter, y, x, y + diameter);
    
                g.setColor(myColor);
                g.drawOval(x, y, diameter, diameter);
    
                g.fillOval(centerX - 5, centerY - 5, 10, 10);
    
            }
        }
    
    }

    Oh, und setForeground(myColor); ist eine furchtbar schlechte Idee, innerhalb einer paint Methode, da es die Ursache ein paint Ereignis Hinzugefügt werden, um die Ereignis-queue jedes mal, wenn die Methode aufgerufen wird, was zu einer nie endenden repaint-Anfrage, die schließlich verbrauchen CPU

Kostenlose Online-Tests