2012-02-05 4 views
0

J'essaye de créer la classe NewCard, avec implémente un cadre. Comment puis-je ajouter Actionlisteners aux éléments du constructeur de la classe NewCard? Je ne peux pas mettre Actionlistener dans le constructeur, et quand je l'ai mis dehors, l'élément "field" est invisible pour le bloc saveButtonListener.Actionlisteners dans le constructeur

Deuxième question: class Enregistrer dans le bloc try jette deux exceptions, pourquoi essayer de générer une erreur?

package Interface; 

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

class NewCard extends JFrame 
{   
    NewCard() 
    { 
     JFrame Card = new JFrame(); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setTitle("New Card"); 
     setSize(340, 580); 
     setVisible(true); 
     Container contentPane = getContentPane(); 
     contentPane.setLayout(null); 

     // Field 

     JTextField field = new JTextField(); 
     contentPane.add(field); 
     field.setBounds(110,15,200,25); 

     // Button: 

     JButton saveButton = new JButton("Save"); 
     powZawartosci.add(saveButton); 
     saveButton.setBounds(95,495,150,25); 

     saveButtonListener listener1 = new saveButtonListener(); 
     saveButton.addActionListener(listener1); 
    } 

    private class saveButtonListener implements ActionListener 
    { 
     try 
     { 
      @Override 
      public void actionPerformed(ActionEvent event) 
      { 
       new Record(field.getText()); 
      } 
     } 
     catch(IOException e) 
     { 
      System.out.println("IOException"); 
     } 
     catch(SQLException e) 
     { 
      System.out.println("SQLException"); 
     } 
     finally 
     { 

     } 
    } 
} 
+1

Quelle est l'erreur que vous obtenez? – stryba

+0

? Toujours ne dira pas quels messages d'erreur vous obtenez? –

+0

Il y avait une erreur générée par try block, mais comme nous le savons tous, ce type d'erreur étrange communique parfois pour d'autres raisons. Il n'y a plus d'erreur générée par try block après ActionListener correctement utilisé dans le constructeur de la classe. –

Répondre

2

Vous pouvez mettre votre écouteur d'action à l'intérieur constructeur comme ceci:

final JTextField field = new JTextField(); 
... 
saveButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
     new Record(field.getText()); 
    } 

}); 
2

concernant:

Je ne peux pas mettre en actionListener constructeur, ...

Qui a dit que vous ne pouvez pas? Ajoutez simplement le ActionListener ...

JButton saveButton = new JButton("Save"); 
saveButton.addActionListener(new SaveButtonListener()); // capitalize class names 

Ou vous pouvez utiliser les classes internes anonymes, ou encore mieux, utilisez AbstractActions.

Edit 1:
En ce qui concerne:

Deuxième question: Record de classe dans le bloc try jette deux exceptions, pourquoi essayer bloc générer une erreur?

Si vous avez une question au sujet d'une exception, il fait beaucoup de sens à montrent l'exception.

Edit 2
En ce qui concerne:

class NewCard extends JFrame 
{   
    NewCard() 
    { 
     JFrame Card = new JFrame(); 

Pourquoi les étendre la classe JFrame et créer un JFrame intérieur de la classe qui n'a jamais été utilisé mieux pour ne pas avoir étendre la classe JFrame mais plutôt de créer? JFrame si nécessaire.

2

passe field au saveButtonListener en créant un constructeur approprié pour l'auditeur.

Ou utilisez un écouteur anonyme, comme indiqué dans la réponse de Mersenne.