import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

import javax.swing.JTextField;

class Point3D {
    public int x, y, z;

    public Point3D(int X, int Y, int Z) {
        x = X;
        y = Y;
        z = Z;
    }
}

class Edge { //klasa zdefiniowana do rysowania krawedzi
    public int a, b;

    public Edge(int A, int B) {
        a = A;
        b = B;
    }
}

public class Box3D extends Applet implements MouseListener, MouseMotionListener,ActionListener {

    double skala=4;
    JTextField skalaa;

    Button              
    b1 = new Button("Rysuj"), //guzik
    b2 = new Button("Przesuń"),
    b3 = new Button("Skaluj"),
    b4 = new Button("Obróć");

    private static final long serialVersionUID = 1L;
    int width, height;
    int mx, my;
    int przycisk=0;
    Image backbuffer;
    Graphics backg;

    int azimuth = 35, elevation = 30;

    Point3D[] vertices;
    Edge[] edges;

    public void init() {
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);

        b1.addActionListener(new B1()); //guzik
        add(b1); //guzik
        b2.addActionListener(new B2()); //guzik2
        add(b2); //guzik2
        b3.addActionListener(new B3()); //guzik3
        add(b3);
        skalaa= new JTextField ("1",4);
        //guzik od skalowania
        add (skalaa);
        b4.addActionListener(new B4()); //guzik4
        add(b4);
        /*    
        skalaa= new JTextField ("1",4);
        //guzik od skalowania
        add (skalaa);
         */

        setSize(1366, 768);
        width = getSize().width;
        height = getSize().height;
        vertices = new Point3D[8];
        vertices[0] = new Point3D(-1, -1, -1);
        vertices[1] = new Point3D(-1, -1, 1);
        vertices[2] = new Point3D(-1, 1, -1);
        vertices[3] = new Point3D(-1, 1, 1);
        vertices[4] = new Point3D(1, -1, -1);
        vertices[5] = new Point3D(1, -1, 1);
        vertices[6] = new Point3D(1, 1, -1);
        vertices[7] = new Point3D(1, 1, 1);

        edges = new Edge[12];
        edges[0] = new Edge(0, 1);
        edges[1] = new Edge(0, 2);
        edges[2] = new Edge(0, 4);
        edges[3] = new Edge(1, 3);
        edges[4] = new Edge(1, 5);
        edges[5] = new Edge(2, 3);
        edges[6] = new Edge(2, 6);
        edges[7] = new Edge(3, 7);
        edges[8] = new Edge(4, 5);
        edges[9] = new Edge(4, 6);
        edges[10] = new Edge(5, 7);
        edges[11] = new Edge(6, 7);
        backbuffer = createImage(width, height);
        backg = backbuffer.getGraphics();
        // drawWireFrame(backg);
        addMouseListener(this);
        addMouseMotionListener(this);
    }

    void drawWireFrame(Graphics g) {
        double theta = Math.PI * azimuth / 180.0;
        double phi = Math.PI * elevation / 180.0;
        float cosT = (float) Math.cos(theta), sinT = (float) Math.sin(theta);
        float cosP = (float) Math.cos(phi), sinP = (float) Math.sin(phi);
        float cosTcosP = cosT * cosP, cosTsinP = cosT * sinP, sinTcosP = sinT
            * cosP, sinTsinP = sinT * sinP;
        //skalowanie objetosci wgl dl bokow:
        Point[] points;
        points = new Point[vertices.length];
        double scaleFactor = width / skala;
        float near = 3;
        int i;
        float nearToObj = 1.5f;

        for (i = 0; i < vertices.length; i++) {
            int x0 = vertices[i].x;
            int y0 = vertices[i].y;
            int z0 = vertices[i].z;
            float x1 = cosT * x0 + sinT * z0;
            float y1 = -sinTsinP * x0 + cosP * y0 + cosTsinP * z0;
            float z1 = cosTcosP * z0 - sinTcosP * x0 - sinP * y0;
            x1 = x1 * near / (z1 + near + nearToObj);
            y1 = y1 * near / (z1 + near + nearToObj);
            points[i] = new Point((int) (width / 2 + scaleFactor * x1 + 0.5),
                (int) (height / 2 - scaleFactor * y1 + 0.5));

        }
        // draw
        g.setColor(Color.gray);
        g.fillRect(0, 0, width, height);
        g.setColor(Color.red);
        for (i = 0; i < edges.length; ++i) {
            g.drawLine(points[edges[i].a].x, points[edges[i].a].y,
                points[edges[i].b].x, points[edges[i].b].y);
        }

    }

    @Override
    public void mouseClicked(MouseEvent e) {

    }

    @Override
    public void mouseEntered(MouseEvent e) {

    }

    @Override
    public void mouseExited(MouseEvent e) {

    }

    public void actionPerformed(ActionEvent e)
    {
        Object source = e.getSource();
        if(source == b4)
        {
            przycisk=1;
        }

        if(source == b1)
        {
            drawWireFrame(backg);
            repaint();
        }

        if(source == b3)
        {
            skala=Double.parseDouble(skalaa.getText());
            drawWireFrame(backg);
            repaint();
        }
        if(source == b2)
        {
            przycisk=2;
        }

    }

    @Override
    public void mousePressed(MouseEvent e) {
        mx = e.getX();
        my = e.getY();
        e.consume();

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }

    @Override
    public void mouseDragged(MouseEvent arg0) { //FUNKCJA OBROT

        if(przycisk==1)
        {
            int new_mx = arg0.getX(), new_my = arg0.getY(); 
            azimuth -= new_mx - mx;
            elevation += new_my - my;
            drawWireFrame(backg);
            mx = new_mx;
            my = new_my;
            repaint();
            arg0.consume();
        }
        if(przycisk==2)
        {
            

        }
    }

    public void update(Graphics g) {
        g.drawImage(backbuffer, 0, 0, this);
        System.out.println("azimuth: " + azimuth + ", elevation: " + elevation);
    }

    public void paint(Graphics g) {
        update(g);
    }

    @Override
    public void mouseMoved(MouseEvent arg0) {

    }
    class B1 implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {   

        }

    }
    class B2 implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {   

        }

    }
    class B3 implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {   

        }

    }
    class B4 implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {   

        }

    }

}

Witam, mam pewien problem mianowicie chodzi mi o napisanie metody do przesuwania tego szescianu po x y. Po przeciagnieciu myszą powinien przemieszczać po całym oknie aplikacji.

Z góry dziękuje za pomoc.