Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Incredibile cambio di posizione dell'icona di una JLabel

    Buon giorno ragazzi ho un problema talmente stupido ma allo stesso tempo importante per la buona riuscita del mio progetto universitario. Spiego la situazione e infine posterò il codice.

    Allora il mio problema è il seguente,fermo restando che ho creato quasi tutti la grafica del progetto con WindowBuilder, il plugin di eclipse, che fino ad ora non mi ha dato nessuno problema.

    Allora, ho creato un JPanel, dove all'interno ho impostato il layout GridBagConstraints, e ho inserito delle varie JLabel con icone all'interno delle celle create. Dopo di che mi sono accorto che la semplice JLabel offerta da java non mi basta per il mio scopo quindi ne creo uno io di sana pianta chiamata MyJLabel con le modifiche necessarie. Faccio la prova modificando una sola JLabel per provare se funziona ma inspiegabilmente, l'icona della MYJlabel si sposta dalla posizione originale. Di seguito un'immagine che chiarisce mille parole:

    http://img442.imageshack.us/img442/1687/vtl5.jpg

    come ben potete vedere la JLabel selezionata (quella con il contorno rosso) è quella creata con la MyJLabel, e come potete vedere l'oggetto è in quella posizione, mentre l'icona si trova erroneamente in alto a sinistra. Cosa c'è che non va?

    qui il codice della MYJlabel:

    codice:
    package graphic;
    
    import javax.swing.JLabel;
    
    public class MyJLabel extends JLabel{
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -1872587052032643152L;
    	int positionGridX;
    	int positionGridY;
    
    	public MyJLabel(){
    		super();
    
    	}
    
    	public void setX(int x){
    		positionGridX = x;
    	}
    
    	public void setY( int y){
    		positionGridY = y;
    	}
    
    	public int getX(){
    		return positionGridX;
    	}
    
    	public int getY( ){
    		return positionGridY;
    	}
    }
    e qui il frammento di codice del JPanel dove utilizzo la mia JLabel:

    codice:
    private void initialize(Giocatore campo [][],final Campionato c) {
    		this.setSize(700, 400);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		JPanel panel = new JPanel();
    		getContentPane().add(panel, BorderLayout.CENTER);
    		panel.setLayout(new BorderLayout(0, 0));
    		
    		JPanel panelScelte = new JPanel();
    		panel.add(panelScelte, BorderLayout.SOUTH);
    		panelScelte.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		
    		JButton btnStop = new JButton("Stop");
    		btnStop.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mouseClicked(MouseEvent e) {
    				//ferma la partita
    				c.setFerma(true);
    			}
    		});
    		panelScelte.add(btnStop);
    		
    		JButton btnRilancia = new JButton("Rilancia");
    		btnRilancia.setEnabled(false);
    		panelScelte.add(btnRilancia);
    		
    		JButton btnTira = new JButton("Tira");
    		panelScelte.add(btnTira);
    		
    		JButton btnPassaggio = new JButton("Passaggio");
    		panelScelte.add(btnPassaggio);
    		
    		JButton btnContrasto = new JButton("Contrasto");
    		panelScelte.add(btnContrasto);
    		
    		JButton btnSostituzioni = new JButton("Sostituzioni");
    		panelScelte.add(btnSostituzioni);
    		
    		JSplitPane splitPane = new JSplitPane();
    		panel.add(splitPane, BorderLayout.CENTER);
    		
    		JLabel visualizzainfopartita = new JLabel("");
    		splitPane.setRightComponent(visualizzainfopartita);
    		
    		panel_1 = new JPanel();
    		panel_1.setBackground(UIManager.getColor("OptionPane.questionDialog.border.background"));
    		splitPane.setLeftComponent(panel_1);
    		GridBagLayout gbl_panel_1 = new GridBagLayout();
    		gbl_panel_1.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    		gbl_panel_1.rowHeights = new int[]{0, 0, 0, 0, 0, 0};
    		gbl_panel_1.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    		gbl_panel_1.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
    		panel_1.setLayout(gbl_panel_1);
    		
    		MyJLabel lblDifensore = new MyJLabel();
    		lblDifensore.setIcon(new ImageIcon(FinestraPartita.class.getResource("/images/soccerSmall.png")));
    		lblDifensore.setName("");
    		lblDifensore.setEnabled(false);
    		GridBagConstraints gbc_lblDifensore = new GridBagConstraints();
    		gbc_lblDifensore.insets = new Insets(0, 0, 5, 5);
    		gbc_lblDifensore.gridx = 1;
    		gbc_lblDifensore.gridy = 1;
    		panel_1.add(lblDifensore, gbc_lblDifensore);
    		lblDifensore.setX(gbc_lblDifensore.gridx);
    		lblDifensore.setY(gbc_lblDifensore.gridy);
    cosa c'è che non và? grazie mille per la pazienza e buona giornata a tutti

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Incredibile cambio di posizione dell'icona di una JLabel

    Originariamente inviato da giupardeb
    codice:
    public class MyJLabel extends JLabel{
    
    	public void setX(int x){
    		positionGridX = x;
    	}
    
    	public void setY( int y){
    		positionGridY = y;
    	}
    
    	public int getX(){
    		return positionGridX;
    	}
    
    	public int getY( ){
    		return positionGridY;
    	}
    }
    Le proprietà "x" e "y" sono già usate nei componenti grafici del framework per rappresentare le coordinate x/y (in pixel) del componente.
    Nota: i componenti grafici hanno getX/getY ma non i setter setX/setY perché per il set di x/y è stato scelto di gestirli insieme tramite setLocation o setBounds.

    In sostanza: non dovresti fare l'override di getX/getY (e nemmeno mettere i relativi set) per rappresentare qualcosa di diverso dalle coordinate in pixel.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ti ringrazio per la risposta, spiego il perché della creazione dei metodi, mi servirebbe avere accesso a tutte le JLabel e sopratutto alle relative posizioni x e y che hanno nel GridBagConstraints, non mi interessa avere le coordinate x e y (in pixel) del componente, ma mi interessa avere accesso alle coordinate che hanno le JLabel nel GridBagConstraints, sapresti come fare ?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da giupardeb
    mi interessa avere accesso alle coordinate che hanno le JLabel nel GridBagConstraints, sapresti come fare ?
    get/setCellX o get/setGridX o get/setColonna (similare per y) o altro .... insomma un po' di inventiva.
    Ma non get/setX/Y
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    grazie per la dritta..ci ho pensato subito dopo che ho inviato la risposta xD poi ho dimenticato a scriverlo

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.