2012-02-05 94 views
0

我试图创建NewCard类,并实现了一个框架。我如何将Actionlisteners添加到NewCard类的构造函数中的元素?我不能把Actionlistener放到构造函数中,当我把它放到外面时,元素“field”对于saveButtonListener块是不可见的。构造函数中的Actionlisteners

第二个问题:class try在try块中抛出两个异常,为什么try块产生错误?

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

你得到的错误是什么? – stryba 2012-02-05 21:13:37

+0

?仍然不会说你收到什么错误信息? – 2012-02-05 21:51:48

+0

尝试块产生错误,但众所周知,这种奇怪的错误通常出于其他原因出现。在类构造函数中正确使用ActionListener后,try块不会产生更多错误。 – 2012-02-06 01:54:34

回答

2

你可以把你的动作监听器里面的构造是这样的。

或者使用匿名监听器,如Mersenne的答案所示。

2

有关:

我不能把进入ActionListener的构造,...

谁说你不能?只需添加ActionListener ...

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

或者您可以使用匿名内部类,或者甚至更好使用AbstractActions。

编辑1:
关于:

第二个问题:在try块类记录抛出两个例外,为什么try块产生的错误?

如果您有关于异常的问题,这让很多的意义显示例外。

编辑2
关于:

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

为什么类扩展JFrame中,并创建一个从来没有使用过类内一个JFrame最好不要有类扩展JFrame的,而是创造? JFrame在需要时。通过创建监听器的适当的构造

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

}); 
2

通行证fieldsaveButtonListener