2016-05-26 5 views
0

Ich versuche nur, Kreis mit der DrawOval() -Methode zu zeichnen, und es zeigt nur kleine Quadrat, wenn ich das Programm ausführen. Ich habe versucht, den Konstruktor der Surface-Klasse hinzuzufügen, aber es hat nicht so gut funktioniert. Hier ist der Code, den ich habe gemacht:Wie zeichne ich einen Kreis mit java.awt.Graphics?

package swing22; 

    import java.awt.BorderLayout; 
    import java.awt.Color; 
    import javax.swing.*; 
    import java.awt.EventQueue; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 


    public class MyFrame { 

     JFrame frame = new JFrame(" Test Frame "); 
     JPanel panel = new JPanel(); 

     JButton button = new JButton("CLICK"); 
     JLabel label = new JLabel(" 33 "); 

     public MyFrame(){ 

      gui(); 

     } 

     public void gui(){ 

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

      panel.setBackground(Color.GREEN); 
      panel.add(button); 
      panel.add(label); 
      panel.add(new Surface()); 

      frame.add(panel, BorderLayout.CENTER); 

      button.addActionListener(new Action()); 

      frame.pack(); 
      frame.setSize(300,300); 
      frame.setVisible(true); 
      frame.setResizable(false); 

     } 


     class Action implements ActionListener{ 
      @Override 
      public void actionPerformed(ActionEvent arg0) { 
       label.setText("new value"); 
      } 
     } 

    } 


    class Surface extends JPanel { 


      private void doDrawing(Graphics g) { 

       Graphics2D g2d = (Graphics2D) g; 

        g.setColor(Color.red); 
        g.drawOval(80, 80, 30, 30); 
        g.fillArc(140, 140, 30, 30, 0, 90); 
      } 

      @Override 
      public void paintComponent(Graphics g) { 

       super.paintComponent(g); 
       doDrawing(g); 
      } 
     } 
+1

Es ist ein Layout und die gewünschte Größe Problem. Ihre Oberfläche scheint extrem klein zu sein, sagen wir [0, 0], da dies die bevorzugte Größe ist. Siehe [diese ähnliche Frage und Antwort] (http://stackoverflow.com/questions/37449227/trouble-drawing-in-jpanel). –

+0

Man bedankt sich sehr, ich habe einfach diese Zeile \t \t 'setPreferredSize (neue Dimension (200, 200));' zum Surface-Konstruktor hinzugefügt und es funktioniert einwandfrei! – MyNet

+1

@MyNet, ist die bessere Lösung, die Methode 'getPreferredSize()' zu überschreiben, um die richtige Dimension zurückzugeben. – camickr

Antwort

0

Sie die Komponenten Größe festgelegt haben, damit die Komponente zu klein ist, um den Kreis angezeigt werden soll.

stellen Sie die Komponenten Größe und der Kreis

public void gui(){ 
    .... 
    Surface s = new Surface(); 
    s.setPreferredSize(new Dimension(200, 200)); 
    panel.add(new Surface()); 
    ... 
} 

Sie die djust können richtig gezeigt werden die compoinent durch entweder Einstellung zu ergreifen oder außer Kraft setzen ihre getPrefferedSize() -methode

0
use this class (Graphiic) and it's method (Draw_Circle) 

import java.awt.Color; 
import java.awt.Graphics2D; 
import java.awt.Graphics; 
import javax.swing.JFrame; 

public class Graphiic 
{ 
    public Graphics GClass; 
    public Graphics2D G2D; 
    public void Draw_Circle(JFrame jf,int radius , int xLocation, int    yLocation) 
    { 
     GClass = jf.getGraphics(); 
     GClass.setPaintMode(); 
     GClass.setColor(Color.MAGENTA); 
     GClass.fillArc(xLocation, yLocation, radius, radius, 0, 360);   
    }