Newsgroup: it.comp.java
Titolo: Problema con Button in AWT

Ho necessità di creare un interfaccia grafica in una Applet utilizzando la
vecchia AWT.
So che se usassi Swing potrei inserire un'immagine su un JButton.... ma c'è
un modo per fare la stessa cosa con la classe Button? Non riesco proprio a
trovarlo!

Ci provo, così a memoria.
Ogni componente grafico ti può ridare il suo contesto grafico mediante la
chiamata "oggetto.getGraphics" che ti ritorna un oggetto di tipo "Graphics".
Grazie a questo oggetto, puoi : disegnare, scrivere, mettere immagini etc.
su un componente grafico.
Per mettere un'immagine su un componente grafico hai bisogno di :
        1 - Il suo componente grafico. Lo ottieni mediante la chiamata
"oggetto.getGraphics"
        2 - Un oggetto di tipo Image da passare al metodo che lo disegnerà
        3 - Un oggetto ImageObserver che non so a che serve, ma so come si
ricava.
                Basta farselo ridare dalla classe ImageIcon che anche quella
che usaerai per ricavare l'immagine e l'oggetto di tipo Image.
Quindi :
Button b = new Button();
    .........
    .........// aggiunta del bottone, impostazioni varie etc.
    .........
ImageIcon img = new ImageIcon(NomeFile);
ImageObserver imgObs = img.getImageObserver();
Graphics g = b.getGraphics();
g.drawImage(img, xPos, yPos, width, height,imgObs);
Prova dovrebbe funzionare................


sul libro java 1.1 della apogeo c'è in un esempio preprio quello che
cerchi tu anche se è nettamente più difficile che con le swing se ti
serve più tardi(ora devo studiare per la seconda prova!!) posso
cercare di fartelo avere
fammi sapere ciao Leo
" Il valore genera l’invidia nelle menti meschine e l’emulazione nelle anime grandi."
Henry Fielding


Il codice seguente disegna su
un bottone. Modificalo in modo da mostrare la tua immagine.
Ciao
Massimo
import java.awt.*;
public class Prova extends Panel{
public Prova(){
   super();
   Button b=new Button("Prova"){
    public
void paint(Graphics g){
      super.paint(g);
g.drawLine(0,0,30,30);
    }
   };
   add(b);
 }
 public static void
main(String[]s){
 Frame f=new Frame();
 f.add(new Prova());
 f.pack();
f.show();
 }
--------------------------------
Inviato via 
http://usenet.iol.it
 


ecco il codice : spero sia quello che ti serve permette di definire
sia l'immagine sul button sia il testo
import java.awt.*;
import java.net.URL;
public class ImageButton extends Component {
 
	private String label;
	private Image image;
 
	public ImageButton() {
		this(null, null);
	}
 
	public ImageButton(String label) {
		this(label, null);
	}
 
	public ImageButton(Image image) {
		this(null, image);
	}
 
	public ImageButton(String label, Image image) {
		this.label = label;
		this.image = image;
	}
 
	public String getLabel() {
		return label;
	}
 
	public Image getImage() {
		return image;
	}
 
	public void setLabel(String label) {
		if(!label.equals(this.label)) {
			this.label = label;
			repaint();
		}
	}
 
	public void setImage(Image image) {
		if(!image.equals(this.image)) {
			this.image = image;
			repaint();
		}
	}
 
	public void paint(Graphics g) {
		Color b = getBackground();
		Font f = g.getFont();
		Rectangle r = g.getClipRect();
 
		super.paint(g);
 
		// Draw the image.
		// Scale it so it fits in the clip rectangle and
centre it vertically.
		if(image != null && r.width>4 && r.height>4) {
			Dimension d = new
Dimension(image.getWidth(this), image.getHeight(this));
			float scale = 1;
			float fdwidth = (new
Integer(d.width)).floatValue();
			float frwidth = (new
Integer(r.width)).floatValue();
			float fdheight = (new
Integer(d.height)).floatValue();
			float frheight = (new
Integer(r.height)).floatValue();
			if((fdwidth*scale) > (frwidth*scale))
				scale = scale * (frwidth/fdwidth);
			if((fdheight*scale) > (frheight*scale))
				scale = scale * (frheight/fdheight);
			int ndwidth = (new Float(fdwidth *
scale)).intValue() - 4;
			int ndheight = (new Float(fdheight *
scale)).intValue() - 4;
			int yOffset = (r.height - ndheight) / 2;
			g.drawImage(image, 2, yOffset, ndwidth,
ndheight, this);
		}
 
		// Draw the label.
		// Centre it in the clip rectangle.
		if(label!=null) {
			FontMetrics fm = g.getFontMetrics();
			g.drawString(label, (r.width -
fm.stringWidth(label)) / 2, (r.height/2) + (fm.getAscent()/2));
		}
 
		// Draw the button bevel.
		// We need to draw the lines twice to make them
thicker.
		g.setColor(b.brighter());
		g.drawLine(0, r.height-1, 0, 0);
		g.drawLine(1, r.height-2, 1, 1);
		g.drawLine(0, 0, r.width-1, 0);
		g.drawLine(1, 1, r.width-2, 1);
		g.setColor(b.darker());
		g.drawLine(r.width-1, 0, r.width-1, r.height-1);
		g.drawLine(r.width-2, 1, r.width-2, r.height-2);
		g.drawLine(r.width-1, r.height-1, 0, r.height-1);
		g.drawLine(r.width-2, r.height-2, 1, r.height-2);
