Ciao a tutti, devo realizzare un programmino in grafica con java, in cui appare un frame al cui interno sono situati due pannelli, uno in alto e uno in basso, in quest'ultimo ci sono 2 bottoni(quello a destra con l'immagine della freccia destra, quello a sinistra con un'immagine della freccia sinistra). Nel pannello più in alto invece c'è un JLabel costituito soltanto da un'immagine, tale JLabel deve muoversi a destra quando viene cliccato il pulsante destro e viceversa. Il problema è che non riesco a posizionare il JLabel dove vorrei, di default viene messo troppo in alto, ho provato a mettere il setLayout(null) sia del pannello che del JLabel e poi a passare le posizioni giuste con setLocation, ma non funziona, come mai?
Qui c'è la classe contente il metodo in cui provo a settare la posizione del JLabel
codice:import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.JLabel.*; import javax.swing.ImageIcon.*; public class PanelGame extends JPanel implements ActionListener { private final int spostamento=5; private Icon character; private int WIDTH=600; private int HEIGHT=500; private JLabel personaggio; private JButton lButton; public PanelGame() { //in questo metodo setto la posizione del JLabel setBackground(Color.BLUE); setPreferredSize(new Dimension(WIDTH,HEIGHT)); personaggio=new JLabel(new ImageIcon("SuperMario.png"), SwingConstants.CENTER); personaggio.setLayout(null); personaggio.setLocation(250,200); this.add(personaggio); } public void setLeftButton(JButton left){ lButton=left; } public void actionPerformed(ActionEvent event) { JButton sorgente=(JButton) event.getSource(); if(sorgente==lButton){ personaggio.setLocation(personaggio.getX()-20,personaggio.getY()); repaint(); } else{ personaggio.setLocation(personaggio.getX()+20,personaggio.getY()); repaint(); } } }
Se dovesse servire, qui c'è anche il resto del programma
Come mai non si modifica la posizione? E come posso fare? Grazie mille.codice:import javax.swing.*; import java.awt.event.*; import java.awt.*; import javax.swing.JLabel.*; public class PanelTasti extends JPanel{ private final int WIDTH=600; private final int HEIGHT=40; private Icon destra; private Icon sinistra; private final int wButton=100; private final int hButton=60; private final int xB=200; private final int yB=300; PanelGame pm; public PanelTasti(PanelGame pmmm) { setBackground(Color.WHITE); pm=pmmm; setPreferredSize(new Dimension(WIDTH,HEIGHT)); pm.setLeftButton(makeButton(new ImageIcon("frecciaSinistra.png"),xB,yB,wButton,hButton)); makeButton(new ImageIcon("frecciaDestra.png"),xB+wButton,yB,wButton,hButton); } public JButton makeButton(Icon aIcon, int x, int y, int width, int height){ JButton buton=new JButton(aIcon); buton.setLayout(null); buton.setContentAreaFilled(false); buton.setFocusPainted(false); buton.setBounds(x,y,width,height); add(buton); buton.addActionListener(pm); return buton; } } import javax.swing.*; import java.awt.*; public class Finestra extends JFrame{ public Finestra() { PanelGame panG=new PanelGame(); PanelTasti panT=new PanelTasti(panG); Container panelCont=getContentPane(); panelCont.add(panG,BorderLayout.NORTH); panelCont.add(panT,BorderLayout.SOUTH); } } import java.awt.*; import javax.swing.*; public class Test { public static void main(String[] args) { Finestra fin=new Finestra(); fin.setLocation(40,40); fin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fin.setTitle("CJ's got agility"); fin.setResizable(false); fin.pack(); fin.setVisible(true); } }
P.S. Non si può mandare più di un file in allegato(o non ne sono capace, dunque se doveste provarlo sui bottoni anziché caricare le freccie scrivete "destra" e "sinistra", il principio non cambia).

Rispondi quotando

