09. januar 2010 - 09:30
Der er
10 kommentarer og 1 løsning
lave punktet x om i denne applet
Hej Denne applet skal fremvise fotos af runde objekter med dekorationer rundt i kanten. Eksempelvis en porcelænstallerken. Den roterer fotoet når man klikker på knapperne. Jeg vil gerne have punktet X som der roteres om ændret, således at der man klikker på billedet centreres i appletten. Midten af appletten er også der som der skal roteres om. På den måde får men en "lige" rotering om det man skal kunne se på fotoet. Kan nogen lave denne ændring? :) import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public class ImageFunApplet extends JApplet { private double v; private int x; private int y; private String imgnam; private JLabel imgicn; public void init() { v = 0; x = getWidth()/2; y = getHeight()/2; imgnam = null; imgicn = null; getContentPane().setLayout(new BorderLayout()); JPanel rot = new JPanel(); rot.setLayout(new GridLayout(1, 4)); JButton clockfast = new JButton("Rotate ++"); clockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 5; update(); } }); rot.add(clockfast); JButton clock = new JButton("Rotate +"); clock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 1; update(); } }); rot.add(clock); JButton cclock = new JButton("Rotate -"); cclock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 1; update(); } }); rot.add(cclock); JButton cclockfast = new JButton("Rotate --"); cclockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 5; update(); } }); rot.add(cclockfast); JButton reset = new JButton("Reset"); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v = 0; x = getWidth()/2; y = getHeight()/2; update(); } }); rot.add(reset); getContentPane().add(rot, BorderLayout.SOUTH); update(); } public void setImage(String imgnam) { this.imgnam = imgnam; v = 0; x = getWidth()/2; y = getHeight()/2; update(); } private void update() { if(imgicn != null) { getContentPane().remove(imgicn); } if(imgnam == null) { imgicn = new JLabel(getBlankIcon()); } else { imgicn = new JLabel(getIcon()); } imgicn.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent ev) { x = ev.getPoint().x; y = ev.getPoint().y; update(); } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mousePressed(MouseEvent ev) { } public void mouseReleased(MouseEvent ev) { } }); getContentPane().add(imgicn, BorderLayout.CENTER); invalidate(); validate(); getContentPane().repaint(); } private ImageIcon getIcon() { ImageIcon imgicn = new ImageIcon(getClass().getClassLoader().getResource(imgnam)); BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); AffineTransform at = new AffineTransform(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); at.translate(x - imgicn.getIconWidth()/2, y); at.rotate(Math.toRadians(v), bi.getWidth()/2 - x + imgicn.getIconWidth()/2, bi.getHeight()/2 - y + imgicn.getIconHeight()/2); g2.drawImage(imgicn.getImage(), at, this); g2.transform(at); g2.dispose(); return new ImageIcon(bi); } private ImageIcon getBlankIcon() { BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); g2.dispose(); return new ImageIcon(bi); } }
Annonceindlæg fra SoftwareOne
15. april 2010 - 17:42
#1
Hva så, ingen bud? :)
17. april 2010 - 22:01
#2
Jeg har jo kigget på det en gang uden at kunne ramme præcist den effekt du ønsker.
18. april 2010 - 07:14
#3
yes, men er det fordi at jeg ikke kunne forklare mig ordentligt, eller er det pga., det for mig meget utænkelige, at du ikke ved hvordan man gør? :)
19. april 2010 - 02:52
#4
Jeg forstod ikke præcis hvilken effekt du ville have. Om jeg kan lave den effekt står indtil videre hen i det uvisse. Kunne du eventuelt lave en illustration i et tegneprogram ? Vi har udgangs billede, så klikker man i punkt (x,y) og roterer v grader og så har man et slut billede? Det var langt nemmere hvis du selv kunne muntre dig med AffineTransform !
19. april 2010 - 07:49
#5
19. april 2010 - 07:54
#6
1. Midten af appletten er omdrejningspunkt. 2. Der man klikker på billedet bliver til punktet X. 3. Når man klikker, rykkes billedet således at punktet X ligger i omdrejningspunktet. 4. Når man klikker på knappen ROTER, så forbliver punktet X i omdrejningspunktet. Således at kanten af tallerkenen kan studeres samme sted i appletten. Altså er det tallerkenens midtpunkt der roteres omkring.
19. april 2010 - 20:47
#7
Jeg maa proeve. Det lyder faktisk ikke saa svaert.
07. august 2011 - 16:39
#8
Hva så arne, er det en opgave for dig stadigvæk?
08. august 2011 - 03:01
#9
Hvordan virker: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; public class ImageFunApplet extends JApplet { private double v; private int dx; private int dy; private String imgnam; private JLabel imgicn; public void init() { v = 0; dx = 0; dy = 0; imgnam = null; imgicn = null; getContentPane().setLayout(new BorderLayout()); JPanel rot = new JPanel(); rot.setLayout(new GridLayout(1, 4)); JButton clockfast = new JButton("Rotate ++"); clockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 5; update(); } }); rot.add(clockfast); JButton clock = new JButton("Rotate +"); clock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v += 1; update(); } }); rot.add(clock); JButton cclock = new JButton("Rotate -"); cclock.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 1; update(); } }); rot.add(cclock); JButton cclockfast = new JButton("Rotate --"); cclockfast.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v -= 5; update(); } }); rot.add(cclockfast); JButton reset = new JButton("Reset"); reset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { v = 0; dx = 0; dy = 0; update(); } }); rot.add(reset); getContentPane().add(rot, BorderLayout.SOUTH); update(); } public void setImage(String imgnam) { this.imgnam = imgnam; update(); } private void update() { if(imgicn != null) { getContentPane().remove(imgicn); } if(imgnam == null) { imgicn = new JLabel(getBlankIcon()); } else { imgicn = new JLabel(getIcon()); } imgicn.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent ev) { dx = getWidth()/2 - ev.getPoint().x; dy = getHeight()/2 - ev.getPoint().y; update(); } public void mouseEntered(MouseEvent ev) { } public void mouseExited(MouseEvent ev) { } public void mousePressed(MouseEvent ev) { } public void mouseReleased(MouseEvent ev) { } }); getContentPane().add(imgicn, BorderLayout.CENTER); invalidate(); validate(); getContentPane().repaint(); } private ImageIcon getIcon() { ImageIcon imgicn = new ImageIcon(getClass().getClassLoader().getResource(imgnam)); BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); AffineTransform at = new AffineTransform(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); at.translate(dx, dy); at.rotate(Math.toRadians(v), getWidth()/2 - dx, getHeight()/2 - dy); g2.drawImage(imgicn.getImage(), at, this); g2.transform(at); g2.dispose(); return new ImageIcon(bi); } private ImageIcon getBlankIcon() { BufferedImage bi = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB); Graphics2D g2 = bi.createGraphics(); g2.setColor(Color.WHITE); g2.fillRect(0, 0, bi.getWidth(), bi.getHeight()); g2.dispose(); return new ImageIcon(bi); } }
07. april 2013 - 09:33
#10
hej arne, tusind tak for din tid og hjælp, du skal have point
20. april 2013 - 10:08
#11
lukker
Kurser inden for grundlæggende programmering