Custom JLabel this at vise billede fra DB
Hejsa eksperter (hrmmm... det siger jeg faktisk næsten en gang om dagen)....Jeg er ved at lave en specialisering af et JPanel til at fremvise (preview'e) et billede (fra en database)... Problemet er som følger, billedet har den rette højde, men er lige akkurat Border+1px+Border bred, og det er jo noget skidt :-( ..... derfor poster jeg lige min kode nedenunder og så må i se om i kan hjælpe mig med at finde min fejl...:
class PreviewPanel extends JLabel
{ private MediaTracker mt;
private Image imageToShow;
private Image raw;
private String msgToDisplay = "...Der er ikke valgt noget billede...";
public PreviewPanel() {
super();
mt = new MediaTracker(this);
setBorder(BorderFactory.createLineBorder(Color.gray));
}
public void loadImage(byte[] data) throws InterruptedException {
// Clear GUI from information
fileSize.setText("");
txtHeight.setText("");
txtWidth.setText("");
// Load the picture (create an Image-object
msgToDisplay = "Billede indlæses...";
repaint();
Image raw = Toolkit.getDefaultToolkit().createImage(data);
mt.addImage(raw, 1);
mt.waitForAll();
double ratio = (double)raw.getHeight(this) / (double)getHeight();
// Update GUI from information
fileSize.setText((data.length/1024)+" KB");
txtHeight.setText(""+raw.getHeight(this));
txtWidth.setText(""+raw.getWidth(this));
// Get a scaled instance of the Image-object
msgToDisplay = "Billede bearbejdes...";
repaint();
Image temp = raw.getScaledInstance((int)(raw.getWidth(this) * ratio),
(int)(raw.getHeight(this) * ratio), Image.SCALE_SMOOTH);
mt.addImage(temp, 2);
mt.waitForAll();
// Show (paint) the scaled instance
imageToShow = temp;
repaint();
}
public void paint(Graphics g) {
super.paint(g);
if (imageToShow == null) {
Graphics2D g2 = (Graphics2D)g;
FontRenderContext frc = g2.getFontRenderContext();
Rectangle2D fontBounds = g.getFont().getStringBounds(msgToDisplay, frc);
int x = (int)((getWidth()-fontBounds.getWidth()) / 2);
int y = (int)((getHeight()-fontBounds.getHeight()) / 2);
g.drawString(msgToDisplay, x, y);
}
else {
int x = (int)((getWidth()-imageToShow.getWidth(this)) / 2);
int y = (int)((getHeight()-imageToShow.getHeight(this)) / 2);
g.drawImage(imageToShow, x, y, this);
}
}
}
På forhånd tak :-)
