2013-09-27 3 views
2

J'ai besoin de construire un jlabel à côté d'un jcombobox à côté d'un jtextfield. JTextfield doit accepter uniquement des nombres. Le texte de jtextfield doit être stocké dans une chaîne et l'élément choisi doit également être stocké dans une chaîne différente. Aussi, il serait idéal si je pouvais ajouter un bouton j pour que toutes les sélections soient analysées lorsque le bouton est cliqué. J'utilise actuellement ce code inachevé, mais cela ne marchera pas. Quelqu'un peut-il suggérer les ajouts requis? Merci à l'avanceSwing: jlabel + jcombox + jtextfield

public class constraints { 

      private static JTextField tField; 
      private MyDocumentFilter documentFilter; 
      private JLabel amountLabel; 
      private static String amountString = "Select Quantity (in ktones): "; 
      public static String str = "" ; 

      private void displayGUI() 
      { 
       JFrame frame = new JFrame("Constraints"); 
       frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

       amountLabel = new JLabel(amountString); 

       JPanel contentPane = new JPanel(); 
       contentPane.setBorder(
        BorderFactory.createEmptyBorder(5, 5, 5, 5)); 
       tField = new JTextField(10); 

       amountLabel.setLabelFor(tField); 

       String[] petStrings = { "Less", "Equal", "More"}; 
       JComboBox petList = new JComboBox(petStrings) ; 
         petList.setSelectedIndex(3); 
        petList.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent event) { 

          JComboBox cb = (JComboBox)event.getSource(); 
          String petName = (String)cb.getSelectedItem(); 

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

       ((AbstractDocument)tField.getDocument()).setDocumentFilter(
         new MyDocumentFilter());   
       contentPane.add(amountLabel); 
        contentPane.add(petList); 
       contentPane.add(tField); 


       frame.setContentPane(contentPane); 
       frame.pack(); 
       frame.setLocationByPlatform(true); 
       frame.setVisible(true); 
      } 

      public static void main(String[] args) 
      { 
       Runnable runnable = new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         new constraints().displayGUI(); 
        } 
       }; 
       EventQueue.invokeLater(runnable); 

      } 
     } 

     class MyDocumentFilter extends DocumentFilter 
     { 
      @Override 
      public void insertString(DocumentFilter.FilterBypass fp 
        , int offset, String string, AttributeSet aset) 
             throws BadLocationException 
      { 
       int len = string.length(); 
       boolean isValidInteger = true; 

       for (int i = 0; i < len; i++) 
       { 
        if (!Character.isDigit(string.charAt(i))) 
        { 
         isValidInteger = false; 
         break; 
        } 
       } 
       if (isValidInteger) 
        super.insertString(fp, offset, string, aset); 
       else 
        Toolkit.getDefaultToolkit().beep(); 
      } 

      @Override 
      public void replace(DocumentFilter.FilterBypass fp, int offset 
          , int length, String string, AttributeSet aset) 
               throws BadLocationException 
      { 
       int len = string.length(); 
       boolean isValidInteger = true; 

       for (int i = 0; i < len; i++) 
       { 
        if (!Character.isDigit(string.charAt(i))) 
        { 
         isValidInteger = false; 
         break; 
        } 
       } 
       if (isValidInteger) 
        super.replace(fp, offset, length, string, aset); 
       else 
        Toolkit.getDefaultToolkit().beep(); 
      } 
     } 
+1

S'il vous plaît définir 'gagné 't travail'? Qu'est-ce qu'il est censé faire et qu'est-ce qu'il se passe actuellement? – Smit

Répondre

4

Couple de choses:

String[] petStrings = { "Less", "Equal", "More"};
JComboBox petList = new JComboBox(petStrings);
petList.setSelectedIndex(3);

Cela jette java.lang.IllegalArgumentException: setSelectedIndex: 3 out of bounds parce que votre JComboBox a seulement 3 éléments (index commence à 0) .

String petName = (String)cb.getSelectedItem();
System.out.println("petName");

Ce sera toujours imprimer chaîne "Petname". Je pense que vous voulez:

System.out.println(petName); 

Quoi qu'il en soit, je pense que vous voulez utiliser ItemListener à la place ActionListener:

petList.addItemListener(new ItemListener() { 
    @Override 
    public void itemStateChanged(ItemEvent event) { 
     JComboBox cb = (JComboBox)event.getSource(); 
     String petName = (String) cb.getSelectedItem(); 
     System.out.println(petName); 
    } 
}); 

Mise à jour

Je dois seulement faire quand un JButton est cliqué ou entrez. Est-ce possible ?

Oui c'est. Faites votre JComboBox finale et ajouter un JButton à votre JPanel:

final JComboBox petList = new JComboBox(petStrings); 
petList.setSelectedIndex(2); 

JButton submit = new JButton("Submit"); 
submit.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String petName = (String) petList.getSelectedItem(); 
     System.out.println(petName); 
    } 
}); 

PS: noter que si vous ne faites pas petList finale, il ne sera pas accessible dans le DButton de ActionListener

+0

Merci beaucoup. Maintenant ça marche. Mais quand j'ajoute une action ou un itemlistener chaque fois que je tape ou change quelque chose, je reçois une valeur imprimée. Je dois seulement faire cela quand un jbutton est cliqué ou entrez. Est-ce possible? @ dic19 – user2598911

+1

@ user2598911 Au lieu d'ajouter l'écouteur d'action à la liste déroulante, ajoutez-le au bouton – MadProgrammer

+0

avec l'actionlistener dans le bouton Je peux obtenir la chaîne petName = (String) cb.getSelectedItem() et String str = tField.getText() quand on clique dessus. Il me rendra l'élément sélectionné de combobox et le texte tapé dans jtextfield? @MadProgrammer – user2598911

Questions connexes