Persoanlizando Botões com JButton

Boa noite a todos!

Gostaria de personalizar botões, em seu formato. Utilizei o JButton para criar e inseri uma figura da seguinte forma:

Icon icone = new ImageIcon("botao.jpg"); 

 botao.setIcon(icone);
 botao.setBorder(null); 

O problema que tirando as bordas, o botão perde o relevo ao passar e clicar com o mouse. Como resolver isto?

Gostaria tambem de criar um botão tipo um interruptor de ventilador de teto, daqueles que aumentam e diminuem (pra cima e pra baixo). Será possível?

Agradeço a ajuda,

Marcelo.

[quote=marcelo_uerj@hotmail.com]O problema que tirando as bordas, o botão perde o relevo ao passar e clicar com o mouse. Como resolver isto?
[/quote]
E qual o problema? Isso é normal e indica que o botão tem o foco.

Sim. Procure por JSpinner.

Boa tarde,

sobre o botão é que quando retiro as bordas e acrescento a imagem, ele perde a característica de um botão. Parece uma imagem solta e ao passar o mouse ele não muda.

No caso desse JSpinner, teria algum exemplo de código?

Obrigado,

Marcelo.

Olá amigo

http://www.java2s.com/Tutorial/Java/0240__Swing/0580__JSpinner.htm

Boa sorte

Silvio Guedes

[quote=marcelo_uerj@hotmail.com]Boa tarde,

sobre o botão é que quando retiro as bordas e acrescento a imagem, ele perde a característica de um botão. Parece uma imagem solta e ao passar o mouse ele não muda.

No caso desse JSpinner, teria algum exemplo de código?

Obrigado,

Marcelo.[/quote]

Oi,

Como você retirou as bordas, sua imagem deverá ser parecida com um botão.

Você está utilizando apenas 1 imagem. Logo, ao passar o mouse ele não irá mudar. Já pensou em tratar um listenner de foco e alterar a imagem atual para uma diferente?

Tchauzin!

Olá, boa tarde!

Sobre a criação de um botão deslizante, consegui ver um exemplo utilizando o JSpinner. Este me faz um botão na horizontal. Alguem sabe como transformar esse num botão na vertical, como aqueles de ventilador de teto?


    import java.awt.Rectangle;  
      
    import javax.swing.JFrame;  
    import javax.swing.JPanel;  
    import javax.swing.JSlider;  
    import javax.swing.JSpinner;  
    import javax.swing.SwingUtilities;  
      
    /** 
  */  
   public class TesteJSpinner extends JFrame {  
     
   
       private JPanel jContentPane = null;  
       private JSlider jslider1 = null;  
  
       private JSpinner jspinner1 = null;  
  
     
       /** 
       * This method initializes jContentPane  
        *   
        * @return javax.swing.JPanel    
        */  
       private JPanel getJContentPane() {  
        
               jContentPane = new JPanel();  
               jContentPane.setLayout(null);  
               jContentPane.add(getJslider1(), null);  
           
               jContentPane.add(getJspinner1(), null);  
           
       
           return jContentPane;  
       }  
     
       /** 
       * This method initializes jslider1  
        *   
        * @return javax.swing.JSlider   
        */  
       private JSlider getJslider1() {  
    
              jslider1 = new JSlider(0, 10);  
              jslider1.setMinorTickSpacing(1);  
               jslider1.setMajorTickSpacing(5);  
               jslider1.setPaintTicks(true);  
               jslider1.setPaintLabels(true);  
               jslider1.setSnapToTicks(true);  
               jslider1.setBounds(new Rectangle(10, 10, 200, 50));  
               jslider1.addChangeListener(new javax.swing.event.ChangeListener() {  
                   public void stateChanged(javax.swing.event.ChangeEvent e) {  
                       jspinner1.setValue(jslider1.getValue());  
                      
                 }  
               });  
     
           return jslider1;  
       }  
     
      
     
       /** 
        * This method initializes jspinner1     
        *   
        * @return javax.swing.JTextField    
        */  
       private JSpinner getJspinner1() {  
       
               jspinner1 = new JSpinner();  
         //      jspinner1.setBounds(new Rectangle(210, 30, 71, 31));  
         
           return jspinner1;  
       }  
     
      
    
      /** 
     * @param args 
     */  
      public static void main(String[] args) {  
    
          SwingUtilities.invokeLater(new Runnable() {  
              public void run() {  
                  TesteJSpinner thisClass = new TesteJSpinner();  
                  thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                  thisClass.setVisible(true);  
              }  
          });  
      }  
    
      /** 
       * This is the default constructor 
       */  
      public TesteJSpinner() {  
          super();  
          initialize();  
      }  
    
      /** 
       * This method initializes this 
       *  
       * @return void 
       */  
      private void initialize() {  
          this.setSize(300, 200);  
          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
          this.setContentPane(getJContentPane());  
          this.setContentPane(getJContentPane());  
          this.setTitle("JFrame");  
      }  
    
  }  

