-2
這裏是代碼,我們需要做相應的變換,當我們從1到9中選擇。我已經完成了變換部分。你不需要告訴我這個的確切代碼。只是教我如何做到這一點,或舉一個簡單的例子。並解釋原因。非常感謝你。我正在做圖形2D在java中的作業。我已經完成了轉換代碼。但我不知道如何讓變換取決於'for循環'
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);
}
}
謝謝你的幫助 – liumang