PDA

Visualizza la versione completa : [java] Immagini e bottoni awt


praioz
17-02-2005, 10:55
Ciao a tutti, ho un piccolo problema e per quanto mi sforzi non riesco a trovare una spiegazione/soluzione.
Sono riuscito a caricare delle immagini da un jar con l'oggetto Toolkit, il problema,penso, è quando richiamo l'oggetto ImageButton entra nel costruttore ma non riesce a recuperare le dimensioni delle immagini caricate.



protected void init() {
setSize(300,200);
addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent we) {
System.exit(0);
}
});

Image[] imgp = new Image[4];
Container contentPane = getContentPane();
JPanel p = new JPanel();

for(int i=0; i<4; i++) {
imgp[i] = Toolkit.getDefaultToolkit().createImage("it/praioz/image/babydonald0"+(i+1)+".gif");
}

for(int i=0; i<4; i++) {
System.out.print("imgp["+i+"] = " +imgp[i]);
System.out.println(" imgp["+i+"].getWidth(this) = " +imgp[i].getWidth(this) +"imgp["+i+"].getHeight(this)= "+imgp[i].getHeight(this) );
}

ImageButton imgButton = new ImageButton(imgp);
Button button = new Button("pippo");

ModelloTabella modello = new ModelloTabella();
JTable tabella = new JTable(modello);
JScrollPane scroll = new JScrollPane(tabella);

p.add( imgButton );
p.add( button );
p.setOpaque(true);
contentPane.add(p, "North");
contentPane.add(scroll, "Center");
pack();
doLayout();
}


qui sotto c'è la classe relativa alla costruzione del mio bottone




class ImageButton extends Button implements MouseListener {

Image[] img;
int select = 1;
int width = 0;
int height = 0;
int imgWidth, imgHeight;

public ImageButton(Image[] image) {
super(" ");
img = new Image[4];
img = image;
imgWidth = img[0].getWidth(this);
imgHeight = img[0].getHeight(this);
setSize(imgWidth, imgHeight);
addMouseListener(this);
}

public Dimension getPreferredSize() {
return new Dimension(imgWidth, imgHeight);
}

public Dimension getMinimumSize() {
return new Dimension(imgWidth, imgHeight);
}

public void setBounds(int x, int y, int width, int height) {
this.width = width;
this.height = height;
super.setBounds(x, y, this.width, this.height);
}

public void setSize(int width, int height) {
this.width = width;
this.height = height;
super.setSize(this.width, this.height);
}

public void setEnabled(boolean enable) {

if( enable )
select = 1;
else
select = 0;

repaint();
super.setEnabled(enable);
}

public void paint(Graphics g) {

g.drawImage(img[select], 0, 0, width, height, this);

}

public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) {
if(select != 0) {
select = 2;
repaint();
}
}

public void mouseExited(MouseEvent e) {
if(select != 0) {
select = 1;
repaint();
}
}

public void mousePressed(MouseEvent e) {
if(select != 0) {
select = 3;
repaint();
}
}

public void mouseReleased(MouseEvent e) {
if(select != 0) {
select = 2;
repaint();
}
}

}


un grazie a chiunque voglia aiutarmi!

LeleFT
17-02-2005, 11:28
Quello che non mi torna è l'istruzione


Container contentPane = getContentPane();

Questa è un'istruzione che viene utilizzata quando si fa uso di oggetti Swing e non AWT.
Se stai utilizzando degli oggetti Swing, allora il problema potrebbe essere dato dall'utilizzo
promisquo di componenti AWT e componenti Swing: mai mescolarli, altrimenti gli effetti
potrebbero essere indesiderati!!

Per il resto non ho notato, a prima vista, incongruenze... in questo momento non ho modo
di testare il tuo codice.


Ciao. :ciauz:

Andrea1979
17-02-2005, 11:38
perché fai

imgWidth = img[0].getWidth(this);
imgHeight = img[0].getHeight(this);

?

Prova a sostituire quei this con 2 null.

LeleFT
17-02-2005, 13:35
Originariamente inviato da Andrea1979
perché fai

imgWidth = img[0].getWidth(this);
imgHeight = img[0].getHeight(this);

?

Prova a sostituire quei this con 2 null.
Lo fa perchè il parametro richiesto da getWidth() e getHeight() è un oggetto di tipo ImageObserver. Button implementa questa interfaccia, quindi va benissimo così.


Ciao. :ciauz:

Loading