Animacja na dodanym tle - obrazku

0

Hej :)

Wymyśliłam sobie zadanie no i się zawiesiłam
mianowicie:

Chcę zrobić animację (program symulujący rzut ukośny - czyli animacja wyliczana na podstawie danych podanych przez użytkownika i wzorów zakodowanych w programie) i to nie jest takie strasznie straszne. Ale...

Chcę by tłem za (czy pod) symulacją był jakiś obrazek. Ma to po prostu wyglądać tak że piłeczka sobie leci i np w tle jest kwiatek, plaża, góry cokolwiek.

Jak to zrobić? Gdy pytałam o różne rozwiązania jak 'nałożyć' symulację na takie tło, słyszałam o wykorzystaniu GlassPane lub np PaintComponent. Czytam sobie w internecie i jak na razie olśnienia nie mam, która z tych opcji jest ok a może jest jeszcze inna...

0

umieść panel na którym będziesz malował aplikację na panelu którego tłem będzie zdjęcie i voila

tylko panel z animacją niech ma przeźroczystość

0

GlassPane możesz używać tylko w komponentach ciężkich (tj. JFrame), panele tego nie mają. Na glassPane rysuje się np. w następujący sposób:

Component glass = getGlassPane();
Graphics gg = glass.getGraphics();
gg.setColor(Color.BLUE);
gg.drawRect(...);
0

jeśli chodzi o pierwszą odpowiedź : nie udaje się ustawienie przezroczystości - wyskakuje błąd.

jeśli chodzi o drugą odp :
walczę, a razie mam tak zdefiniowane panele :
//panel z tłem
JFrame f = new JFrame("GlassPane");
final JPanel Panel_2 = new JPanel(new BorderLayout());
add(Panel_2);
Panel_2.setBounds(200, 50, 750, 600);
Panel_2.setLayout(new BoxLayout(Panel_2, BoxLayout.PAGE_AXIS));
Panel_2.setBorder(new LineBorder(Color.darkGray, 1));
f.getContentPane().add(Panel_2);

//panel z symulacją
final JPanel Panel_5 = (JPanel) f.getGlassPane();
add(Panel_5);
Panel_5.setBounds(350, 170, 450, 360);
Panel_5.setLayout(new BoxLayout(Panel_5, BoxLayout.PAGE_AXIS));
Panel_5.setBorder(new LineBorder(Color.darkGray, 1));
Panel_5.setVisible(true);

niżej w programie do Panel_2 dodaje obraz, jako tło. i dodaję do Panel_5 wykres. ale : wygląda to tak jak na zamieszczonym obrazku. czyli jest tylko wykres i szare tło na około a już stwierdziłam , że może być wykres z białym tłem ale niech choć na około (zamiast szarego) będzie zdjęcie.

przeczytałam co napisałeś o JFrame,ale nie wiem chyba do końca co zmienić.. co da się zrobić?

0

ustawienie setOpaque na false i dodanie na tym dodatkowego panelu np tak:

//kod klasy pod panelem z animacja
class JImagePanel extends JPanel{

private final Image imga;

JImagePanel(ImageIcon img){

imga=img.getImage();    
repaint();

}


@Override
protected void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawImage(imga, 0, 0, getWidth(), getHeight(), this);
}
}


class JAnimationPanel extends JPanel{



JAnimationPanel (){



}


@Override
protected void paintComponent(Graphics g) {

   super.paintComponent(g);
   this.setOpaque(false);

//reszta animacji z jakąś zmienną która zmienia położenie kulki


   
}
}


.........


jip=new JImagePanel(new ImageIcon tralala )//tutaj daj zdjecie ktore ma byc tlem
jap=new JAnimationPanel();
jap.setOpaque(false)
jip.add(jap)

jeżeli dobrze napiszez rysowanie na jakiegoś np timera w klasie JAnimationPanel to na pewno wszystko będzie banglać. robię tak od lat przy rysowaniu dynamicznych wykresów i wszystko działa :)

pozdrawiam
Wojtek

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