绘制三个圆圈,存储数据并进行比较

时间:2015-03-18 22:57:07

标签: java comparison draw

第一年的java学生,到目前为止大约有8周的经验。所以,我需要创建三个圆圈并用绘图面板显示它们。然后我需要创建静态方法,该方法应该具有两个圆(两个参数)的半径参数,如果第一个圆较小,则方法应返回-1,如果两个圆具有相同的大小,则返回0,或返回1如果第一个圆圈较大。根据此方法的返回值,main方法应打印一行输出,如:

绿色圆圈小于红色圆圈。

我已经绘制了圆圈,但我不知道如何从用户存储该值,然后比较它们。任何帮助都会很棒。这是我到目前为止所做的:

public class Circles {
  public static final Scanner CONSOLE=new Scanner(System.in);

  //prompt user
  public static int promptForInt(String prompt) {
    System.out.print(prompt);
    return CONSOLE.nextInt();
  }

  //Static method w/ parameters for the radiuses of red circle
  public static int redCircle(Graphics g){
    g.setColor(Color.RED);
    int radius = promptForInt("Please enter the raidus of the red circle: ");
    int x = promptForInt("Please enter the x-coordinate of the red circle: ");
    int y= promptForInt("Please enter the y-coordinate of the red circle: ");
    g.fillOval(0+x, 0+y, radius*2, radius*2);
  }

  //Static method w/ parameters for the radiuses of the green circle
  public static void greenCircle(Graphics g){
    g.setColor(Color.GREEN);
    int radius = promptForInt("Please enter the raidus of the green circle: ");
    int x = promptForInt("Please enter the x-coordinate of the green circle: ");
    int y= promptForInt("Please enter the y-coordinate of the green circle: ");
    g.fillOval(0+x, 0+y, radius*2, radius*2);
  }

  //Static method w/ parameters for the radiuses of the green circle
  public static void blueCircle(Graphics g){
    g.setColor(Color.BLUE);
    int radius = promptForInt("Please enter the raidus of the blue circle: ");
    int x = promptForInt("Please enter the x-coordinate of the blue circle: ");
    int y= promptForInt("Please enter the y-coordinate of the blue circle: ");
    g.fillOval(0+x, 0+y, radius*2, radius*2);
  }

  //compares two circles
  public static void compareCircles(int r1, int r2){
    return r1-r2;

  }

  //exe starts here
  public static void main(String [] args){
    DrawingPanel panel = new DrawingPanel(400,300);
    Graphics g =  panel.getGraphics();

    System.out.println("Lab 5 written by me.\n"); 
    redCircle(g);
    greenCircle(g);
    blueCircle(g);
  }
}

根据MadProgrammer的请求编辑添加到DrawPanel

/*
Stuart Reges and Marty Stepp
February 24, 2007
Changes by Tom Bylander in 2010 (no anti-alias, repaint on sleep)
Changes by Tom Bylander in 2012 (track mouse clicks and movement)
Changes by Tom Bylander in 2013 (fix bug in tracking mouse clicks)
Changes by S. Robbins   in 2014 (getters for width and height)
Changes by S. Robbins   in 2014 (addKeyListener added)
Changes by S. Robbins   in 2014 (catch exception on default close so that it works in an applet)
Changes by S. Robbins   in 2015 (buffer key events)
Changes by S. Robbins   in 2015 (show mouse status by default is off)

The DrawingPanel class provides a simple interface for drawing persistent
images using a Graphics object.  An internal BufferedImage object is used
to keep track of what has been drawn.  A client of the class simply
constructs a DrawingPanel of a particular size and then draws on it with
the Graphics object, setting the background color if they so choose.

To ensure that the image is always displayed, a timer calls repaint at
regular intervals.
*/

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.ArrayList;

public class DrawingPanel implements ActionListener {
 private static final String versionMessage = 
    "Drawing Panel version 1.1, January 25, 2015";
 private static final int DELAY = 100;  // delay between repaints in millis
 private static final boolean PRETTY = false;  // true to anti-alias
 private static boolean showStatus = false;
 private static final int MAX_KEY_BUF_SIZE = 10;

 private int width, height;    // dimensions of window frame
 private JFrame frame;         // overall window frame
 private JPanel panel;         // overall drawing surface
 private BufferedImage image;  // remembers drawing commands
 private Graphics2D g2;        // graphics context for painting
 private JLabel statusBar;     // status bar showing mouse position
 private volatile MouseEvent click;     // stores the last mouse click
 private volatile boolean pressed;      // true if the mouse is pressed
 private volatile MouseEvent move;      // stores the position of the mouse
 private ArrayList<KeyInfo> keys;

