Olá. Estou fazendo um caça palavras em Java, e gostaria de saber como que eu posso pintar uma linha nesse JButton.
No caso, dependendo da posição da palavra (horizontal, vertical, diagonal), a linha ficaria em uma posição diferente. Ja procurei muito, mas não consegui achar nenhum exemplo assim, só mudando o bg do botão.
Ta dando um problema ai, porque não consigo acessar as variaveis x1, y1, x2 e y2 no metodo paint. Essa pra mim seria a solução ideal. Como eu posso acessar essas variaveis?
fernando
Poderia ser uma solução, mas o problema é que os botões variam de tamanho. Não tem como ter um tamanho padrao pra imagens.
dobau
Cria duas classes que extendam JButton, uma pode se chamar VerticalButton e outra HorizontalButton por exemplo, coloca aquele código que eu fiz para a horizontal e a veritical você faz o contrário, dependendo do tipo você instância ou uma ou outra classe, até porque você está criando um novo botão mesmo.
Lembra de implementar o método paintComponent e não o paint.
Arthur.hvt
Fiz esse método aqui pra riscar o botao dependendo da posição dele. Por enquanto só fiz ele pra vertical, depois eu implemento o resto. O problema é que não está pintando a linha
Lembra que teu botão pode crescer ou diminuir dependendo do layout que tu está utilizando, mas da forma que tu está implementando tua linha sempre teria o mesmo tamanho...
Arthur.hvt
dobau.
Coloquei aqui o setColor, e não deu certo ainda
E porque minha linha teria sempre o mesmo tamanho? Estou usando os x’s e y’s de acordo com o tamanho do meu botao.
Esse problema parece tão basico, mas enxe o saco --’
dobau
agora que reparei no seu código tu está instanciando um novo botão, sendo que tu está passando um outro botao como referencia... Esse é o problema, tu tem q desenhar a linha no botão e não na nova instância.
Eu implementaria assim, daí quando fosse para riscar botao eu chamaria botao.riscar( posicao );
publicclassBotaoCacaPalavrasextendsJButton{privatebooleanriscado=false;privateintposicao=0;publicBotaoCacaPalavras(Stringtext){super(text);}@OverrideprotectedvoidpaintComponent(Graphicsg){super.paintComponent(g);if(riscado){g.setColor(Color.BLACK);// FAZ AQUI O CALCULO COM BASE NA POSICAO E PRONTOg.drawLine(0,this.getHeight()/2,this.getWidth(),this.getHeight()/2);}}publicvoidriscar(intposicao){this.posicao=posicao;this.riscado=true;this.repaint();}publicvoidlimpar(){this.riscado=false;this.repaint();}}
PS: Lembra que tu deve trocar a classe das palavras que antes eram JButton para BotaoCacaPalavras
Margel_Douglas
Cara montei uma classe ai pra ti que extende JButton, mas com o recurso de traçar uma linha, tanto na horizontal quanto na vertical ou nas diagonais
acho que resolve o teu problema
o método “scratch” risca o botão, e vc passa por parâmetro a direção do tal risco
vc ainda pode setar a largura da linha e a cor dela com os métodos
setLineColor e setStroke
espero ter ajudado
Arthur.hvt
Margeu
PERFEITO CARA!! Funcionou perfeitamente! Muito obrigado!
Obrigado ao dobau também, me ajudou bastante aqui.
Agora vou estudar um pouco esse código aqui pra aprender melhor.