Duvida com SWING

15 respostas
Meth

Boa noite =D

Pessoal eu tava estudando Katy Sierra e tou me deparando com algumas duvidas...;
Eu consigo inserir um JButton numa JFrame...tudo tranquilo,mas ela mostra como criar o meu elemento grafico c/ uma jpg
atravez do metodo override paintComponent(),da classe JPanel...

Até aí tudo bem...o netbeans nao deu problelma nenhuma...tudo compilando nos conformes!!
So que eu dei frame.getContentPane().add(meuElemento) e quando dou F6 a poha da imagem nao aparece...
Se eu faço o outro exemplo que ela da do retangulo que voce cria via codigo....tb nao aparece!!
Bom,vou mandar o codigo logo abaixo de qualquer forma...

package cadeiras;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Main2 implements MouseListener {
String x = "->";
JButton button = new JButton("Click here!!");
JButton button2 = new JButton("Click em mim!!");
JFigura figura = new JFigura();
JFrame frame = new JFrame("Teste!!");


public static void main (String[] args) throws Exception{

Main2 that = new Main2();
that.frame.getContentPane().add(BorderLayout.CENTER,that.figura);
that.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
that.frame.setVisible(true);
that.frame.setSize(600,240);
that.button2.addMouseListener(that);
that.button.addMouseListener(that);
that.frame.getContentPane().add(that.figura);
}
}



package cadeiras;
import java.awt.*;
import javax.swing.*;
public class JFigura extends JPanel {

  @Override
 public void paintComponent(Graphics g){
String caminhoUNC = "smps.jpg";
      Image image =new ImageIcon(caminhoUNC).getImage();
g.drawImage(image,3,4,this);
  }
}

Bom quem puder ajudar eu ia ficar muitooooo grato!!! :D

Tava super feliz que finalmente ia sair da linha de comando e agora me deparo com esse problema...
Ahh se alguem tiver algum problema pra ler meu codigo,manda msg que respondo imediatamente!!Tou online ate umas 3:30 AM(04/11)

15 Respostas

G
Bom dia Meth, Cara seu código não está faltando nada? Por exemplo, você está implementando a interface MouseListener, mas em nenhum momento você implementou os métodos referentes a mesma. Outra coisa... você não adicionou os botões no seu frame. Comentei umas partes do seu código e adicionei algumas linhas. Verifique se é isto que estava esperando cmo resultado.
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Main2{// implements MouseListener {
String x = "->";
JButton button = new JButton("Click here!!");
JButton button2 = new JButton("Click em mim!!");
JFigura figura = new JFigura();
JFrame frame = new JFrame("Teste!!");


public static void main (String[] args) throws Exception{

Main2 that = new Main2();
that.frame.getContentPane().add(BorderLayout.NORTH,that.button);
that.frame.getContentPane().add(BorderLayout.SOUTH,that.button2);
that.frame.getContentPane().add(BorderLayout.CENTER,that.figura);
that.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
that.frame.setVisible(true);
that.frame.setSize(600,240);
//that.button2.addMouseListener(that);
//that.button.addMouseListener(that);
that.frame.getContentPane().add(that.figura);
}
}
import java.awt.*;
import javax.swing.*;
public class JFigura extends JPanel {

  @Override
 public void paintComponent(Graphics g){
String caminhoUNC = "smps.jpg";
      Image image =new ImageIcon(caminhoUNC).getImage();
g.drawImage(image,3,4,this);
  }
}
eu removi os packages para facilitar pra mim, mas não é necessário remover não. Abraços
ViniGodoy

Deixe a linha do setVisible(true); por último.

Meth

Tem muita coisa que eu tava testando aew…
antes de postar eu apaguei muita coisa…esqueci de tirar o implements =P

O que eu queria eh que a figura do JFigura aparecesse!!
coloquei o setVisible() no fim do codigo e nao mudou muita coisa…

Quando eu coloco:

public void paintComponent(Graphics g){ g.setColor(Color.orange); g.fillRect(20,50,100,100); }

