Search code examples
javavariablespaintcomponent

I can't figure out how to repaint with altered variables in paintComponent


int club_num = 0;
private int angle = 90;    
private int startX = 72;
private int startY = 329;
private double endX = startX + clublength * Math.sin(Math.toRadians(angle));
private double endY = startY + clublength * Math.cos(Math.toRadians(angle));

@Override
public void paintComponent( Graphics g ){
    super.paintComponent( g );
    g.setColor( Color.BLACK );
    g.drawLine( startX, startY, (int)endX, (int)endY ); //this is what i want to change
} 
public class Keys extends KeyAdapter {
    @Override
    public void keyPressed( KeyEvent e ){
        if ( e.getKeyCode() == KeyEvent.VK_LEFT ){
            club_num--; //ultimately changes endX and endY
            if (club_num < 0)
                club_num = club[0].length-1; //ultimately changes endX and endY
            repaint();
        }
        else if ( e.getKeyCode() == KeyEvent.VK_RIGHT ){
            club_num++; //ultimately changes endX and endY
            if (club_num > club[0].length-1)
                club_num = 0; //ultimately changes endX and endY
            repaint();
        }
    }
}

When the repaint() method is called after a button is pressed and a variable value changed, I want the line [g.drawLine( startX, startY, (int)endX, (int)endY )] to change depending on the updated variable parameters [endX and endY].


Solution

  • Found Answer!

    I added this to my script and changed the variables to just private double endX/endY, and added a timer object.

        public class TimerListener implements ActionListener {
          public void actionPerformed(ActionEvent e) {
               calcEndX( clublength, angle );
               calcEndY( clublength, angle );
          }
       }
    
       public void calcEndX( int clublength, int angle ){
           endX = startX + clublength * Math.sin(Math.toRadians(angle));
       }
       public void calcEndY( int clublength, int angle ){
           endY = startY + clublength * Math.cos(Math.toRadians(angle));
       }
        public double getEndX(){
           return endX;
       }
        public double getEndY(){
           return endY;
       }