Eliscpe - 1 year ago 99

Java Question

I made a JSlider with Java that changes the angle the line needs to be slanted at.

`angle = new JSlider(SwingConstants.HORIZONTAL, 0, 180, 90);`

angle.setSize(300, 50);

angle.setLocation(650, 60);

angle.setPaintTicks(true);

angle.setPaintTrack(true);

angle.setMinorTickSpacing(10);

angle.setMajorTickSpacing(30);

angle.setPaintLabels(true);

angle.addChangeListener(this);

thepanel.add(angle);

I want the code to draw that line that implements the angle from the JSlider.

Here is my code:

`public void paintComponent(Graphics g){`

super.paintComponent(g);

int angle = intAngle;

Graphics2D graphics = (Graphics2D)g;

int startX = getWidth()/2;

int startY = getHeight()/2;

int length = 200;

int endX = startX + length * (int)Math.cos(Math.toRadians(angle));

int endY = startY + length * (int)Math.sin(Math.toRadians(angle));

graphics.drawLine(startX, startY, endX, endY);

}

What is the mathematics behind rotating a line given a value?

Answer Source

Step 1: Extend `JPanel`

and override `paintComponent()`

. You've mentioned you already do this step, but more info is available here.

Step 2: Get the value of your `JSlider`

into your `paintComponent()`

method.

Step 3: Add a listener to the `JSlider`

that tells your `JPanel`

to repaint itself whenever the value changes.

Step 4: Use basic trigonometry to figure out the X and Y coordinates of the line to draw, then draw it. It might look something like this:

```
public void paintComponent(Graphics g){
super.paintComponent(g);
int angle = getSliderValue(); //you have to implement this function
int startX = getWidth()/2;
int startY = getHeight()/2;
int length = 100;
int endX = startX + (int)Math.cos(Math.toRadians(angle)) * length;
int endY = startY + (int)Math.sin(Math.toRadians(angle)) * length;
g.drawLine(startX, startY, endX, endY);
}
```