Aparece um quadrado laranja normalmente…mas na classe JFigura que eu postei anteriormente no paintComponent() inseri
uma figura…,e o elemento grafico aparece em branco depois que adciono ele na JFrame O.o

Eu praticamente copiei o exemplo do livro de Katy Sierra…a diferença é que ela usou a foto de um gato!!!Mas enfim…
Entendo um pouco de html…coloquei o metodo pra pegar uma figura da mesma pasta
so que ele nao pega a figura!!!

Eu uso o netbeans :D,tem uma copia da imagem nas duas pastas(no desespero tentei tudo):

NetBeansProjects\Cadeiras\build\classes\cadeiras
NetBeansProjects\Cadeiras\src\cadeiras

public void paintComponent(Graphics g){  
String caminhoUNC = "smps.jpg";  
      Image image =new ImageIcon(caminhoUNC).getImage();  
g.drawImage(image,3,4,this);  
  }
ViniGodoy

Algumas dicas:

  1. Evite carregar a imagem toda vez que o paintComponent for chamado;
  2. Use o ImageIO.read e a classe BufferedImage, ao invés do ImageIcon. O ImageIcon é muito pouco eficiente;
  3. Lembre-se de chamar super.paintComponent(g);
  4. Lembre-se de copiar o contexto gráfico com create() e libera-lo com dispose(), se você for alterar alguma propriedade dele (cor, fundo, etc);
Meth

Entao como eu faria pra carregar a imagem no elemento grafico??

Meth

Newbie here :stuck_out_tongue:

Mas eu errei o que com o paintComponent acima???

ViniGodoy

Aparentemente nada. Só confirmando, faltou um “g.” ali na linha 4. Foi erro de copy&paste?

Você desenha com o BufferedImage do mesmo jeito que desenha com um Image. Isso pq o BufferedImage estende Image. :slight_smile:

ViniGodoy

Algumas perguntas:

  1. Você tem certeza que o Java foi capaz de encontrar sua imagem?
  2. A imagem tem que tamanho?
Meth
Ehh…

void CopyPaste(){

try{paste(copy())

}

catch(LerdezaException newbie){

this.CopyPaste();

}

}

:stuck_out_tongue:

Mas pq a imagem na aparece?Ao invez da imagem aparece uma figura branca O.o

Meth

Bom eu coloquei a imagem na mesma pasta dos arquivos .class e .java,existe mais algum criterio?
A imagem eh uma jpg e possui 190X90 pixels…

ViniGodoy

Zipa tudo e anexa aqui. Não deveria ter mais nenhum critério.

Meth

http://www.4shared.com/file/B_mqXhu2/Cadeiras.html

Ta aew =P
Ahh eu upei o codigo o paintComponent ta errado…mas é só colocar isso aew de baixo…

public void paintComponent(Graphics g){    
String caminhoUNC = "smps.jpg";    
     Image image =new ImageIcon(caminhoUNC).getImage();    
g.drawImage(image,3,4,this);    
}
ViniGodoy

Não tenho acesso ao 4shared aqui. Usa o attachment do GUJ mesmo. Tem um botão logo embaixo da área onde vc escreve para responder o tópico.

Meth

Nao sabia que tinha esse recurso!!Enfim…
Aproveitei e upei o arquivo com o codigo certo!!

ViniGodoy

Sem caminho está mesmo errado. Antes da imagem, faça:

try { System.out.println(new File(".").getCanonicalPath()); } catch (IOException ex) { }

Isso irá imprimir no console o caminho que a imagem deve ser colocada.
Provavelmente será a pasta Cadeiras, antes mesmo da pasta src.

Outra coisa. Faça indentação do código corretamente.
Seu código estava numa linha reta, e não há desculpas para deixa-lo assim.

Se você tem dúvida sobre como indentar, pressione ALT+SHIFT+F, ou clique com o botão direito sobre o código e clique em “Formatar”.

Segue em anexo seu projeto corrigido.

Criado 4 de novembro de 2010
Ultima resposta 5 de nov. de 2010
Respostas 15
Participantes 3