2013-04-29 10 views
5

Quindi ho un programma di benvenuto con 3 JTextfields e 3 JLabels accanto a loro e voglio aggiungere mnemonici, che credo sia la piccola sottolineatura sotto una delle lettere nella JLabel accanto al JTextField. Quando l'utente preme il tasto sottolineato Alt +, il cursore si posiziona su JTextfield accanto ad esso. Ecco il mio codice in modo che mostra solo il semplice saluto, senza mnemoniciCome aggiungere mnemonici in java swing?

import javax.swing.*; 
import javax.swing.UIManager.LookAndFeelInfo; 

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class GreetingApp extends JFrame { 
    private static final long serialVersionUID = 1L; 
    private final JTextField firstNameField,middleNameField,lastNameField; 
    private final JButton greetingButton; 
    public GreetingApp() { 
     super("Greetings"); 
     this.firstNameField = new JTextField(8); 
     this.middleNameField = new JTextField(8); 
     this.lastNameField = new JTextField(8); 
     this.greetingButton = new JButton("Get Greeting"); 

     greetingButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(final ActionEvent ae){ 
       showGreeting(); 
      } 
     }); 
     final Container mainPanel = getContentPane(); 
     mainPanel.setLayout(new BorderLayout()); 
     final JPanel inputPanel = new JPanel(); 
     final JPanel buttonPanel = new JPanel(); 
     inputPanel.setLayout(new GridLayout(3,3,3,5)); 
     buttonPanel.setLayout(new FlowLayout()); 
     JSeparator sep = new JSeparator(); 
     inputPanel.add(new JLabel("First Name: "),JLabel.LEFT_ALIGNMENT); 
     inputPanel.add(firstNameField); 
     inputPanel.add(new JLabel("MI: "),JLabel.LEFT_ALIGNMENT); 
     inputPanel.add(middleNameField); 
     inputPanel.add(new JLabel("Last Name: "),JLabel.LEFT_ALIGNMENT); 
     inputPanel.add(lastNameField); 
     mainPanel.add(inputPanel,BorderLayout.PAGE_START); 
     //buttonPanel.add(sep,BorderLayout.PAGE_START); 
     mainPanel.add(sep,BorderLayout.CENTER); 
     buttonPanel.add(greetingButton); 
     mainPanel.add(buttonPanel,BorderLayout.PAGE_END); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 
    private String getFullName() throws IllegalStateException{ 
     if(firstNameField.getText().trim().length() == 0){ 
      throw new IllegalArgumentException("First name cannot be blank"); 
     } 

     if(middleNameField.getText().trim().length() > 1){ 
      throw new IllegalArgumentException("Middle intial cannot be greater than 1 letter"); 
     } 
     if(lastNameField.getText().trim().length() == 0){ 
      throw new IllegalArgumentException("Last name cannot be blank"); 
     } 
     if(middleNameField.getText().trim().length() ==0){ 
      return "Greetings, "+this.firstNameField.getText()+" "+ this.middleNameField.getText() +this.lastNameField.getText()+"!"; 
     } 
     return "Greetings, "+this.firstNameField.getText()+" "+ this.middleNameField.getText()+"."+this.lastNameField.getText()+"!"; 
    } 
    private void showGreeting(){ 

     try{ 
      String message = getFullName(); 
      JOptionPane.showMessageDialog(this, message); 
     }catch(final IllegalArgumentException iae){ 
      JOptionPane.showMessageDialog(this, 
        iae.getMessage(), 
        "Error", 
        JOptionPane.ERROR_MESSAGE); 
     } 

    } 
    public static void main(String[] args) { 
     try{ 
      for(LookAndFeelInfo info:UIManager.getInstalledLookAndFeels()){ 
       if("Nimbus".equals(info.getName())){ 
        UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     }catch(Exception e){ 
      e.getStackTrace(); 
     } 
    } 
} 
+0

Si prega di non modificare parti grandi e utili della tua domanda come hai fatto qui. Domande e risposte qui sono * destinate * per aiutare i futuri lettori. Se non desideri che gli altri ottengano informazioni dai tuoi post, non pubblicarli qui. –

risposta

7

Se il JLabel si chiama label e la vostra JTextField si chiama textField:

label.setDisplayedMnemonic(KeyEvent.VK_N); //replace .VK_N with the appropriate key 

metterà mnemonico in etichetta, e:

label.setLabelFor(textField); 

assocerà che etichetta (e la sua mnemonico) con il campo di testo appropriato

+1

È inoltre possibile passare un carattere a setDisplayedMnemonic() nonché un codice chiave. Inoltre, se stai usando un'azione con il tuo pulsante, puoi definire mnemonico, acceleratore e suggerimento nel costruttore di Action. –

+3

+1 per metodo setLabelFor (...). – camickr

+0

@EdwardFalk davvero. – drewmoore