Bobby C. Robillard
Bobby C. Robillard

Reputation: 157

Why won't circle draw where I click

So I'm trying to draw a circle where a user clicks, which can then be re-sized by the bar down below. Everything works except for that the circle won't draw where I want it to. Any suggestions?

Here is my Panel

    import java.awt.*;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;

    import javax.swing.*;
    import javax.swing.event.*;

public class TestClass extends JFrame {
    private JSlider slide;
    private MainClass myPanel;
    public int x1=0;
    public int y1=0;
    public TestClass(){
        super("The Title");
        myPanel = new MainClass();
        myPanel.setBackground(Color.YELLOW);
        slide = new JSlider(SwingConstants.HORIZONTAL, 0, 200, 10);
        slide.setMajorTickSpacing(10);
        slide.setPaintTicks(true);

        slide.addChangeListener(
                new ChangeListener(){
                    public void stateChanged(ChangeEvent e){
                        myPanel.checkDiameter(slide.getValue());
                    }
                }
            );
        HandlerClass handler = new HandlerClass();
        slide.addMouseListener(handler);
        add(slide, BorderLayout.SOUTH);
        add(myPanel, BorderLayout.CENTER);


    }

    public int setX1(){
        return x1;
    }

    public int setY1(){
        return y1;
    }

    private class HandlerClass implements MouseListener{

        @Override
        public void mouseClicked(MouseEvent event) {
            // TODO Auto-generated method stub
                    x1=event.getX();

                    y1=event.getY();
                    repaint();
        }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }


    }

}

Here is the other important class which creates a window and call TestClass;

import java.awt.*;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class MainClass extends JPanel{


        private int d = 10;


        public void paintComponent(Graphics g){
            super.paintComponent(g);
            TestClass values = new TestClass();
            g.setColor(Color.CYAN);
            g.fillOval(values.setX1()+50, values.setY1(), d, d);
        }

        public void checkDiameter(int newD)
            {
            //New format for if statements
            d = (newD >= 0 ? newD //if 
                    : 10//else
                    );

            repaint();
        }

        public Dimension getPreferredSize(){
            return new Dimension(200,200);
        }
        public Dimension getMinimumSize(){
            return getPreferredSize();
        }
}

Upvotes: 1

Views: 29

Answers (1)

Bobby C. Robillard
Bobby C. Robillard

Reputation: 157

Hey Guys I found a way to get it working.

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
import javax.swing.event.*;

public class TestClass extends JFrame {
    private JSlider slide;
    private MainClass myPanel;
    public static int x1=0,y1=0;
    public TestClass(){
        super("The Title");
        myPanel = new Panel();
        myPanel.setBackground(Color.YELLOW);
        //Allows you to re-size the drawn circle
        slide = new JSlider(SwingConstants.HORIZONTAL, 0, 200, 10);
        slide.setMajorTickSpacing(10);
        slide.setPaintTicks(true);

        slide.addChangeListener(
                new ChangeListener(){
                    public void stateChanged(ChangeEvent e){
                        myPanel.checkDiameter(slide.getValue());
                    }
                }
            );
        //Create a way to handle user mouse events
        HandlerClass handler = new HandlerClass();
        myPanel.addMouseListener(handler);
        add(slide, BorderLayout.SOUTH);
        add(myPanel, BorderLayout.CENTER);


    }



    private class HandlerClass implements MouseListener{

        @Override
        public void mouseClicked(MouseEvent event) {
            // TODO Auto-generated method stub

Right here is what is new with the code, this method gets the x and y coordinates of a click and sends it to MainClass object myPanel which has the setPosition method; class show before.

myPanel.setPosition(event.getX(),event.getY());
                        repaint(); }

        @Override
        public void mousePressed(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseReleased(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseEntered(MouseEvent e) {
            // TODO Auto-generated method stub

        }

        @Override
        public void mouseExited(MouseEvent e) {
            // TODO Auto-generated method stub

        }


    }

}

Here is the MainClass class, it is poorley named as it's not actually the main class... import java.awt.; import javax.swing.; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;

  public class Panel extends JPanel{
        private int x1,y1;
            private int d = 10;

        public void paintComponent(Graphics g){
            super.paintComponent(g);

            g.setColor(Color.CYAN);
            g.fillOval(x1, y1, d, d);
        }

        public void checkDiameter(int newD)
            {
            //New format for if statements
            d = (newD >= 0 ? newD //if 
                    : 10//else
                    );

            repaint();
        }
        public void setPosition(int newX, int newY) {
            this.x1 = newX;
            this.y1 = newY;
            repaint();
        }

        public Dimension getPreferredSize(){
            return new Dimension(200,200);
        }
        public Dimension getMinimumSize(){
            return getPreferredSize();
        }
}

Upvotes: 1

Related Questions