Gostaria de ter uma resposta referente a parte graphics do java, eu conseguiria pintar alguma imagem em java sem utilizar os metodos paint() ou paintComponent() ??? e como faria isso?!
Graphics
12 Respostas
Olá Freak_266 
Não. Para pintar alguma imagem em Java é necessário sobrescrever o método paintComponent(); (dos componentes em geral) ou o método paint(); (do JFrame).
Não é uma tarefa difícil, basta somente você utilizar a API Java 2D
Também tem estes excelentes artigos no Ponto V por Vinícius Godoy de Mendonça.
Com o tempo (depois de você aprender com funciona a API
), se você gostar de ficar sobrescrevendo componentes e querer desenhar suas imagens sem arquivos externos segue fxg-to-java2d-converter
flw 
Boa sorte, qualquer coisa posta ai
Vi uma materia do Vinni de Godoy e parece que ele usa o grafico sem sobrescrever esses metodos e no livro Killer Game Programming in java, nao lembro de ter visto esses metodos.
Eis o link:
http://pontov.com.br/site/java/48-java2d/124-desenho-direto-active-rendering
Não li este livro :roll:
você precisa sobrescrever estes métodos para printar em um componente swing, acho que algum filho de Component (nem lembro se é essa mesma a classe, axo que é), para mecher direto em um imagem você não precisaria, seria só abri-la, editar o que precisa e fecha-la, usando ImageIO e BufferedImage por exemplo (googlando por exemplos de uso dessas classes deve ter muitos exemplos na net).
poxa, até que enfim, alguem ouviu minhas preces… todo mundo me falando que teria que usar o paint() ou paintComponent() para pintar imagens e eu me matando para pintar a tela… manda um exemplo, só para ver como funciona, acredito que terei que usar a classe Graphics?!
nessa pesquisa achei vários… reparei que precisa saber perguntar pro google tb…rs pro que você quer que seria abrir uma imagem ou re-salvar ela você precisa buscar a classe ImageIO, o que tem sentido, é ela que faz isso.
Eu queria pintar as imagens e não editar e salvar…
Eu só quero pintar sem usar o método paint() ou paintComponent()
o que eu faço:
de uma olha no método:
public void desenhaEvento(Graphics g,int posX,int posY, CarregarImagens ima,
int pWidth, int pHeight) {
String s;
System.out.println("posX: " + posX + "posY: " + posY);
System.out.println("pWidth: " + pWidth + "pHeight: " + pHeight);
if(Janela1.ehEvento) {
for(int i = 0; i <=20;i++) {
if(((posX >= x1[i])&&(posX <= x1[i] + 90))&&
((posY >= Janela1.y1[i])&&(posY <= Janela1.y1[i] + 90))){
if(xis2 < pWidth -100) {
s = (String)ima.id.get(i);
nome2[i] = ima.getImage(s, i);
g = nome2[i].getGraphics();
g.drawImage(nome2[i], xis2 ,pHeight-150,null);
xis2 = xis2 + 100;
Janela1.ehEvento = false;
}
}
}
}
}
Por que a imagem não é pintada, se eu estou passando o contexto gráfico para Graphics
g = nome2[i].getGraphics();
não sei se essa informação é relevante, porém o desenho esta dentro de um JPanel que foi utilizado para pintar imagens dentro de um paintComponent a ideia do método que passei anteriormente é para pintar a imagem utilizando um evento de mouse…
Vamos meter uma coisa na sua cabeça - normalmente você não “pinta” diretamente um Graphics no seu evento de botão. O que se faz, normalmente, é o seguinte:
Você sobreescreve o método paintComponent (que recebe um Graphics, e que na verdade você faz um cast para Graphics2D), e faz com que ele ou copie uma BufferedImage para a tela (onde você vai pintar as coisas que você quer desenhar), ou então faz com que o paintComponent pegue alguma estrutura de dados que você criou na sua classe, e a redesenhe.
Isso é feito porque a cada vez que sua janela é minimizada, maximizada, ou então alguma coisa sobrepõe a sua janela, é necessário efetuar o redesenho - o Windows, o MacOSX, o Linux sempre trabalham desse jeito, eles não deixam uma cópia dos dados da janela para cada janela - ela deve ser repintada a cada vez que você tem alguma modificação na janela (incluindo uma minimização ou então alguma sobreposição, que em tese não deveriam afetar seu desenho).
Veja o site PontoV para ver como é que isso é feito.
normalmente ou sempre?!
O que vc está me dizendo é que sou obrigado a utilizar o paintComponent ou o paint para pintar imagens na tela!!!, agora, se eu não quiser utilizar esses métodos eu não conseguiria?!, pois para mim seria melhor não utilizar, pois a cada atualização de tela as imagens desaparecem… ou aparecesse numa coordenada além, existiria algum método que eu possa utilizar para não pintar as imagens quando eu maximizasse a janela?! pelo menos num evento de janela?!..