- package asd;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.imageio.ImageIO;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import java.math.*;
- public class Transforms2D extends JPanel {
- private class Display extends JPanel {
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 = (Graphics2D) g;
- g2.translate(300, 300); // Moves (0,0) to the center of the display.
- int whichTransform = transformSelect.getSelectedIndex();
- // // TODO Apply transforms here, depending on the value of whichTransform!
- // int[] xpoints = new int[5];
- // int[] ypoints = new int[5];
- //
- // for(int i = 1 ; i<=5;i++)
- // {
- // xpoints[i-1]= (int) (150*Math.sin((2*Math.PI/5)*i));
- // }
- //
- // for(int i = 1 ; i<=5;i++)
- // {
- // ypoints[i-1]= (int) (150*Math.cos((2*Math.PI/5)*i));
- // }
- // Polygon polygon = new Polygon(xpoints,ypoints,5);
- // g2.drawPolygon(polygon);
- switch (whichTransform) {
- case 0:
- g2.drawImage(pic, -200, -150, null);
- break;
- case 1:
- g2.scale(0.5, 0.5);
- g2.drawImage(pic, -200, -150, null);
- break;
- case 2:
- g2.rotate(Math.toRadians(45));
- g2.drawImage(pic, -200, -150, null);
- break;
- case 3:
- g2.scale(0.5, -1.0);
- g2.drawImage(pic, -200, -150, null);
- break;
- case 4:
- g2.shear(0.25,0);
- g2.drawImage(pic, -200, -150, null);
- break;
- case 5:
- g2.scale(1.0,0.5);
- g2.translate(0,-450);
- g2.drawImage(pic, -200, -150, null);
- break;
- case 6:
- g2.shear(0,-0.25);
- g2.rotate(Math.toRadians(90));
- g2.drawImage(pic, -200, -150, null);
- break;
- case 7:
- g2.scale(0.5,1.0);
- g2.rotate(Math.toRadians(180));
- g2.drawImage(pic, -200, -150, null);
- break;
- case 8:
- g2.rotate(Math.toRadians(30));
- g2.translate(50,100);
- g2.scale(1.0,0.5);
- g2.drawImage(pic, -200, -150, null);
- break;
- case 9:
- g2.rotate(Math.toRadians(180));
- g2.shear(0,0.25);
- g2.translate(-150,0);
- g2.drawImage(pic, -200, -150, null);
- break;
- }
- }
- }
- private Display display;
- private BufferedImage pic;
- private JComboBox<String> transformSelect;
- public Transforms2D() throws IOException {
- pic = ImageIO.read(new File("shuttle.jpg"));
- display = new Display();
- display.setBackground(Color.YELLOW);
- display.setPreferredSize(new Dimension(600, 600));
- transformSelect = new JComboBox<String>();
- transformSelect.addItem("None");
- for (int i = 1; i < 10; i++) {
- transformSelect.addItem("No. " + i);
- }
- transformSelect.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- display.repaint();
- }
- });
- setLayout(new BorderLayout(3, 3));
- setBackground(Color.GRAY);
- setBorder(BorderFactory.createLineBorder(Color.GRAY, 10));
- JPanel top = new JPanel();
- top.setLayout(new FlowLayout(FlowLayout.CENTER));
- top.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
- top.add(new JLabel("Transform: "));
- top.add(transformSelect);
- add(display, BorderLayout.CENTER);
- add(top, BorderLayout.NORTH);
- }
- public static void main(String[] args) throws IOException {
- JFrame window = new JFrame("2D Transforms");
- window.setContentPane(new Transforms2D());
- window.pack();
- window.setResizable(false);
- window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
- window.setLocation((screen.width - window.getWidth()) / 2, (screen.height - window.getHeight()) / 2);
- window.setVisible(true);
- }
- }