Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8750567
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T12:53:22+00:00 2026-06-13T12:53:22+00:00

Let me start off by saying I know I’ve violated some basic Java principles

  • 0

Let me start off by saying I know I’ve violated some basic Java principles in this messy code, but I’m desperately trying to finish a program by Tuesday for a social science experiment, and I don’t know Java, so I’m basically just fumbling through it for now.

With that disclaimer out of the way, I have a separate program working where a circle is moving around the screen and the user must click on it. It works fine when its in its own separate class file, but when I add the code to my main program, it’s no longer working. I don’t even really understand why repaint() calls my paint() function — as far as I’m concerned, it’s magic, but I’ve noticed that repaint() calls paint() in my test program, but not in the more complicated actual program, and I assume that’s why the circle is no longer painting on my program.

Entire code is below:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.*;
import java.awt.event.*;
import java.awt.geom.Ellipse2D;
import java.io.FileReader;
import java.io.IOException;
import java.util.Calendar;

public class Reflexology1 extends JFrame{

private static final long serialVersionUID = -1295261024563143679L;
private Ellipse2D ball = new Ellipse2D.Double(0, 0, 25, 25);
private Timer moveBallTimer;
int _ballXpos, _ballYpos;
JButton button1, button2;
JButton movingButton;
JTextArea textArea1;
int buttonAClicked, buttonDClicked;
private long _openTime = 0;
private long _closeTime = 0;
JPanel thePanel = new JPanel();
JPanel thePlacebo = new JPanel();
final JFrame frame = new JFrame("Reflexology");
final JFrame frame2 = new JFrame("The Test");
JLabel label1 = new JLabel("Press X and  then click the moving dot as fast as you can.");

public static void main(String[] args){
    new Reflexology1();
}

public Reflexology1(){
    frame.setSize(600, 475);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setTitle("Reflexology 1.0");
    frame.setResizable(false);

    frame2.setSize(600, 475);
    frame2.setLocationRelativeTo(null);
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setTitle("Reflexology 1.0");
    frame2.setResizable(false);

    button1 = new JButton("Accept");
    button2 = new JButton("Decline");
    //movingButton = new JButton("Click Me");

    ListenForAcceptButton lForAButton = new ListenForAcceptButton();
    ListenForDeclineButton lForDButton = new ListenForDeclineButton();
    button1.addActionListener(lForAButton);
    button2.addActionListener(lForDButton);
    //movingButton.addActionListener(lForMButton);

    JTextArea textArea1 = new JTextArea(24, 50);

    textArea1.setText("Tracking Events\n");
    textArea1.setLineWrap(true);
    textArea1.setWrapStyleWord(true);
    textArea1.setSize(15, 50);
    textArea1.setEditable(false);

    FileReader reader = null;
    try {
        reader = new FileReader("EULA.txt");
        textArea1.read(reader, "EULA.txt");
    } catch (IOException exception) {
        System.err.println("Problem loading file");
        exception.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException exception) {
                System.err.println("Error closing reader");
                exception.printStackTrace();
            }
        }

    }

    JScrollPane scrollBar1 = new JScrollPane(textArea1, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    AdjustmentListener listener = new MyAdjustmentListener();

    thePanel.add(scrollBar1);
    thePanel.add(button1);
    thePanel.add(button2);

    frame.add(thePanel);
    ListenForMouse lForMouse = new ListenForMouse();
    thePlacebo.addMouseListener(lForMouse);
    thePlacebo.add(label1);
    frame2.add(thePlacebo);

    ListenForWindow lForWindow = new ListenForWindow();
    frame.addWindowListener(lForWindow);
    frame2.addKeyListener(new KeyAdapter() {
        public void keyPressed(KeyEvent e){
            if(e.getKeyChar() == 'X' || e.getKeyChar() == 'x') {moveBallTimer.start();}
        }
    });
    frame.setVisible(true);

       moveBallTimer = new Timer(1000, new ActionListener() {
           public void actionPerformed(ActionEvent e) {
           moveBall();
           System.out.println("Timer started!");
           repaint();
          }
        });

        addKeyListener(new KeyAdapter() {
          public void keyPressed(KeyEvent e) {
                if(frame2.isVisible()){ moveBallTimer.start(); }
          }
        });

}



