2017-02-21 8 views
-2

вот код, нам нужно сделать соответствующее преобразование, когда мы выбираем от 1 до 9. Я сделал часть преобразования. Вам не нужно указывать точный код этого. Просто научите меня, как это сделать, или дайте простой пример. и объясните, почему. Большое спасибо.Я делаю домашнее задание графики 2D в java. и я сделал код преобразования. Но я не знаю, как позволить преобразованиям зависеть от «для цикла»

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.imageio.ImageIO; 
import java.awt.image.BufferedImage; 
import java.io.IOException; 

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(); 

     g2.rotate(Math.toRadians(45)); //picture 2 

     g2.scale(0.5,1); 
     g2.rotate(Math.toRadians(180)); //picture 3 

     g2.shear(0.05,0.5); //picture 4 

     g2.scale(2,1); 
     g2.translate(300,0);//picture 5 

     g2.shear(0.05,0.5); 
     g2.rotate(Math.toRadians(45)); //picture 6 

     g2.scale(0.5,1); 
     g2.rotate(Math.toRadians(180)); //picture 7 

     g2.scale(2,1); 
     g2.rotate(Math.toRadians(45)); 
     g2.translate(300,400); //picture 8 

     g2.rotate(Math.toRadians(180)); 
     g2.scale(1,2); 
     g2.translate(150,300); //picture 9 

    //these 8 transforms are what I did. but I don't know how to make them depending on the value of 'whichTransform' which comes from 'for loop' following. 


     // TODO Apply transforms here, depending on the value of whichTransform! 

     g2.drawImage(pic, -200, -150, null); // Draw image with center at (0,0). 
    } 
} 

private Display display; 
private BufferedImage pic; 
private JComboBox<String> transformSelect; 

public Transforms2D() throws IOException { 
    pic = ImageIO.read(getClass().getClassLoader().getResource("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); 
} 

}

ответ

0

Используйте переключатель case.Here является код моей домашней работы.

import com.sun.javafx.geom.transform.Affine3D; 
import com.sun.javafx.geom.transform.BaseTransform; 
import java.awt.*; 
import static java.awt.PageAttributes.MediaType.C; 
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.lang.Math; 
import javafx.scene.transform.Transform; 

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(); 
      switch(whichTransform){ 
          case 0: 
           g2.rotate(0); 
           break; 
          case 1: 
           g2.scale(0.5,0.5); 
           g2.rotate(0); 
           break; 
          case 2: 
           g2.scale(0.8, 0.8); 
           g2.rotate(Math.PI/4); 
           break; 
          case 3: 
           g2.scale(0.5,0.8); 
           g2.rotate(Math.PI); 
           break; 
          case 4: 
           g2.scale(0.8,0.8); 
           //g2.rotate(Math.PI/2); 
           g2.shear(0.5, 0); 
           break; 
          case 5: 
           g2.scale(0.8,0.4); 
           g2.translate(0,-600); 
           break; 
          case 6: 
           g2.scale(0.8, 0.8); 
           g2.rotate(Math.PI/2); 
           g2.shear(0.5,0); 
           break; 
          case 7: 
           g2.scale(0.5,0.8); 
           g2.rotate(Math.PI); 
           break; 
          case 8: 
           g2.scale(1.0,0.5); // 0.8 - urgunii urt, 0.4 - undriin urt 
           g2.translate(0,400); 
           g2.rotate(Math.PI/8); 
           break; 
          case 9: 
           g2.translate(185,0); 
           g2.shear(0,0.5); 
           g2.scale(0.6,0.7); 
           g2.rotate(Math.PI); 
           break; 
         } 
      // TODO Apply transforms here, depending on the value of whichTransform! 

      g2.drawImage(pic, -200, -150, null); // Draw image with center at (0,0). 
     } 
    } 

    private Display display; 
    private BufferedImage pic; 
    private JComboBox<String> transformSelect; 
     private File f; 

    public Transforms2D() throws IOException { 
     pic = ImageIO.read(new File("Image path")); 
     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); 
    } 

} 
+0

благодарит за вашу помощь – liumang