Permalänk

Java-uppgift

Hej!
Har en uppgift där en kvadrat skall rotera runt origo. Genom att trycka på knapparna vänster resp. höger skall kvadraten rotera.
Mitt problem ligger i att jag inte kan få knapparna att fungera, tanken är att när de trycks in skall startvinkeln ändras.
Här är koden:

import java.awt.*;
import javax.swing.*;
public class Square extends JPanel{
private int h = getHeight();
private int w = getWidth();
private int startvinkel = 15;
private double vinkel = (startvinkel * (Math.PI/180));

public Square() {
setBackground(Color.PINK);
}//konstruktor

public void paintComponent(Graphics pen) {
super.paintComponent(pen);
pen.setColor(Color.BLUE);
Polygon p = new Polygon();
if(getWidth() >= getHeight()){
int r = getHeight()/4;
int xled1 = (int)Math.round(r * Math.cos(vinkel));
int yled1 = (int)Math.round(r * Math.sin(vinkel));
int xled2 = (int)Math.round(r * Math.cos((Math.PI/2)-vinkel));
int yled2 = (int)Math.round(r * Math.sin((Math.PI/2)-vinkel));

p.addPoint((getWidth()/2) - xled1,(getHeight()/2) - yled1);
p.addPoint((getWidth()/2) + xled2,(getHeight()/2) - yled2);
p.addPoint((getWidth()/2) + xled1,(getHeight()/2) + yled1);
p.addPoint((getWidth()/2) - xled2,(getHeight()/2) + yled2);
p.addPoint((getWidth()/2) - xled1,(getHeight()/2) - yled1);
}
else {
int r = getWidth()/4;
int xled1 = (int)Math.round(r * Math.cos(vinkel));
int yled1 = (int)Math.round(r * Math.sin(vinkel));
int xled2 = (int)Math.round(r * Math.cos((Math.PI/2)-vinkel));
int yled2 = (int)Math.round(r * Math.sin((Math.PI/2)-vinkel));
p.addPoint((getWidth()/2) - xled1,(getHeight()/2) - yled1);
p.addPoint((getWidth()/2) + xled2,(getHeight()/2) - yled2);
p.addPoint((getWidth()/2) + xled1,(getHeight()/2) + yled1);
p.addPoint((getWidth()/2) - xled2,(getHeight()/2) + yled2);
p.addPoint((getWidth()/2) - xled1,(getHeight()/2) - yled1);
}

pen.fillPolygon(p);
}//paintComponent

public void rotateLeft() {
startvinkel = startvinkel + 5;
}//rotateLeft
public void rotateRight() {
startvinkel = startvinkel -5;
}//rotateRight

}//Square

Och här är testprogrammet:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ShowSquare extends JFrame implements ActionListener{
private JButton vänster, höger;
private Square rityta = new Square();

public ShowSquare (){
JPanel knappar = new JPanel();
knappar.setLayout(new GridLayout(1, 4, 10, 10));
vänster = new JButton("vänster");
vänster.addActionListener(this);
knappar.add(vänster);
höger = new JButton("höger");
höger.addActionListener(this);
knappar.add(höger);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(BorderLayout.CENTER, rityta);
getContentPane().add(BorderLayout.SOUTH, knappar);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}//konstruktor

public void actionPerformed(ActionEvent e){
if(e.getSource() == vänster)
rityta.rotateLeft();
if(e.getSource() == höger)
rityta.rotateRight();
rityta.repaint();
}//actionPerformed

public static void main(String[] args){
ShowSquare r = new ShowSquare();
r.setSize(400, 400);
r.setVisible(true);
}//main
}//ShowSquare

Permalänk
Medlem

1. Sätt kod inom [ code] kod [ /code] utan mellanslag för lättre läsning i forumet.

2. Se över hur du ändrar och använder vinkel och startvinkel i Square-klassen.