private class ListenForAcceptButton implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if (e.getSource() == button1){
            Calendar ClCDateTime = Calendar.getInstance();
            System.out.println(ClCDateTime.getTimeInMillis() - _openTime);
            _closeTime = ClCDateTime.getTimeInMillis() - _openTime;
            //frame.getContentPane().remove(thePanel);
            //thePlacebo.addKeyListener(lForKeys);
            //frame.getContentPane().add(thePlacebo);

            //frame.repaint();
            //moveBallTimer.start();
            frame.setVisible(false);
            frame2.setVisible(true);
            frame2.revalidate();
            frame2.repaint();


            }
        }
    }


private class ListenForDeclineButton implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if (e.getSource() == button2){
            JOptionPane.showMessageDialog(Reflexology1.this, "You've declined the license agreement. DO NOT RESTART  the program. Please go inform a researcher that you have declined the agreement.", "WARNING", JOptionPane.INFORMATION_MESSAGE);
            System.exit(0);
        }
    }
}


private class ListenForWindow implements WindowListener{

    public void windowActivated(WindowEvent e) {
            //textArea1.append("Window is active");

    }

    // if this.dispose() is called, this is called:
    public void windowClosed(WindowEvent arg0) {

    }

    // When a window is closed from a menu, this is called:
    public void windowClosing(WindowEvent arg0) {

    }

    // Called when the window is no longer the active window:
    public void windowDeactivated(WindowEvent arg0) {
        //textArea1.append("Window is NOT active");

    }

    // Window gone from minimized to normal state
    public void windowDeiconified(WindowEvent arg0) {
        //textArea1.append("Window is in normal state");

    }

    // Window has been minimized
    public void windowIconified(WindowEvent arg0) {
        //textArea1.append("Window is minimized");

    }

    // Called when the Window is originally created
    public void windowOpened(WindowEvent arg0) {
        //textArea1.append("Let there be Window!");
        Calendar OlCDateTime = Calendar.getInstance();
         _openTime = OlCDateTime.getTimeInMillis();
        //System.out.println(_openTime);

    }

}


private class MyAdjustmentListener implements AdjustmentListener {

