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
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);
}
}
Come mai non si modifica la posizione? E come posso fare? Grazie mille.
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).