ImageIcon - Rotate

0

Witam, mam taki oto kod:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.*;

public class gra extends JFrame implements ActionListener {

    JLabel tlo, kolo2;
    ImageIcon tlo_icon;
    ImageIcon kolo;
    JButton zakrec;
    Image buffer;

gra() 
{
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(null);
    setVisible(true);

    
    tlo_icon = new ImageIcon("tlo.jpg");
    tlo = new JLabel(tlo_icon);
    tlo.setBounds(0, 0, 800, 600);  

    kolo = new ImageIcon("kolo.png");

    kolo2 = new JLabel(kolo);
    kolo2.setBounds(10, 50, 400, 400); 
    
    zakrec = new JButton("Zakręć");
    zakrec.setBounds(370,50, 90, 20);
    
    zakrec.addActionListener(this);
    
    add(kolo2);
    add(zakrec);
    add(tlo);
    
   
    
     setSize(800, 600);
}




    public static void main(String[] args) {
    new gra(); 
    
    }
    

    
    public void actionPerformed(ActionEvent e) {
       Object o = e.getSource();
       if (o==zakrec)
       {
       } 
    }
    

  
 
public void paintComponent(Graphics g)    
{	  
Graphics2D g2d = (Graphics2D)g;	  
g2d.rotate (Math.toRadians(30),200,200);	  
g2d.drawImage(kolo.getImage(), 60, 60, this);	  
g2d.dispose();  


}   
    
  }

Nie wiem czy to jest poprawnie napisane, błędów nie ma. Chciałbym aby po wciśnięciu przycisku Zakrec uruchomiona została metoda PaintComponent w której powinno działać obracanie. Ale nie wiem jak to zrobić. Proszę o pomoc ale sensowną bo szukałem w Internecie informacji kilka godzin i wszędzie tyle nic niewarte krótkie porady ;/

0

Za bardzo nie wiem jak wprowadzić go w życie z ImageIcon. Nie chcę tutaj wymagać gotowca ale nie mógłby ktoś po prostu powiedzieć o mam zmienic w moim kodzie? Nie chce wszystkiego od zera robić...

0

a spróbuj z timerem, zmiana współrzędnych koła co jakiś czas i wszystko...

0

jakich współrzędnych? Ja chcę obrócić obraz a nie przenieść.

0

Imho, masz zupełnie złe podejście. W głównym oknie (JFrame) powinieneś jako komponent umieścić obiekt klasy dziedziczącej po JPanel (powiedzmy MojPanel). W klasie MojPanel nadpisujesz metodę paintComponent, oryginalny rysunek ("kolo.png") i tło ("tlo.jpg") rysujesz na panelu również metodą paintComponent().

0

Masz przykładowy kod (zmieniłem nazwy plików graficznych). Wielkość panelu jest dopasowana do użytego przeze mnie pliku tła.

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.util.*;
import java.io.*;
import javax.imageio.*;

public class gra extends JFrame implements ActionListener
{

    private JButton zakrec;
    protected boolean obroc=false;
    public gra()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        zakrec = new JButton("Zakręć");
        zakrec.addActionListener(this);
        add(zakrec,BorderLayout.SOUTH);

        MojPanel panel=new MojPanel(this);
        add(panel,BorderLayout.CENTER);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }
    public static void main(String[] args)
    {
        new gra();
    }
    public void actionPerformed(ActionEvent e)
    {
        Object o = e.getSource();
        if (o==zakrec)
        {
            obroc=true;
            repaint();
        }
    }
}
//----------------------------
class MojPanel extends JPanel
{
    private gra parent;
    private BufferedImage tlo;
    private BufferedImage kolo;
    public MojPanel(gra parent)
    {
        this.parent=parent;
        setPreferredSize(new Dimension(705,406));
        try
        {
            tlo=ImageIO.read(new File("resources/ayers.jpg"));
            kolo=ImageIO.read(new File("resources/inherit.gif"));
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        if(tlo!=null)
        {
            g2d.drawImage(tlo,0,0,null);
        }
        if(parent.obroc)
        {
            g2d.rotate(Math.toRadians(30),200,200);
        }
        if(kolo!=null)
        {
            g2d.drawImage(kolo,322,60, this);
        }
        g2d.dispose();
    }
}
0

O i o to chodziło. Wielkie dzięki :) Jak widać lepiej na panelach pracować.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1