2012-02-05 93 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