JImagePanel Towel

8 respostas
T

Boa noite a todos, pesquisei recentemente no forum como adicionar imagem em JPanel, e encontrei alguns tópicos a respeito, um deles e oque mais me ajudou foi um onde o ViniGodoy recomendou o uso de um complemento para netbeans, da Towel, eu baixei, a versão 1.1 onde diz claramente que o JImagePanel esta adicionado ao projeto, no entanto ao adicionar o componente não aparece nada relacionado a Jpanel :S, não sei se eu ou quem fez algum besteira mais segue o print pra vocês conferirem…gostaria da ajuda de vocês pra usar este componente em meu projeto, eu baixei um outro, UGComp, ele funciona, mais ele não centraliza a imagem no painel, eu gostaria de exibir a imagem no tamanho original mesmo que ultrapasse o limite do painel ;s, agradeço a atenção de todos um abraço!

8 Respostas

M

Eu acabei de verificar o Jar e a classe está lá sim.

Acho que o NetBeans que não está encontrando.

T

Estou usando a versõ 6.9.1 do netbeans, alguma idéia do porque isto pode estar acontecendo ? =/
Vou tentar pelo Linux mais tarde pra verificar se há algum problema na instalação ou configuração aqui ;s

M

Não tenho idéia de como o Netbeans funciona nessa parte.

Mas pelo que vi ali, a maioria daquelas classes não são “componentes” para ser adicionado na tela.

T

Boa noite!, Desculpa a demora, eu testei em outra instalação do NetBeans e aconteceu o mesmo, esse componente foi originalmente feito para Eclipse é isso? Alguém conseguiu usar o Tower-1.1.jar ai no netbeans? ;s

M

Ele é feito no Eclipse sim, mas acho que isso não devia fazer diferença, não tem nenhuma meneira de adicionar um componente manualmente na palheta do netbeans?

T
Boa tarde! Marky!, tem sim, achei um tópico aqui no GUJ que fala um pouco sobre isso, o problema é que eu estava pesquisando por componentes e na verdade se chama JavaBeans, eu criei uma classe com o código do JImagePanel, porém, pra poder adicionar como componente de paleta, os construtores não podem receber nenhum parâmetro, eu fiz a modificação e funcionou!, mais como o construtor não recebe uma Imagem e o método de desenhar a tela é chamado com BufferedImage = null, dava erro ao abrir, então coloquei IF e resolveu, segue abaixo o código, ja aviso que sou novo em OO rs.
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.TexturePaint;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/**
* A panel that contains a background image. The background image is
* automatically sized to fit in the panel.
*/
public class JImagePanel extends JPanel
{
    private BufferedImage image = null;
    private FillType fillType = FillType.RESIZE;

    /**
     * Creates a new panel with the given background image.
     *
     * @param img The background image.
     */
    public JImagePanel()
    {

    }

    /**
     * Changes the image panel image.
     *
     * @param img The new image to set.
     */
    public final void setImage(BufferedImage img)
    {
        if (img == null)
            throw new NullPointerException("Buffered image cannot be null!");

        this.image = img;
        invalidate();
    }

    /**
     * Changes the image panel image.
     *
     * @param img The new image to set.
     * @throws IOException If the file does not exist or is invalid.
     */
    public void setImage(File img) throws IOException
    {
        setImage(ImageIO.read(img));
    }

    /**
     * Changes the image panel image.
     *
     * @param img The new image to set.
     * @throws IOException If the file does not exist or is invalid.
     */
    public void setImage(String fileName) throws IOException
    {
        setImage(new File(fileName));
    }

    /**
     * Returns the image associated with this image panel.
     *
     * @return The associated image.
     */
    public BufferedImage getImage()
    {
        return image;
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();
        fillType.drawImage(this, g2d, image);
        g2d.dispose();
    }

    /**
     * Returns the way this image fills itself.
     *
     * @return The fill type.
     */
    public FillType getFillType()
    {
        return fillType;
    }

    /**
     * Changes the fill type.
     *
     * @param fillType The new fill type
     * @throws IllegalArgumentException If the fill type is null.
     */
    public void setFillType(FillType fillType)
    {
        if (fillType == null)
            throw new IllegalArgumentException("Invalid fill type!");

        this.fillType = fillType;
        invalidate();
    }

    public static enum FillType
    {
        /**
         * Make the image size equal to the panel size, by resizing it.
         */
        RESIZE
        {
            @Override
            public void drawImage(JPanel panel, Graphics2D g2d,
                    BufferedImage image)
            {
                if(image != null){
                    g2d.drawImage(image, 0, 0, panel.getWidth(), panel.getHeight(),
                        null);
                }
            }
        },

        /**
         * Centers the image on the panel.
         */
        CENTER
        {
            @Override
            public void drawImage(JPanel panel, Graphics2D g2d,
                    BufferedImage image)
            {
                if(image != null){
                    int left = (panel.getHeight() - image.getHeight()) / 2;
                    int top = (panel.getWidth() - image.getWidth()) / 2;
                    g2d.drawImage(image, top, left, null);
                }
            }

        },
        /**
         * Makes several copies of the image in the panel, putting them side by
         * side.
         */
        SIDE_BY_SIDE
        {
            @Override
            public void drawImage(JPanel panel, Graphics2D g2d,
                    BufferedImage image)
            {
                if(image != null){
                    Paint p = new TexturePaint(image, new Rectangle2D.Float(0, 0,
                            image.getWidth(), image.getHeight()));
                    g2d.setPaint(p);
                    g2d.fillRect(0, 0, panel.getWidth(), panel.getHeight());
                }
            }
        };

        public abstract void drawImage(JPanel panel, Graphics2D g2d,
                BufferedImage image);
    }
}

Pode criar a classe e usar este código ou segue o link do jar para netbeans
[url]http://www.mediafire.com/?3rltpvv5njgx29r[/url]

Caso alguém não saiba, para adicionar a classe como paleta, clica com botão direito em cima da classe, vai em ferramentas > Adicionar a paleta.

Muito obrigado pela ajuda e atenção Marky! Um abraço!
Pode fechar o tópico.

V

Era mais fácil ter testado contra null apenas uma vez, logo abaixo da linha 82.

T

Nossa, orbigado Viny!, arrumei aqui :smiley:

Criado 18 de fevereiro de 2011
Ultima resposta 22 de fev. de 2011
Respostas 8
Participantes 3