Graphics

12 respostas
F

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?!

12 Respostas

InicianteJavaHenriqu

Olá Freak_266 :smiley:

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 :smiley: ), se você gostar de ficar sobrescrevendo componentes e querer desenhar suas imagens sem arquivos externos segue fxg-to-java2d-converter

flw :smiley:

Boa sorte, qualquer coisa posta ai

F

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

InicianteJavaHenriqu

Não li este livro :roll:

maior_abandonado

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).

F

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?!

maior_abandonado

http://www.google.com.br/webhp?sourceid=chrome-instant&ie=UTF-8&ion=1&nord=1#hl=pt-BR&nord=1&sclient=psy-ab&q=exemplo+ImageIO&pbx=1&oq=exemplo+ImageIO&aq=f&aqi=&aql=&gs_sm=3&gs_upl=77324l78556l1l79019l7l7l0l0l0l0l379l2162l0.2.0.5l7l0&gs_l=hp.3...77324l78556l1l79019l7l7l0l0l0l0l379l2162l0j2j0j5l7l0&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=f6d1820dedb79f2e&ion=1&biw=1084&bih=569

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.

F

Eu queria pintar as imagens e não editar e salvar…

F

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;
		
								
								}
							}
					}
			}
	}
F

Por que a imagem não é pintada, se eu estou passando o contexto gráfico para Graphics

g = nome2[i].getGraphics();
F

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…

E

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.

F

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?!..

Criado 2 de março de 2012
Ultima resposta 5 de mar. de 2012
Respostas 12
Participantes 4