ms2222

Mudar o aspecto de um botão? (cor,forma)

15 mensagens neste tópico

Boas...

Gostaria de saber se em java é possivel personalizar um botão. Por exemplo, eu queria um botão rectangular com os cantos arredondados de cor azul com a linha de contorno num preto mais carregado. É possível fazer isto? Já andei a ver na api mas não percebo muito daquilo. Alguém tem exemplos de código para estas opções?

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não tenho exemplo nenhum de como fazer isso, mas será fácil de encontrar se procurares no google por "create java look and feel" e por "java synth look and feel".

Em Java, alterar o aspecto de um botão pode ser feito de muitas maneiras:

  • podes implementar o teu próprio botão;
  • podes alterar os métodos de desenho de um botão;
  • podes implementar parte de um look and feel para os botões
  • podes usar o novo look and feel, o synth, e usar skins para definir o aspecto

A forma  a usar depende do projecto e do que pretendes fazer, mas talvez possas tentar ver o synth look and feel.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui fazer um botão mais ou menos como eu queria, contudo crio uma classe para criar o botão, mas quando chamo o metodo "criarbotao" na classe principal no applet o botão não aparece. O que estou a fazer mal? Se calhar é uma coisa simples, mas como eu sou iniciante em java não estou a perceber o problema.

Em baixo apresento o código. O que estou a tentar fazer é o jogo da forca, mas assim não está fácil. Se me puderem ajudar agradeço.

Classe principal:

import java.applet.*;


public class Forca extends Applet{

   public void init(){

       Botoes CriarBotoes = new Botoes();

       CriarBotoes.criarbotao(); // Aqui queria chamar o método para criar o botão

   }
}

Classe criar botão

import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;


public class Botoes extends JFrame{

   public void criarbotao(){

       JButton botao = new JButton();

       botao.setFont(new Font("Ravie", 1, 18));
       botao.setForeground(new Color(0, 0, 102));
       botao.setText(" A ");
       botao.setBorder(javax.swing.BorderFactory.createLineBorder(new Color(0, 0, 102), 3));
       botao.setRequestFocusEnabled(false);
       botao.setRolloverEnabled(false);
       botao.setMargin(new Insets(2, 1000, 2, 14));
       add(botao);
       System.out.printf("teste");

 }
}

Editado por Rui Carlos
GeSHi
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não adicionaste qualquer painel à JFrame nem estás a adicionar o botão ao painel base da JFrame, além disso não tens qualquer layout aplicado à JFrame.... espera, se estás a fazer applets para que estás a usar uma JFrame? E neste caso estás a criar os botões numa JFrame que nem está visível.

O código do botão está correcto, mas precisas de o adicionar ao elemento que está visível, pelo código que colocaste não estás a tornar a JFrame visível, além disso, se estás a usar Applets, então é na Applet que tens de adicionar o botão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É pah agora confundiste-me um bocado. Então deixa-me cá ver...Eu se colocar o código de criar botão directamente no applet o botão é criado normalmente, mas e se eu quiser criar um botão numa classe, qual então a melhor forma de o fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é o código do botão directamente na applet, mas um componente visual, para se tornar visível, tem de ser adicionado a um dos componentes de topo e neste caso será a applet. O método add() que estás invocar para adicionar o botão à JFrame, está a fazer add de um botão a um elemento que não está visível. Pelo menos é isso que parece com o código que colocaste.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, acho que já resolvi o problema do botão. o que eu fiz foi criar um metodo que retornasse uma variável do tipo JButton que posteriormente vai ser aplicada ao add na classe principal.

Contudo agora surgiu-me outro problema, coloquei uma imagem como imagem de fundo, contudo esta imagem sobrepõe-se e tapa-me o botão :wallbash:

Como é que eu agora ponho os botões e os restantes componentes que pretendo adicionar por cima da imagem de fundo?

O código actualmente encontra-se assim:

import java.applet.*;
import java.awt.Graphics;
import java.awt.Image;

public class Forca extends Applet{

   private Image ImagemFundo;
   Botoes CriarBotoes = new Botoes();

   public void init(){
       resize(660,370);

       add(CriarBotoes.criarbotao());
       ImagemFundo = getImage(getDocumentBase(),"Fundo.png");
   }

   public void paint(Graphics g){
       super.paint(g);
       g.drawImage(ImagemFundo,0,0,this);
   }
}

import java.awt.*;
import javax.swing.*;

public class Botoes{

JButton botao = new JButton();

   public JButton criarbotao(){

   botao.setFont(new Font("Ravie", 1, 18));
   botao.setForeground(new Color(0, 0, 102));
   botao.setText(" A ");
   botao.setBorder(javax.swing.BorderFactory.createLineBorder(new Color(0, 0, 102), 3));
   botao.setRequestFocusEnabled(false);
   botao.setRolloverEnabled(false);
   botao.setMargin(new Insets(2, 1000, 2, 14));

   return botao;
 }

}

