Pergunta

Eu estou tentando fazer um Java Applet que permita-me a desenhar uma estrutura de dados do gráfico em uma tela. Vou fazer isso clicando onde eu quero criar nós, e clicando os nós para conectá-los. O problema é que não pode obter o método paint() se comportar corretamente. Eu adicionar novos nós para o gráfico (e praças na tela) dentro do método mousePressed(MouseEvent e) usando,

Graphics g = this.getGraphics();
g.setColor(Color.blue);
g.fillRect(e.getX(), e.gety(), 40, 40);

Tudo funciona bem, até que eu redimensionar a janela e, em seguida, todos os retângulos encheram desaparecer. I overrided o método de pintura para apenas um método vazio, mas a mesma coisa ainda acontece. Eu não posso acrescentar comanda o fillRect pintura interior (), porque eu não sei o que existe retângulos até o usuário interage com ele usando o mouse.

Como posso usar g.fillRect() dentro dos métodos de ouvinte de mouse e fazê-los ficar?

Foi útil?

Solução

O problema é o lugar que você está desenhando não é persistente. A qualquer momento, você pode perder tudo o que você atraído por ela. O método paint (Graphics) é chamado quando isso acontece. Você ou necessidade de redesenhar toda a imagem cada vez que isso acontece, ou você vai precisar reservar uma tela para desenhar e copiar o conteúdo para Gráficos da sua aplicação, conforme necessário.

Veja como criar e desenhar a uma imagem:
http://java.sun.com/docs/books/tutorial/2d/images/drawonimage.html

Então, em seu método de pintura, use o método Graphics drawImage (...) para exibir a imagem que você criou.

Outras dicas

Eu não sei se eu estou lendo isso corretamente, mas porque não basta armazenar a localização do último clique em uma variável a ser pintada mais tarde, quando o método paint () é chamado?

Você tem que substituir o ouvinte janela de ação de redimensionamento e chamada dentro repaint dele.

O Graphics é temporária. Quando uma região fica suja, ela será pintada novamente.

A melhor maneira é criar um BufferedImage, pintar a ele em mousePressed e repintar chamada.
Quando a tinta é chamado, desenhar a imagem para o objeto Gráficos passou. Desta forma, você não precisa armazenar a retângulos e você tem um tampão que irá melhorar o desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top