 // construct a drawing panel of given width and height enclosed in a window
 public DrawingPanel(int width, int height) {
   this.width = width;
   this.height = height;
   keys = new ArrayList<KeyInfo>();
   image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

   statusBar = new JLabel(" ");
   statusBar.setBorder(BorderFactory.createLineBorder(Color.BLACK));
   statusBar.setText(versionMessage);

   panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
   panel.setBackground(Color.WHITE);
   panel.setPreferredSize(new Dimension(width, height));
   panel.add(new JLabel(new ImageIcon(image)));

   click = null;
   move = null;
   pressed = false;

   // listen to mouse movement
   MouseInputAdapter listener = new MouseInputAdapter() {
     public void mouseMoved(MouseEvent e) {
       pressed = false;
       move = e;
       if (showStatus)
          statusBar.setText("moved (" + e.getX() + ", " + e.getY() + ")");
     }

     public void mousePressed(MouseEvent e) {
       pressed = true;
       move = e;
       if (showStatus)
          statusBar.setText("pressed (" + e.getX() + ", " + e.getY() + ")");
     }

     public void mouseDragged(MouseEvent e) {
       pressed = true;
       move = e;
       if (showStatus)
          statusBar.setText("dragged (" + e.getX() + ", " + e.getY() + ")");
     }

     public void mouseReleased(MouseEvent e) {
       click = e;
       pressed = false;
       if (showStatus)
          statusBar.setText("released (" + e.getX() + ", " + e.getY() + ")");
     }

     public void mouseEntered(MouseEvent e) {
//       System.out.println("mouse entered");
       panel.requestFocus();
     }

   };
   panel.addMouseListener(listener);
   panel.addMouseMotionListener(listener);
   new DrawingPanelKeyListener();

   g2 = (Graphics2D)image.getGraphics();
   g2.setColor(Color.BLACK);
   if (PRETTY) {
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     g2.setStroke(new BasicStroke(1.1f));
   }

   frame = new JFrame("Drawing Panel");
   frame.setResizable(false);
   try {
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // so that this works in an applet
   } catch (Exception e) {}
   frame.getContentPane().add(panel);
   frame.getContentPane().add(statusBar, "South");
   frame.pack();
   frame.setVisible(true);
   toFront();
   frame.requestFocus();

   // repaint timer so that the screen will update
   new Timer(DELAY, this).start();
 }

 public void showMouseStatus(boolean f) {
   showStatus = f;
 }

 public void addKeyListener(KeyListener listener) {
   panel.addKeyListener(listener);
   panel.requestFocus();
 }

 // used for an internal timer that keeps repainting
 public void actionPerformed(ActionEvent e) {
   panel.repaint();
 }

 // obtain the Graphics object to draw on the panel
 public Graphics2D getGraphics() {
   return g2;
 }

 // set the background color of the drawing panel
 public void setBackground(Color c) {
   panel.setBackground(c);
 }

 // show or hide the drawing panel on the screen
 public void setVisible(boolean visible) {
   frame.setVisible(visible);
 }

 // makes the program pause for the given amount of time,
 // allowing for animation
 public void sleep(int millis) {
   panel.repaint();
   try {
     Thread.sleep(millis);
   } catch (InterruptedException e) {}
 }

 // close the drawing panel
 public void close() {
   frame.dispose();
 }

 // makes drawing panel become the frontmost window on the screen
 public void toFront() {
   frame.toFront();
 }

 // return panel width
 public int getWidth() {
    return width;
 }

 // return panel height
 public int getHeight() {
    return height;
 }

 // return the X position of the mouse or -1
 public int getMouseX() {
   if (move == null) {
     return -1;
   } else {
     return move.getX();
   }
 }

 // return the Y position of the mouse or -1
 public int getMouseY() {
   if (move == null) {
     return -1;
   } else {
     return move.getY();
   }
 }

 // return the X position of the last click or -1
 public int getClickX() {
   if (click == null) {
     return -1;
   } else {
     return click.getX();
   }
 }

 // return the Y position of the last click or -1
 public int getClickY() {
   if (click == null) {
     return -1;
   } else {
     return click.getY();
   }
 }

 // return true if a mouse button is pressed
 public boolean mousePressed() {
   return pressed;
 }

 public synchronized int getKeyCode() {
   if (keys.size() == 0)
     return 0;
   return keys.remove(0).keyCode;
 }

  public synchronized char getKeyChar() {
   if (keys.size() == 0)
     return 0;
   return keys.remove(0).keyChar;
 }

  public synchronized int getKeysSize() {
    return keys.size();
  }

 private synchronized void insertKeyData(char c, int code) {
   keys.add(new KeyInfo(c,code));
   if (keys.size() > MAX_KEY_BUF_SIZE) {
     keys.remove(0);
//     System.out.println("Dropped key");
   }
 }

 private class KeyInfo {
   public int keyCode;
   public char keyChar;

   public KeyInfo(char keyChar, int keyCode) {
     this.keyCode = keyCode;
     this.keyChar = keyChar;
   }
 }

 private class DrawingPanelKeyListener implements KeyListener {

   int repeatCount = 0;

   public DrawingPanelKeyListener() {
     panel.addKeyListener(this);
     panel.requestFocus();
   }

   public void keyPressed(KeyEvent event) {
//     System.out.println("key pressed");
     repeatCount++;
     if ((repeatCount == 1) || (getKeysSize() < 2))
        insertKeyData(event.getKeyChar(),event.getKeyCode());
   }

   public void keyTyped(KeyEvent event) {
   }

   public void keyReleased(KeyEvent event) {
     repeatCount = 0;
   }

 }

}

2 个答案:

答案 0 :(得分:0)

创建一个自己的类Circle,将Circle的位置存储在Circle的一个实例中,并将这些Circles保存到变量中。

答案 1 :(得分:0)

只需比较半径(或半径),所有其他信息都无关紧要:

public static int compareCircles(int r1, int r2){
    return r1 - r2;      
}

这是传统的比较方式,即使它不返回-1/0/1。 如果你真的想要这些返回值,你仍然可以修补。