Editado por Rui Carlos
GeSHi
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, acho que já resolvi o problema do botão. o que eu fiz foi criar um metodo que retornasse uma variável do tipo JButton que posteriormente vai ser aplicada ao add na classe principal.

Resolve o problema, assim tens o botão no elemento visível.

Contudo agora surgiu-me outro problema, coloquei uma imagem como imagem de fundo, contudo esta imagem sobrepõe-se e tapa-me o botão

Troca a ordem das linhas que tens, desenha a imagem antes de invocares o super.paint(g). Convém colocares o fundo da Applet como não opaco, setOpaque(false), para que a imagem apareça.

Como nota, o teu código funciona mas está um pouco confuso e algo desorganizado. Não faz sentido teres uma classe só para criar os botões, podes ter o método que cria os componentes gráficos dentro da classe que representa a tua applet. A classe Botoes é inútil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tinhas razão, trocando a ordem das linhas a imagem já aparece.  :thumbsup:

Já agora, e não querendo abusar tenho mais uma questão, no final a aplicação irá ter que correr como applet e stand-alone, é necessário alguns cuidados na programação do apple para depois correr como stand alone?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As Applets não correm em stand-alone, correm sempre dentro de um browser, pelo menos na sua forma normal. Se queres uma aplicação desktop tens de fazer uma, isso implica refazer a interface para deixar de usar Applet e passar a usar JFrame, ou passares tudo para JavaFX e assim teres apenas uma aplicação.

O melhor é mesmo teres duas versões, uma Applet e uma versão desktop.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem, cá estou eu mais uma vez, com mais uma dúvida. Como não tive tempo para fazer as duas versões, uma para applet e outra para desktop, acrescentei uma classe que cria um frame para executar o programa em stand-alone. Tudo funciona bem, com excepção da imagem de fundo, que tapa os componentes do jogo. A minha questão é de como ponho a label que contem a imagem, em background, com as strings e componentes em cima desta.

Obrigado...

Deixo em baixo o código do frame:

import java.awt.*;
import java.net.*;
import java.applet.*;
import javax.swing.* ;
import java.awt.event.*;

public class ForcaFrame extends JFrame{

   GraphicsConfiguration gc = null;
Rectangle bounds = null;
ClassLoader cl = null;
JLabel tela = null;

public ForcaFrame(String titulo) {
	super(titulo);
	gc = this.getGraphicsConfiguration();
	bounds = gc.getBounds();
	cl = getClass().getClassLoader();
	setLocation(200 + bounds.x, 200 + bounds.y);
	tela = new JLabel(new ImageIcon(cl.getResource("Fundo.png")));
	setBackground(Color.black);
	//getContentPane().add(tela);
	setSize(670,350);
	setResizable(false);
	setVisible(true);
	addWindowListener(new EscutaJanela());

}

class EscutaJanela extends WindowAdapter
{

	public void windowClosing(WindowEvent e) {
		setVisible(true);
		dispose();
	}
};


}

Editado por Rui Carlos
GeSHi
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas. O Knitter tem no wiki um exemplo para o que estás a pedir

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá

No meu projecto, eu fiz botões para definir as casas de um jogo, tal como o jogo da glória, mas preciso de por mesmo imagens nos botões em certas casas. Como faço isso? Já tentei mil e uma maneiras mas não consigo  :D

public void hideSquare(JPanel panel, JButton[] tabuleiro, int casaPos){
        tabuleiro[casaPos] = new JButton();
        tabuleiro[casaPos].setBackground(Color.gray);
        panel.add(tabuleiro[casaPos]);
        tabuleiro[casaPos].setEnabled(false);        
    }

Foi este o método que usei para criar os botões e atribuir-lhes uma cor, que também precisava.

public void criaTabuleiro(){
        for(int i=0; i<143;i++){
              if(i==8){
                hideSquare(jPanel1, tabuleiro, 25);
            }

Aqui foi onde eu defini os números das casas. o que está dentro da condição é a quadricula onde está a casa, o 25 é a posição do botão no tabuleiro de jogo.

Obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para meteres uma imagem num JButton, podes usar 2 formas: o seu construtor que recebe um Icon como parâmetro ou usar o método setIcon depois de o teres criado. Podes usar a classe ImageIcon que implementa a interface Icon para obteres a imagem e depois passas a instância dessa classe usada ao construtor ou ao método que referi.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para meteres uma imagem num JButton, podes usar 2 formas: o seu construtor que recebe um Icon como parâmetro ou usar o método setIcon depois de o teres criado. Podes usar a classe ImageIcon que implementa a interface Icon para obteres a imagem e depois passas a instância dessa classe usada ao construtor ou ao método que referi.

De facto, já tentei dessa forma, mas não deu resultado  :P

Só consigo é com JLabel's...que é só mudar nas propriedades. Mas com botões não consigo.

Mas obrigada na mesma ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora