View Full Version : Java - Imagens para menu!


JomarC
23-01-2008, 17:12
Boas

Tenho uma duvida no netbeans!

Queria importar uma imagem para servir de background da minha janela.....alguem pode ajudar?


Cumps

Deixo aqui o codigo da minha janela:

public static void main(String[] args) {
JFrame janela= new Menu("Viaturas");
janela.setSize(400,300);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);
}


Agora so falta a imagem....

rj123
23-01-2008, 22:35
Deve haver varias maneiras. Sinceramente nunca fiz nada disso mas penso k podes fazer usando o Graphics
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics.html
public void imgFundo(Graphics g, ImageIcon img){
g.drawImage(img.getImage(), 0, 0, 300, 200, Color.BLUE, null);
super.paintChildren(g);
}

em k a tua class é um extend do JPanel

JomarC
23-01-2008, 23:27
Deve haver varias maneiras. Sinceramente nunca fiz nada disso mas penso k podes fazer usando o Graphics
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics.html
public void imgFundo(Graphics g, ImageIcon img){
g.drawImage(img.getImage(), 0, 0, 300, 200, Color.BLUE, null);
super.paintChildren(g);
}em k a tua class é um extend do JPanel

Desde ja um obrigado!

Pelo que tu me deste e fui fazer uma pesquisa no google e encontrei qualquer coisa como isto:

public class BackgroundImage extends JFrame
{
JScrollPane scrollPane;
ImageIcon icon;
Image image;

public BackgroundImage()
{
icon = new ImageIcon("???.jpg");

JPanel panel = new JPanel()
{



A minha questao é: ("??.jpg") é o caminho onde esta a imagem? ou dentro do jar e necessario por la a imagem?

Cumps

AliFromCairo
23-01-2008, 23:44
Podes fazer das duas maneiras. Tipicamente, acedes à imagem através da seguinte forma (assumindo que a imagem se chama "a.jpg" e se encontra na pasta images/):


getClass().getResource("images/a.jpg");

JomarC
23-01-2008, 23:46
Podes fazer das duas maneiras. Tipicamente, acedes à imagem através da seguinte forma (assumindo que a imagem se chama "a.jpg" e se encontra na pasta images/):


getClass().getResource("images/a.jpg");


Mas essa "images" que tas a falar ta onde especificamente? dentro da pasta do projecto?

AliFromCairo
23-01-2008, 23:55
Sim. O método getResource() vai procurar a imagem nos directórios e jars que estejam na classpath da tua aplicação.

JomarC
23-01-2008, 23:57
Sim. O método getResource() vai procurar a imagem nos directórios e jars que estejam na classpath da tua aplicação.

Ok! Obrigado vou tentar isso!

Ja agora...lol....e imagens para botoes e igual??

AliFromCairo
24-01-2008, 00:03
Penso que a classe JButton tem um construtor que recebe um Icon como argumento. Portanto sim, podes usar o mesmo método.

JomarC
24-01-2008, 16:21
Bem tentei mas nada! lol

package viaturas;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;

public class Main extends JFrame{


static JLabel label;
static Icon ic;

public Main() {
}

public static void main(String[] args){

JFrame janela= new Menu("Viaturas");
label=new JLabel();
String imagem="imagens/menu.jpeg";
ic=new ImageIcon(imagem);
label.setBounds(0,0,400,300);
label.setIcon(ic);
janela.add(label);
janela.setSize(400,300);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);
}

}

Nao aparece a imagem!!

AliFromCairo
24-01-2008, 17:24
Podes utilizar o método getResource() para obter a imagem (já tinha referido num post anterior):


Icon icon = new ImageIcon(getClass().getResource("imagens/menu.jpg"));
label.setIcon(icon);


No entanto, se quiseres invocar o método getResource() dentro de um método estático vais ter problemas, pois não podes utilizar o método getClass(). Para resolver esta situação podes utilizar algo do género: Menu.class.getResource("imagens/menu.jpg").

JomarC
24-01-2008, 19:29
ic=new ImageIcon(Menu.class.getResource("imagens/menu.jpg"));

Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
at viaturas.Main.main(Main.java:20)
Java Result: 1


Da me este erro...

AliFromCairo
24-01-2008, 19:35
Hmm, se puderes, coloca aqui o comando que estás a utilizar para compilar e a estrutura de pastas do projecto.

JomarC
24-01-2008, 20:37
Hmm, se puderes, coloca aqui o comando que estás a utilizar para compilar e a estrutura de pastas do projecto.

E simples

package viaturas;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;

public class Main extends JFrame{

static JLabel label;
static Icon ic;

public Main() {
}

public static void main(String[] args){
JFrame janela= new Menu("Viaturas");
label=new JLabel();
//String imagem="imagens/menu.jpeg";
ic=new ImageIcon(Menu.class.getResource("imagens/menu.jpg"));
label.setBounds(0,0,400,300);
label.setIcon(ic);
janela.add(label);
janela.setSize(400,300);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLO SE);
}

}

So quero por uma imagem neste frame...nao prexixo de por mais classes....

AliFromCairo
24-01-2008, 21:28
A estrutura das pastas do teu projecto é importante para determinar a string que deves utilizar para especificar o path da tua imagem.

Vou assumir que a pasta imagens/ não se encontra dentro da pasta viaturas/, pois caso contrário não devias ter o problema que mencionaste.

Se a tua estrutura de pastas for algo deste género:

/src
/viaturas
/imagesPodes usar isto (nota o / antes de "imagens", para indicar que é um caminho "absoluto"):


new ImageIcon(Menu.class.getResource("/imagens/menu.jpg"));.


Penso que assim deve funcionar, se a estrutura de pastas do teu projecto for semelhante à que coloquei acima. Experimenta e diz qualquer coisa.

JomarC
24-01-2008, 21:40
A estrutura das pastas do teu projecto é importante para determinar a string que deves utilizar para especificar o path da tua imagem.

Vou assumir que a pasta imagens/ não se encontra dentro da pasta viaturas/, pois caso contrário não devias ter o problema que mencionaste.

Se a tua estrutura de pastas for algo deste género:

/src
/viaturas
/imagesPodes usar isto (nota o / antes de "imagens", para indicar que é um caminho "absoluto"):


new ImageIcon(Menu.class.getResource("/imagens/menu.jpg"));.


Penso que assim deve funcionar, se a estrutura de pastas do teu projecto for semelhante à que coloquei acima. Experimenta e diz qualquer coisa.


A minha estrutura de pastas esta exactamente como a que tu mencionas te em cima...

Ja exprimentei e nada. Continua a dar o mesmo erro...

AliFromCairo
24-01-2008, 21:59
Bom, eu testei agora no meu portátil e a imagem aparece correctamente. Não usei o netbeans. Verifica se os nomes estão mesmo correctos, ou seja, se tens mesmo um ficheiro com o nome menu.jpg (case sensitive) e que este está dentro de uma pasta com o nome imagens. Caso esteja tudo correcto, o problema pode estar relacionado com o netbeans.

Se o problema estiver de facto relacionado com o netbeans, podes experimentar o seguinte: vai à pasta onde o netbeans guardou o teu projecto, procura a pasta src/ e copia a pasta imagens/ lá para dentro (apaga-a também do sítio onde estava anteriormente). Se estiveres o netbeans aberto, ele deve actualizar a tab "Projects", colocando um novo package com o nome "imagens" dentro do "Source Packages". Depois disto, experimenta fazer clean & build e correr aplicação de novo. O código para abrir a imagem mantém-se inalterado (i.e. Menu.class.getResource("/imagens/menu.jpg")).

JomarC
24-01-2008, 22:39
Dass!!

Finalmente! :p O problema nao tava na programaçao!

Desde ja um obrigado pelo tempo que gastas te a ajudar um noob!! lool

Cumps