Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  
  /*
   * Copyright (C) 2006 Sun Microsystems, Inc. All rights reserved. Use is
   * subject to license terms.
   */ 
  
  package org.jdesktop.application;
  
An internal helper class that configures the text and mnemonic properties for instances of AbstractButton, JLabel, and javax.swing.Action. It's used like this:
 MnemonicText.configure(myButton, "Save &As")
 
The configure method unconditionally sets three properties on the target object:
  • the label text, "Save As"
  • the mnemonic key code, VK_A
  • the index of the mnemonic character, 5
If the mnemonic marker character isn't present, then the second two properties are cleared to VK_UNDEFINED (0) and -1 respectively.

 
 class MnemonicText {
     private MnemonicText() { } // not used
 
     public static void configure(Object targetString markedText) {
         String text = markedText;
         int mnemonicIndex = -1;
         int mnemonicKey = .;
         // TBD: mnemonic marker char should be an application resource
         int markerIndex = mnemonicMarkerIndex(markedText'&');
         if (markerIndex == -1) {
             markerIndex = mnemonicMarkerIndex(markedText'_');
         }
         if (markerIndex != -1) {
             text = text.substring(0, markerIndex) + text.substring(markerIndex + 1);
             mnemonicIndex = markerIndex;
             CharacterIterator sci = new StringCharacterIterator(markedTextmarkerIndex);
             mnemonicKey = mnemonicKey(sci.next());
         }
         if (target instanceof javax.swing.Action) {
             configureAction((javax.swing.Action)targettextmnemonicKeymnemonicIndex);
         }
         else if (target instanceof AbstractButton) {
             configureButton((AbstractButton)targettextmnemonicKeymnemonicIndex);
         }
         else if (target instanceof JLabel) {
             configureLabel((JLabel)targettextmnemonicKeymnemonicIndex);
         }
         else {
             throw new IllegalArgumentException("unrecognized target type " + target);
         }
     }
 
     private static int mnemonicMarkerIndex(String schar marker) {
         if ((s == null) || (s.length() < 2)) { return -1; }
         CharacterIterator sci = new StringCharacterIterator(s);  
         int i = 0;
         while(i != -1) {
             i = s.indexOf(markeri);
             if (i != -1) {
                 sci.setIndex(i);
                 char c1 = sci.previous();
                 sci.setIndex(i);
                 char c2 = sci.next();
                 boolean isQuote = (c1 == '\'') && (c2 == '\'');
                 boolean isSpace = Character.isWhitespace(c2);
                 if (!isQuote && !isSpace && (c2 != sci.DONE)) {
                     return i;
                 }
             }
             if (i != -1) { i += 1; }
         }
         return -1;
     }
 
     /* A general purpose way to map from a char to a KeyCode is needed.  An 
      * AWT RFE has been filed: 
      * http://bt2ws.central.sun.com/CrPrint?id=6559449
      * CR 6559449 java/classes_awt Support for converting from char to KeyEvent VK_ keycode
      */
     private static int mnemonicKey(char c) {
         int vk = (int)c;
         if ((vk >= 'a') && (vk <='z')) {
             vk -= ('a' - 'A');
         }
         return vk;
     }
    /* This javax.swing.Action constants is only 
     * defined in Mustang (1.6), see 
     * http://download.java.net/jdk6/docs/api/javax/swing/Action.html
     */
    private static final String DISPLAYED_MNEMONIC_INDEX_KEY = "SwingDisplayedMnemonicIndexKey";
    private static void configureAction(javax.swing.Action targetString textint keyint index) {
        target.putValue(...text);
        if (key != .) { target.putValue(...key); }
        if (index != -1) { target.putValue(index); }
    }
    private static void configureButton(AbstractButton targetString textint keyint index) {
        target.setText(text);
        if (key != .) { target.setMnemonic(key); }
        if (index != -1) { target.setDisplayedMnemonicIndex(index); }
    }
    private static void configureLabel(JLabel targetString textint keyint index) {
        target.setText(text);
        if (key != .) { target.setDisplayedMnemonic(key); }
        if (index != -1) { target.setDisplayedMnemonicIndex(index); }
    }
New to GrepCode? Check out our FAQ X