Evento jSpinner [Resolvido]

4 respostas
A

Bom dia a todos.

Estou com um Jspinner q nao ativando o metodo keyReleased.
Ele simplesmente nao entra no metodo qnd teclo qualquer tecla.

obrigado por qualquer ajuda.

jSpinnerCodigoGeral = new javax.swing.JSpinner();  
jSpinnerCodigoGeral.addFocusListener(new java.awt.event.FocusAdapter() {
      public void focusGained(java.awt.event.FocusEvent evt) {
        jSpinnerCodigoGeralFocusGained(evt);
      }
      public void focusLost(java.awt.event.FocusEvent evt) {
        jSpinnerCodigoGeralFocusLost(evt);
      }
    });
    jSpinnerCodigoGeral.addKeyListener(new java.awt.event.KeyAdapter() {
      public void keyReleased(java.awt.event.KeyEvent evt) {
        apertouteclanoJspinnerCodigoGeral(evt);
      }
    });

Utilizo
Versão do produto: NetBeans IDE 6.0.1 (Build 200801291616)
Java: 1.6.0_01; Java HotSpot™ Client VM 1.6.0_01-b06
Sistema: Windows XP versão 5.1 executando em x86; Cp1252; pt_BR (nb)

4 Respostas

T

Detecting Spinner Value Changes

Ou seja, não é para adicionar um KeyListener, nem um FocusListener. Se você quer detectar se o valor do spinner foi alterado, você precisa usar um ChangeListener.

W

Cara o JSpinner eh um componente meio “chatinho” de se trabalhar, pra vc adicionar listener vc nao pode adicionar diretamente ao JSpinner, mas ao seu TextField.

ai vai um exemplo que eu fiz aqui rapidinho :

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

@SuppressWarnings("serial")
public class TesteSpinner extends JFrame {

	public TesteSpinner() {
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		getContentPane().setLayout(new BorderLayout());
		
		JSpinner js1 = new JSpinner();
		JTextField t1 = new JTextField(10);
		
		((JSpinner.DefaultEditor)js1.getEditor()).getTextField().addFocusListener(
				new MyFocusAdapter());
				
		
		add(js1, BorderLayout.NORTH);
		add(t1, BorderLayout.SOUTH);
				
		pack();
		
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new TesteSpinner();
	}
	
	public class MyFocusAdapter extends FocusAdapter {
		
		public void focusGained(FocusEvent e) {
			System.out.println("Ganhou foco");
		}
		
		public void focusLost(FocusEvent e) {
			System.out.println("Perdeu foco");
		}					
		
	}
	
	
}

A parte importante do codigo eh :

((JSpinner.DefaultEditor)js1.getEditor()).getTextField().addFocusListener(
				new MyFocusAdapter());

Eu adicioneu um JTextfield tb, so pra vc testar o ganho e perda de foco, entao, nao se preocupe com ele.

ps: nao testei colocar um keylistener, mas provavelmente eh o mesmo principio.

//Daniel

A

Baseado no seu exemplo, crie esta classe

public abstract class Meujspinner extends javax.swing.JSpinner{
  public Meujspinner(){
    super();
    ((javax.swing.JSpinner.DefaultEditor)this.getEditor()).getTextField().addFocusListener(  
               new java.awt.event.FocusAdapter() {
      @Override
      public void focusGained(java.awt.event.FocusEvent e) {  
             ganhoufoco(e);
      }
      
      @Override
      public void focusLost(java.awt.event.FocusEvent e) {  
             perdeufoco(e);
         }
     
    });
    
    
    ((javax.swing.JSpinner.DefaultEditor)this.getEditor()).getTextField().addKeyListener(  
               new java.awt.event.KeyListener() {

      public void keyTyped(java.awt.event.KeyEvent e) {
        typoutecla(e);
      }
 
      public void keyPressed(java.awt.event.KeyEvent e) {
        apertoutecla(e);
      }

      public void keyReleased(java.awt.event.KeyEvent e) {
        soltoutecla(e);
      }
    });
    
  }
  public abstract void ganhoufoco(java.awt.event.FocusEvent e);
  public abstract void perdeufoco(java.awt.event.FocusEvent e);
  public abstract void soltoutecla(java.awt.event.KeyEvent e);
  public abstract void typoutecla(java.awt.event.KeyEvent e);
  public abstract void apertoutecla(java.awt.event.KeyEvent e);
}

e utilizei ela assim:

Meujspinner jSpinnerCodigoGeral = new Meujspinner() {

        @Override
        public void ganhoufoco(FocusEvent e) {
          ganhoufocoJspinnerCodigoGeral(e);
        }

        @Override
        public void perdeufoco(FocusEvent e) {
          perdeufocoJspinnerCodigoGeral(e);
        }

        @Override
        public void soltoutecla(KeyEvent e) {
          soltouteclaJspinnerCodigoGeral(e);
        }

        @Override
        public void typoutecla(KeyEvent e) {
          
        }

        @Override
        public void apertoutecla(KeyEvent e) {
          
        }
      };

mas mesmo assim ele nao esta entrando no metodo soltouteclaJspinnerCodigoGeral implementado.

A

deu certo.

obrigado pela ajuda.

Resolucao: no meu código eu estava definindo o modelo dele. quando eu fazia isto ele apagava os eventos e acertava para os definidos no modelo, ou seja, para acertar o modelo (model), acerte na criacao da classe.

t+

Criado 24 de abril de 2008
Ultima resposta 24 de abr. de 2008
Respostas 4
Participantes 3