Visualizzazione dei risultati da 1 a 10 su 10

Discussione: immagine in Jlabel

  1. #1

    immagine in Jlabel

    scusate ragazzi.. avrei un problema.
    In un JFrame, ho messo un JPanel e nel JPanel una JLabel.
    Ora in quest'ultima JLabel ho messo un 'immagine come sfondo.
    Fin qui tutto ok.
    Ora però se su quest'ultima JLabel aggiungo anche dei Bottoni, o JtextField, i bottoni non mi si vedono perchè oscurati dall'immagine. COme posso fare per visualizzare tuttu gli elementi sopra l'immagine?

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

    Re: immagine in Jlabel

    Originariamente inviato da kingincrimson
    Ora però se su quest'ultima JLabel aggiungo anche dei Bottoni, o JtextField, i bottoni non mi si vedono perchè oscurati dall'immagine. COme posso fare per visualizzare tuttu gli elementi sopra l'immagine?
    JLabel non è il componente più appropriato per fare da "contenitore" di altri componenti (nonostante tutti i componenti Swing siano tecnicamente dei java.awt.Container!!). Perché JLabel fa già una cosa molto specifica .... è una "etichetta" generalmente con testo e/o un Icon. Punto, tutto qui.

    Se vuoi un contenitore che mostri una immagine di sfondo e contenga altri componenti (disposti come, è un'altra questione), la soluzione è semplice e ne ho già parlato in passato sul forum: si estende JPanel (che è un pannello "generico"), si fa l'override di paintComponent(Graphics) e si disegna quello che si vuole. E il tuo pannello allo stesso tempo può fare, ovviamente, anche da "contenitore" di altri componenti. Che staranno fisicamente sopra il disegno fatto nel pannello.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ok.. grazie del consiglio.. il problema è che non saprei proprio come fare! sob

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da kingincrimson
    ok.. grazie del consiglio.. il problema è che non saprei proprio come fare! sob
    Miei Java Examples, vedi firma, sezione AWT/Swing - Graphics, esempio TiledBackground.java. È un pochino più complesso ma solo perché fa il "tiling" della immagine e permette di scegliere più immagini. Ma a te basta vedere come si estende JPanel.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    purroppo non riesco a riadattare il codice alle mie esigenze...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da kingincrimson
    purroppo non riesco a riadattare il codice alle mie esigenze...
    codice:
    class PannelloSfondo extends JPanel {
        private Image sfondoImg;
    
        public PannelloSfondo(Image sfondoImg) {
            this.sfondoImg = sfondoImg;
        }
    
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(sfondoImg, 0, 0, this);
        }
    }
    E questo sarebbe davvero il minimo.

    E se sei sicuro che la immagine "copra" sempre tutta la superficie del pannello, puoi anche eliminare la invocazione super.paintComponent(g).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    grazie mille.. scusa ma non sono molto pratico di GUI, però purtroppo mi vedo costretto a fare questa piccola cosa. Questa è quindi la classe che si occupa di disegnare lo sfondo giusto?
    Ora nella mia classe di partenza che estende JFrame e dove aggiungo bottoni, label e textarea, dovrei richiamare questa classe giusto? come? poi una cosa;sfondoimage dove lo dichiaro?

  8. #8
    la mia classe è questa:
    codice:
    package client;
    
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Rectangle;
    import java.awt.GridBagLayout;
    import javax.swing.JLabel;
    import java.awt.GridBagConstraints;
    import javax.swing.JButton;
    import javax.swing.JTextField;
    import javax.swing.ImageIcon;
    import java.awt.event.KeyEvent;
    
    public class ClientGUI extends JFrame {
    
    	private static final long serialVersionUID = 1L;
    	private JPanel jContentPane = null;
    	private JPanel sfondojPanel = null;
    	private JLabel userjLabel = null;
    	private static JTextField userjTextField = null;
    	private JButton okjButton = null;
    	private JLabel portjLabel = null;
    	private JTextField portjTextField = null;
    	
    	
    	private static String user;
    	private int port;
    	/**
    	 * This is the default constructor
    	 */
    	public ClientGUI() {
    		super();
    		initialize();
    		this.setVisible(true);
    
    	}
    
    	/**
    	 * This method initializes this
    	 * 
    	 * @return void
    	 */
    	private void initialize() {
    		this.setSize(326, 245);
    		this.setContentPane(getJContentPane());
    		this.setTitle("Client");
    		this.setLocation(400, 200);
    	}
    
    	/**
    	 * This method initializes jContentPane
    	 * 
    	 * @return javax.swing.JPanel
    	 */
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.add(getSfondojPanel(), null);
    		}
    		return jContentPane;
    	}
    
    	/**
    	 * This method initializes sfondojPanel	
    	 * 	
    	 * @return javax.swing.JPanel	
    	 */
    	private JPanel getSfondojPanel() {
    		if (sfondojPanel == null) {
    			
    			portjLabel = new JLabel();
    			portjLabel.setBounds(new Rectangle(50, 107, 48, 28));
    			portjLabel.setText("Port:");
    			portjLabel.setVisible(true);
    			userjLabel = new JLabel();
    			userjLabel.setBounds(new Rectangle(51, 62, 45, 25));
    			userjLabel.setText("User: ");
    			sfondojPanel = new JPanel();
    			sfondojPanel.setLayout(null);
    			sfondojPanel.setBounds(new Rectangle(0, 0, 321, 212));
    			sfondojPanel.add(userjLabel, null);
    			sfondojPanel.add(getUserjTextField(), null);
    			sfondojPanel.add(getOkjButton(), null);
    			sfondojPanel.add(portjLabel, null);
    			sfondojPanel.add(getPortjTextField(), null);
    		
    		}
    		return sfondojPanel;
    	}
    
    	/**
    	 * This method initializes userjTextField	
    	 * 	
    	 * @return javax.swing.JTextField	
    	 */
    	private JTextField getUserjTextField() {
    		if (userjTextField == null) {
    			userjTextField = new JTextField();
    			userjTextField.setBounds(new Rectangle(135, 61, 122, 27));
    		}
    		return userjTextField;
    	}
    	
    	public static String getUser(){
    		return user=userjTextField.getText();
    	}
    	
    
    	/**
    	 * This method initializes okjButton	
    	 * 	
    	 * @return javax.swing.JButton	
    	 */
    	private JButton getOkjButton() {
    		if (okjButton == null) {
    			okjButton = new JButton();
    			okjButton.setBounds(new Rectangle(113, 158, 106, 25));
    			okjButton.setText("Ok");
    			okjButton.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    					System.out.println("user: "+getUser());
    					System.out.println("user: "+getPort());
    					Client.Connetti(user);
    				}
    			});
    		}
    		return okjButton;
    	}
    
    	/**
    	 * This method initializes portjTextField	
    	 * 	
    	 * @return javax.swing.JTextField	
    	 */
    	private JTextField getPortjTextField() {
    		if (portjTextField == null) {
    			portjTextField = new JTextField();
    			portjTextField.setBounds(new Rectangle(136, 111, 122, 25));
    		}
    		return portjTextField;
    	}
    	
    	public int getPort(){
    		 return port=Integer.parseInt(portjTextField.getText());
    	}
    
    }  //  @jve:decl-index=0:visual-constraint="148,5"

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da kingincrimson
    Questa è quindi la classe che si occupa di disegnare lo sfondo giusto?
    Sì, e anche di fare da "contenitore" per altri componenti.

    Originariamente inviato da kingincrimson
    Ora nella mia classe di partenza che estende JFrame e dove aggiungo bottoni, label e textarea, dovrei richiamare questa classe giusto? come?
    Nel content-pane del JFrame ci dovresti aggiungere un oggetto PannelloSfondo e poi gli altri componenti li aggiungi dentro PannelloSfondo.

    Originariamente inviato da kingincrimson
    sfondoimage dove lo dichiaro?
    Devi passare al costruttore un oggetto Image. Cosa passi, intendo cioè quale variabile passi nella invocazione ... lo puoi stabilire tu, non necessariamente deve chiamarsi sfondoImg.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    ho fatto cosi ma zero risultati:
    codice:
    package client;
    
    import java.awt.Image;
    import java.awt.Toolkit;
    import javax.swing.JFrame;
    
    public class ClientGUI extends JFrame {
    
    	private static final long serialVersionUID = 1L;
    	
    	
    	private Sfondopanel sfondo;
    	private Image image;
    	/**
    	 * This is the default constructor
    	 */
    	public ClientGUI() {
    		super();
    		initialize();
    		this.setVisible(true);
    
    	}
    
    	private void initialize() {
    		this.setSize(326, 245);
    		java.net.URL url = ClassLoader.getSystemResource("C:\\Documents and Settings\\" +
    				"Matteo\\Documenti\\Immagini\\sfondoClient.jpeg");
    		image = Toolkit.getDefaultToolkit().getImage(url);
    		sfondo=new Sfondopanel(image);
    		this.setContentPane(sfondo);
    		this.setTitle("Client");
    		this.setLocation(400, 200);
    	}
    }  //  @jve:decl-index=0:visual-constraint="214,52"
    codice:
    package client;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Rectangle;
    
    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    
    class Sfondopanel extends JPanel {
        
    	private static String user;
    	private Image sfondoImg;
    	private JLabel portjLabel;
    	private JLabel userjLabel;
    	private JPanel sfondojPanel;
    	private JButton okjButton;
    	private JTextField portjTextField;
    	private int port;
    	private Object jContentPane;
    	private static JTextField userjTextField;
    
        public Sfondopanel(Image sfondoImg) {
            this.sfondoImg = sfondoImg;
        }
    
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(sfondoImg, 0, 0, this);
            this.add(getSfondojPanel(),null);
        }
        
        	/**
        	 * This method initializes sfondojPanel	
        	 * 	
        	 * @return javax.swing.JPanel	
        	 */
        	private JPanel getSfondojPanel() {
        		if (sfondojPanel == null) {
        			
        			portjLabel = new JLabel();
        			portjLabel.setBounds(new Rectangle(50, 107, 48, 28));
        			portjLabel.setText("Port:");
        			portjLabel.setVisible(true);
        			userjLabel = new JLabel();
        			userjLabel.setBounds(new Rectangle(51, 62, 45, 25));
        			userjLabel.setText("User: ");
        			sfondojPanel = new JPanel();
        			sfondojPanel.setLayout(null);
        			sfondojPanel.setBounds(new Rectangle(0, 0, 321, 212));
        			sfondojPanel.add(userjLabel, null);
        			sfondojPanel.add(getUserjTextField(), null);
        			sfondojPanel.add(getOkjButton(), null);
        			sfondojPanel.add(portjLabel, null);
        			sfondojPanel.add(getPortjTextField(), null);
        		
        		}
        		return sfondojPanel;
        	}
    
        	/**
        	 * This method initializes userjTextField	
        	 * 	
        	 * @return javax.swing.JTextField	
        	 */
        	private JTextField getUserjTextField() {
        		if (userjTextField == null) {
        			userjTextField = new JTextField();
        			userjTextField.setBounds(new Rectangle(135, 61, 122, 27));
        		}
        		return userjTextField;
        	}
        	
        	public static String getUser(){
        		return user=userjTextField.getText();
        	}
        	
    
        	/**
        	 * This method initializes okjButton	
        	 * 	
        	 * @return javax.swing.JButton	
        	 */
        	private JButton getOkjButton() {
        		if (okjButton == null) {
        			okjButton = new JButton();
        			okjButton.setBounds(new Rectangle(113, 158, 106, 25));
        			okjButton.setText("Ok");
        			okjButton.addActionListener(new java.awt.event.ActionListener() {
        				public void actionPerformed(java.awt.event.ActionEvent e) {
        					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
        					System.out.println("user: "+getUser());
        					System.out.println("user: "+getPort());
        					Client.Connetti(user);
        				}
        			});
        		}
        		return okjButton;
        	}
    
        	/**
        	 * This method initializes portjTextField	
        	 * 	
        	 * @return javax.swing.JTextField	
        	 */
        	private JTextField getPortjTextField() {
        		if (portjTextField == null) {
        			portjTextField = new JTextField();
        			portjTextField.setBounds(new Rectangle(136, 111, 122, 25));
        		}
        		return portjTextField;
        	}
        	
        	public int getPort(){
        		 return port=Integer.parseInt(portjTextField.getText());
        	}
    }
    PS GRAZIE PER LA PAZIENZA

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.