    public void adjustmentValueChanged(AdjustmentEvent arg0) {
        AdjustmentEvent scrollBar1;
        //System.out.println(scrollBar1.getValue()));

    }

}

  public void paint(Graphics g) {
        //super.paint(g);
          frame2.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.RED);
        g2d.fill(ball);
        System.out.println("Calling fill()");
      }

  protected void moveBall() {
        //System.out.println("I'm in the moveBall() function!");
        int width = getWidth();
        int height = getHeight();
        int min, max, randomX, randomY;
        min =200;
        max = -200;
        randomX = min + (int)(Math.random() * ((max - min)+1));
        randomY = min + (int)(Math.random() * ((max - min)+1));
       //System.out.println(randomX + ", " + randomY);

        Rectangle ballBounds = ball.getBounds();
        //System.out.println(ballBounds.x + ", " + ballBounds.y);
        if (ballBounds.x + randomX < 0) {
            randomX = 200;
        } else if (ballBounds.x + ballBounds.width + randomX > width) {
            randomX = -200;
        }
        if (ballBounds.y + randomY < 0) {
            randomY = 200;
        } else if (ballBounds.y + ballBounds.height + randomY > height) {
            randomY = -200;
        } 

        ballBounds.x += randomX;
        ballBounds.y += randomY;
        _ballXpos = ballBounds.x;
        _ballYpos = ballBounds.y;
        ball.setFrame(ballBounds);
      }



      public void start() {
        moveBallTimer.start();
      }

      public void stop() {
        moveBallTimer.stop();
      }

      private class ListenForMouse implements MouseListener{

            // Called when the mouse is clicked
            public void mouseClicked(MouseEvent e) {
                //System.out.println("Mouse Panel pos: " + e.getX() + " " + e.getY() + "\n");
                if (e.getX() >=_ballXpos && e.getX() <= _ballXpos + 25 && e.getY() <=_ballYpos && e.getY() >= _ballYpos - 25 ) { 
                    System.out.println("TRUE"); 
                }
            System.out.println("{e.getX(): " + e.getX() + " / " + "_ballXpos: " + _ballXpos + " | " +  "{e.getY(): " + e.getY() + " / " + "_ballYpos: " + _ballYpos);

            }

            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }
                }
            //    System.out.println("e.getX(): " + e.getX() + " / " + "_ballXpos: " + _ballXpos);



            // Mouse over
            public void mouseEntered(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            // Mouse left the mouseover area:
            public void mouseExited(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            public void mousePressed(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }



    }

Could anyone tell me what I need to do to get repaint() to call the paint() method in the above program? I’m assuming the multiple frames is causing the problem, but that’s just a guess. Thanks.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T12:53:23+00:00Added an answer on June 13, 2026 at 12:53 pm

    You should not paint directly on JFrame. JPanel or extension of JComponent should be used. For painting override paintComponent() rather than paint(). Don’t forget to call super.paintComponent(g);.

    Also, keep in mind that repaint() only schedules component update, it does not trigger immediate paint().

    For more details see Performing Custom Painting and Painting in AWT and Swing.

    For example you can apply the following changes. TestPanel will paint the ball.

    class TestPanel extends JPanel {
        @Override
      public void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            Graphics2D g2d = (Graphics2D) g;
            g2d.setColor(Color.RED);
            g2d.fill(ball);
          }
    }
    

    Then, update thePlacebo panel:

    JPanel thePlacebo = new TestPanel();
    

    Add repaint in moveBall():

    thePlacebo.repaint();
    

    Here is an example based on original code:

    package so;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Rectangle;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.Ellipse2D;
    import java.util.Random;
    
    import javax.swing.*;
    
    public class TestBall {
        private static void createAndShowUI() {
            final TestPanel panel = new TestPanel();
            panel.validate();
            JFrame frame = new JFrame("TestBall");
            frame.getContentPane().add(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(new Dimension(300, 300));
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
    
            ActionListener timerAction = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    panel.moveBall();
                }
            };
            Timer timer = new Timer(1000, timerAction);
            timer.setRepeats(true);
            timer.start();
        }
    
        static class TestPanel extends JPanel {
            public static int BALL_SIZE = 25;
            private Ellipse2D ball = new Ellipse2D.Double(0, 0, BALL_SIZE,
                    BALL_SIZE);
            Random rand = new Random();
    
            public TestPanel() {
                this.addMouseListener(new MouseAdapter() {
                    // Called when the mouse is clicked
                    public void mouseClicked(MouseEvent e) {
                        if (ball.contains(e.getPoint())) {
                            System.out.println("hit the ball");
                        }
                    }
                });
            }
    
            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
    
                Graphics2D g2d = (Graphics2D) g;
                g2d.setColor(Color.RED);
                g2d.fill(ball);
            }
    
            public void moveBall() {
                Rectangle ballBounds = ball.getBounds();
                ball.setFrame(ballBounds);
                ballBounds.x = rand.nextInt(getWidth() - BALL_SIZE + 1) + 1;
                ballBounds.y = rand.nextInt(getHeight() - BALL_SIZE + 1) + 1;
                ball.setFrame(ballBounds);
                repaint();
            }
        }
    
        public static void main(String[] args) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    createAndShowUI();
                }
            });
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

First off, let me start by saying, I know this exact question has been
Let me start off by saying I know this is probably not the correct
Let me start off by saying that this is my first time working with
Let me start off by saying, I'm not new to programming but am very
Let me start off by saying that I am completely new with WPF (this
Let me start off by saying Im VERY new to iphone development, but Im
Let me start off with some code. When the application loads, it calls the
Let me start off by saying I know how to use CausesValidation and ValidationGroup
Let me start off by saying that this is my first real Cocoa app.
Let me start off by saying that the code in question is part of

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.