Avatar billede martinm Nybegynder
23. april 2004 - 12:42 Der er 5 kommentarer og
1 løsning

JPanel og Images

Hej,

Jeg har et problem med at få billder og tekst vist på en tilfredsspillede måde i mit JPanel.

Jeg har en klasse, der arver fra JComponent og som indeholder tre JPanel. En med to Jlists, en med et JTree og et, der skal indeholde et billede med en tekst nedenunder billedet.

Jeg har prøvet at tilføje billdet til Jpanel'et både som et ImageIcon i et JLabel og ved at indkapsle det i nedenstående klasse, hvorefter et objekt af denne klasse blev adderet til mit ene JPanel instans.

Jeg har samme problem hver gang: Teksten til billedet kommer enten til at stå bag billedet eller til højre/venstre for billedet! Jeg har prøvet med flere layoutmanagers: Springlayout, Gridbaglayout, Gridlayout, Borderlayout og Flowlayoutl, men det vil bare ikke!

Her en klassen, der indkapsler et Image:

import java.awt.*;
import javax.swing.*;

public class ImageComponent extends JComponent {
    Image image;
    Dimension size;

    public ImageComponent(Image image) {
        this.image = image;
        MediaTracker mt = new MediaTracker(this);
        mt.addImage(image, 0);
        try {
            mt.waitForAll();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        size = new Dimension(image.getWidth(null),
                image.getHeight(null));
        setSize(size);
    }

    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, this);
        g.drawString("ssss", image.getWidth(null)/2, image.getHeight(null)); //Remove?
        System.out.println("PAINTING! ");
    }

    public Dimension getPreferredSize() {
        return size;
    }
}
Avatar billede _carsten Nybegynder
23. april 2004 - 13:27 #1
Prøv lige om ikke nedenstående løser problemet, LayoutManager er ligegyldig her, da du overrider paint()

        size = new Dimension(image.getWidth(),
                (image.getHeight() + 20 ); // 20 = liniens højde
        setSize(size);

    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, this);
        g.drawString("ssss", image.getWidth()/2, getHeight()); //Remove?
        System.out.println("PAINTING! ");
    }
Avatar billede martinm Nybegynder
23. april 2004 - 13:37 #2
Ja da! Dit kodeeksempel samt "g.drawString("ssss", image.getWidth(null)/2, image.getHeight(null)+20);" skriver teksten under billedet, som jeg gerne ville have, men hvordan laver jeg mon teksten fed og størrelse 20?
Avatar billede _carsten Nybegynder
23. april 2004 - 13:39 #3
g.setFont(new Font("Arial", Font.BOLD, 20));
Avatar billede _carsten Nybegynder
23. april 2004 - 13:39 #4
g.setFont(new Font("Arial", Font.BOLD, 20));
g.drawString("ssss", image.getWidth()/2, getHeight()); //Remove?
Avatar billede martinm Nybegynder
23. april 2004 - 17:33 #5
Glimrende det virker! 1000 tak!
Avatar billede martinm Nybegynder
23. april 2004 - 17:34 #6
Jeg skal vist studere APIet til Graphics og generelt Swing nærmere.
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

IT-JOB

Csis Security Group A/S

Junior Software Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Lead DevSecOps