Abraços,

Marcelo.

seuSpinner.setOrientation(SwingConstants.VERTICAL);

BOA NOITE!

Marco, consegui fazendo deste modo:


 slider1  = new JSlider( SwingConstants.VERTICAL, 0, 100, 0 );

Valeu pela dica!

Agora tenho um outro problema. Ao criar esse slider e posicionar utilizando o setBounds, acabo criando um retangulo cinza junto com ele. Como poderia fazer para deixa-lo transparente (aparecendo só o botão deslizante)?

Abraço,

Marcelo.

Tente:

slider1.setOpaque(false);

PS: evite usar leiaute absoluto e dar setBounds em todos os componentes. Vale mais a pena investir um tempo em gerenciadores de leiaute.

Valeu pela dica! Troquei o setBounds e configurei deste jeito:


 slider1  = new JSlider( SwingConstants.VERTICAL, 0, 100, 0 );
 	 slider1.setMajorTickSpacing( 10 );
 	 slider1.setPaintTicks(false);
  	 slider1.setVisible(true);
 	 slider1.setLocation(300,150);
 	 slider1.setSize(100,200);
 	 slider1.setOpaque(false);

Achei melhor mesmo.

Agora tenho um outro problema. Como girar o botão deslizante, de forma que a parte fina fique pra baixo ou para esquerda?

Abraço.

Boa noite!

Estou com problemas para personalizar o botão. Tirei as bordas e coloquei uma imagem, mas daí ao ser clicado o botão não muda. Tentei colocar uma imagem de botão pressionado ao clicar, mas então essa imagem fica permanente. Como posso configurar o botão para exibir as 2 imagens (normal e pressionado) para ter um efeito de botão?


  public void actionPerformed(ActionEvent e){    
    		    		
    			Botao.setIcon(Button2);
    			      			  
    	
          }

Abraço.

ao inves de ActionListener, use também ou somente, MouseListener

e ao inves de actionPerformed ou também ou somente, os métodos da classe mouseListener, precisa vários
é uma interface que precisa vários metodos na classe, mesmo que vazios.
são MouseClicked() { }
mouseEntered() {}
mouseExited() { }
mousePressed() {}
mouseReleased () {}

com isto dá de fazer muitas coisas.
estou tentando fazer um xadrez, por isto estou estudando isto.
mas para estudar fiz um jogo de memória, olhe no meu site… ao passar nos botoes eles mudam de cor, no caso o Entered
e ao sair, também no caso Exited, mas daí só mantem as cores…
então pode mudar o botão como quiser, ou só mudar o Background, com o setBackGround(Color.yellow) por exemplo.

www.raghyjose.net/programacaoatual.php
o memoria está em um zip, onde as imagens estão a parte e devem ir para o diretorio c:/
e o jar no caso do jogo.

Olá, me parece ser uma boa ideia! Tem algum exemplo de como usar isso num botão? No site só tem arquivos executáveis.

Abraço.

Boa noite!

Ainda não resolvi meu problema com os botões. Configurei o botão no meu programa da seguinte forma:


	public void BotaoAumentar() { 
    	    	
    	Aumentar.setVisible(true); //Diz que será visivel
    	Aumentar.setSize(30,30); //Define o tamanho do botão
    	Aumentar.setLocation(300,400); //Define sua posição
    	Aumentar.setBorder(null); //Retira as bordas do botão
    	Aumentar.setIcon(ImageButton); //Configura a imagem do botão
    	add(Aumentar); //Adiciona o botão    	  	
    	}

Agora precisaria usar os eventos de mouse para dar a ação e mudar o icone ao ser clicado, para dar a ideia de que foi pressionado, sendo que ao largar, o icone volta ao normal.

Como posso fazer isso?

Abraço.