2010-06-22 2 views
0

J'ai quelques JSpinners et ils sont des valeurs numériques commençant à 10 et peuvent être incrémentés jusqu'à 99.Comment savoir si l'incrémentation/décrémentation de JSpinner est activée?

Dans mon programme, l'utilisateur dispose de 15 points pour répartir uniformément sur 6 compétences. Chaque JSpinner a un EventListener pour détecter s'il est pressé, mais plus précisément j'ai besoin de savoir quel bouton a été pressé pour que je sache quelle action prendre. Ils ne veulent pas prendre un point de force et le faire décrémenter le total des points de 1, Au lieu de cela, si le Decrement est pressé, il devrait ajouter 1.

Quelle serait la meilleure méthode pour l'exécuter?

(Aussi j'utilise NetBeans donc un peu du programme est généré automatiquement.)

Répondre

1

On peut supposer que vous êtes quelque part dans une méthode d » stateChangedChangeListener - jetez un oeil à ChangeEvent#getSource()


Ok, votre édition a rendu ma réponse originale assez inutile.

Est-ce que créer votre propre SpinnerModel serait une option viable?

+0

J'ai déjà un SpinnerModel pour chaque JSpinner qui définit le defaul t valeur, incrémentation et autres. – Kitsune

+0

Avez-vous cherché à surcharger les méthodes 'getNextValue' et' getPreviousValue'? –

+0

Non, ça ne m'amène pas là où je dois être. – Kitsune

-1

j'ai rencontré le même problème, voici comment je l'ai résolu la mise en œuvre de mon scénario d'actions:

Tout d'abord je collectionne tous les boutons fléchés:

private static HashMap<String, BasicArrowButton> getSpinnerButtons(JSpinner spinner, String[] arrowNames) { 
    final Stack<String> arrows = new Stack<String>(); 
    arrows.addAll(Arrays.asList(arrowNames)); 
    final HashMap<String, BasicArrowButton> buttons = new HashMap<String, BasicArrowButton>(); 
    while (buttons.size()<2) { 
     for (final Component c : spinner.getComponents()) { 
      if (c instanceof BasicArrowButton) { 
       final BasicArrowButton bab = (BasicArrowButton)c; 
       for (final String sName : arrows) { 
        if (sName.equals(bab.getName())&&!buttons.containsKey(sName)) { 
         buttons.put(sName,bab); 
         break; 
        } 
       } 
      } 
     } 
    } 
    return buttons; 
} 

J'attache une certaine écoute:

final String KEY_PROP = ".DIRECTION"; 
    final String BS = spinner.getName(), BN="Spinner.nextButton", BP="Spinner.previousButton"; 
    final String BSKEY = BS+KEY_PROP, BNKEY = BN+KEY_PROP, BPKEY = BP+KEY_PROP; 

    final HashMap<String, BasicArrowButton> buttons = getSpinnerButtons(spinner, new String[]{BN,BP}); 

    spinner.putClientProperty(BSKEY, 1000); 
    spinner.putClientProperty(BNKEY, buttons.get(BN).getDirection()*+10000); 
    spinner.putClientProperty(BPKEY, buttons.get(BP).getDirection()*-10000); 

    final PropertyChangeListener pcl = new PropertyChangeListener() { 
     @Override 
     public void propertyChange(PropertyChangeEvent evt) { 
      final JSpinner spinnerRef = ((JSpinner)evt.getSource()); 
      final String pName = evt.getPropertyName(); 
      final short swing = Short.parseShort(String.valueOf(evt.getOldValue())); 
      final short val = Short.parseShort(String.valueOf(evt.getNewValue())); 
      if (Math.abs(swing)<2D) 
       System.out.printf("This is a DIRECTION CHANGE\nOld Direction=%s;\nNew Direction=%s;\nProp Value: %s", swing, val, spinnerRef.getClientProperty(pName)).println(); 
      else //arrows 
       System.out.printf("This is the CURRENT DIRECTION\nArrow=%s;\nDirection=%s;\nProp Value: %s", swing, val, spinnerRef.getClientProperty(pName)).println(); 

      System.out.println("=============="); 
     } 
    }; 

    spinner.addPropertyChangeListener(BSKEY, pcl); 
    spinner.addPropertyChangeListener(BNKEY, pcl); 
    spinner.addPropertyChangeListener(BPKEY, pcl); 

    final ActionListener spinnerActions = new ActionListener() { 
     private short oldDir=0; 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      final BasicArrowButton bab = ((BasicArrowButton)e.getSource()); 
      final short swingDir = (short)bab.getDirection(); 
      final short newDir = (swingDir!=SwingConstants.NORTH&&swingDir!=SwingConstants.WEST) ? Integer.valueOf(-1).shortValue() : Integer.valueOf(+1).shortValue(); 
      bab.getParent().firePropertyChange(bab.getName()+KEY_PROP, swingDir*1000, newDir); 
      bab.getParent().firePropertyChange(bab.getParent().getName()+KEY_PROP, oldDir, newDir); 
      this.oldDir=newDir; 
     } 
    }; 
    buttons.get(BP).addActionListener(spinnerActions); 
    buttons.get(BN).addActionListener(spinnerActions); 
Questions connexes