用JAVA语言写一个二维平面图形(如长方形)的平移,旋转,缩放的程序.

用JAVA语言写一个二维平面图形(如长方形)的平移,旋转,缩放的程序.最好在Myeclipse的环境下实现。

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.geom.*;

/**

 * @author Hardneedl

 */

class RectTransform extends JFrame {

    private static final Dimension minSize = new Dimension(300, 200);

    private static final Dimension maxSize = new Dimension(1024, 768);

    private static final Dimension preferredSize = new Dimension(600, 400);

    public Dimension getMaximumSize() {return maxSize;}

    public Dimension getMinimumSize() {return minSize;}

    public Dimension getPreferredSize() {return preferredSize;}

    public String getTitle() {return "Frame Title";}

    private AffineTransform af = new AffineTransform();

    private Stroke stroke = new BasicStroke(2.0f);

    private Rectangle rct = new Rectangle(40,140,200,140);

    private JComponent canvas = new JComponent(){

            protected void paintComponent(Graphics g) {

                super.paintComponent(g);

                g.setColor(Color.BLACK);

                g.fillRect(0,0,getWidth(),getHeight());

                Graphics2D g2d = (Graphics2D)g.create();

                g2d.setColor(Color.YELLOW);

                g2d.setTransform(af);

                g2d.setStroke(stroke);

                g2d.draw(rct);

                g2d.dispose();

            }

    };

    RectTransform() throws HeadlessException {

        init();

        doLay();

        attachListeners();

    }

    private void init() {

    }

    private void doLay() {

        Container container = getContentPane();

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER,30,5));

        panel.add(new JButton( new AfAction("move", AffineTransform.getTranslateInstance(100,100)) ));

        panel.add(new JButton( new AfAction("rotate", AffineTransform.getRotateInstance(Math.PI/3,40,120) ) ));

        panel.add(new JButton( new AfAction("zoomIn", AffineTransform.getScaleInstance(2,2)) ));

        panel.add(new JButton( new AfAction("ZoomOut", AffineTransform.getScaleInstance(.5d,.5d)) ));

        panel.add(new JButton( new AfAction("Original", new AffineTransform()) ) );

        container.add(panel,BorderLayout.NORTH);

        container.add(canvas,BorderLayout.CENTER);

        pack();

    }

    private void attachListeners() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    private class AfAction extends AbstractAction {

        private AffineTransform aff;

        private AfAction(String n,AffineTransform af) {

            super(n);

            this.aff = af;

        }

        public void actionPerformed(ActionEvent e) {

            af.setTransform(aff);

            if(canvas.isVisible()) canvas.paintImmediately(0,0,getWidth(),getHeight());

        }

    }

    public static void main(String[] args) {

        new RectTransform().setVisible(true);

    }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-23
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class LX3_3 extends Applet {
public void paint(Graphics g) {
g.setColor(Color.red);//设置红颜色
g.drawOval(35,35,100,60);//画椭圆(圆心、宽和高)
g.fillOval(200,15,60,100);//画具有填充色的圆
g.setColor(Color.blue);//设置蓝颜色
g.drawRect(20,130,80,80);//画矩形
g.fillRect(120,130,80,80);//画具有填充色的矩形
g.drawRoundRect(220,130,80,80,20,20);//画圆角矩形
g.fillRoundRect(320,130,80,80,20,20);//画具有填充色的 圆角矩形
}
}

该程序是在Myeclipse的环境下运行的
在二维平面内,画长方形等都只需要改变点的坐标即可实现平移,旋转,缩放
上面还加入了颜色,可供参考
水平有限,但希望对你有帮助本回答被提问者采纳
第2个回答  2010-05-23
同求!
相似回答