Avatar billede Slettet bruger
30. september 2003 - 10:41 Der er 1 løsning

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 :-)
Avatar billede Slettet bruger
21. oktober 2003 - 13:28 #1
Hrmmm... jeg lukker dette spørgsmål, for det ser ikke ud som om jeg får noget svar :-|
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester