Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    30

    Come posizionare un Jlabel all'interno di un Pannello

    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).
    Immagini allegate Immagini allegate

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il LayoutManager è assegnato ed agisce sul contenitore, quindi va tolto dal contenitore, non dal contenuto.

    Un esempio:
    codice:
    public class MioPannello extends JPanel {
    
       private JLabel lbl;
    
       public MioPannello() {
          // tolgo il LayoutManager dal contenitore (il pannello)
          this.setLayout( null );   // il this è superfluo, l'ho messo per far capire a chi si riferisce
    
          lbl = new JLabel( ... );
    
          // Effettuo il posizionamento / dimensionamento della JLabel
          lbl.setBounds(10, 10, 120, 90);
    
          add( lbl );
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.