Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29

    [Java] Colorare con una texture un JButton

    Ciao a tutti, dovrei settare il background di un JButton con un'immagine. Ho provato ad usare setIcon ma poi non riesco a ridimensionare l'icona quindi l'unica cosa che mi è venuta in mente è estendere la classe Color in modo da metterci la mia immagine invece del colore rbg, è possibile? Se no potete consigliarmi qualcosa di meglio?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Con ridimensionare l'icona intendi dire che la finestra dell'applicazione ridimensionandosi aumenta o diminuisce la dimensione del JButton a cui hai settato l'icona giusto?

    Perché una soluzione a questo problema sarebbe imporre una dimensione fissa al JButton, a meno che non sia tua intenzione il lasciarlo ridimensionare a runtime.

    Per quanto riguarda estendere la classe Color, io non lo farei, di solito per usare immagini di background o fare in generale "custom painting" sui componenti si ridefinisce il metodo protetto paintComponent(Graphics g) dello stesso componente.

    Ho buttato giù qualche riga di codice per fare una prova:

    codice:
    import java.awt.*;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.*;
    public class ProvaRidimensiona extends JFrame
    {
    	public ProvaRidimensiona()
    	{
    		super("Test ridimensionamento");
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		getContentPane().add(new ImageButton("Click","Image.png"));
    		pack();
    		setLocationRelativeTo(null);
    	}
    	public static void main(String[] a)
    	{
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				new ProvaRidimensiona().setVisible(true);
    			}
    		});
    	}
    }
    class ImageButton extends JButton
    {
    	private BufferedImage image;
    	public ImageButton(String text,String imageSource)
    	{
    		super(text);
    		try{
    			image=ImageIO.read(ClassLoader.getSystemResource(imageSource));
    		}
    		catch(IOException e)
    		{
    			System.out.print("\nError while reading image");
    			System.exit(1);
    		}
    	}
    	@Override
    	protected void paintComponent(Graphics g)
    	{
    		super.paintComponent(g);
    		g.drawImage(image,0,0,null);
    	}
    }
    Come vedi il metodo paintComponent non fa altro che richiamare quello di base del JButton, e poi ci disegna sopra la tua immagine che hai passato al costruttore.
    Se però hai settato del testo al JButton come ho fatto io nell'esempio, il testo sarà coperto dall'immagine, quindi se questo è il caso devi pensare a qualcos'altro (se vuoi continuare su questo tipico approccio,Graphics ha anche metodi come drawString() etc...).

    Inoltre il drawImage che ho usato, scritto in questo modo, non fa altro che disegnare tutta la superficie dell'immagine che riesce, a partire dall'angolo in alto a sinistra.
    Se il bottone diventa più grande dell'immagine, vedrai il bordo dell'immagine comparire e il resto del bottone sarà "scoperto".

    Avendo tu parlato di texture immagino vorrai replicare un'immagine relativamente piccola per coprire tutta la superficie del bottone, in realtà basta un ciclo in cui ripeti il drawImage per tutta la larghezza/altezza del componente, comunque se vuoi in questo esempio del nostro andbin trovi qualcosa di molto simile per un pannello: https://github.com/andbin/java-examp...om-backgrounds

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29
    Esattamente quello che mi serviva, stavo facendo override di paint ma veniva bruttino, così è perfetto!! Grazie mille!!

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.