2013-02-10 32 views
0

我只是學習使用ActionListener s並使小工具工作。 這是我的簡單程序,我想打印任何我輸入的JTextField爲什麼這個ActionListener不工作?

TextViewer1

import javax.swing.JFrame; 

public class TextViewer1 { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     JFrame frame = new TextFrame1(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 

    } 

} 

TextFrame1

import java.awt.event.ActionListener; 
import javax.swing.*; 

public class TextFrame1 extends JFrame { 
    private static final int FRAME_WIDTH = 300; 
    private static final int FRAME_HEIGHT = 200; 

    public TextFrame1() { 
     createComponents(); 
     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    } 


    private void createComponents() { 
     JPanel panel = new JPanel(); 
     add(panel); 

     JTextField textbox = new JTextField(20); 
     panel.add(textbox); 

     String TYPED = textbox.getText(); 
     ActionListener sendsText = new TextListener(); 
     textbox.addActionListener(sendsText); 


    } 
} 

的TextListener

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

public class TextListener implements ActionListener { 

    /** 
    * @param args 
    */ 

    public void actionPerformed(ActionEvent event) { 

     System.out.println(TYPED); 

    } 

} 

所以proble m是'TextListener'中的變量TYPED,它想要創建這個變量並初始化它。

有什麼不對?

回答

2

So the problem is the variable TYPED in 'Text Listener', it wants to create this variable and initialise it.

這是因爲該變量是在您的TextListener不確定的。您在TextFrame1#createComponents中創建了一個名爲TYPED的局部變量,但在TextListeneractionPerformed中不可見。

實際上,您將變量分配給JTextField的初始文本,默認情況下這是空的String。如果你想獲得組件的當前文本,你可以將它傳遞到構造函數:

class TextListener implements ActionListener { 

    private final JTextField textField; 
    public TextListener(JTextField textField) { 
    this.textField = textField; 
    } 

    @Override 
    public void actionPerformed(ActionEvent event) { 

     System.out.println(textField.getText()); 
    } 
} 

創建TextListener這樣的:

ActionListener sendsText = new TextListener(textbox); 
+0

感謝您的迴應,仍然有一個錯誤:>>>在TextFrame1 >>> 的ActionListener sendsText =新的TextListener(類型);錯誤消息:構造函數TextListener(String)未定義 – 2013-02-11 21:53:04

+0

編號傳入「JTextField」而不是文本本身。查看更新。 :) – Reimeus 2013-02-11 21:56:55

2

類型的未聲明的變量。所以要麼聲明它,要麼用「」包圍它。

編輯: 是的,你確實聲明瞭它,但作爲TextFrame1類中的createComponents函數內的局部變量。

您需要通過像值:

public class TextListener implements ActionListener { 
    private String typed; 

    public TextListener(String typed) { 
     this.typed = typed; 
    } 

    /** 
    * @param args 
    */ 

    public void actionPerformed(ActionEvent event) { 

     System.out.println(typed); 

    } 

} 

哦,變量不應該大寫,但在較低的情況下。大寫字母是常量。

編輯2:我的不好,那個監聽器構造函數應該接受String類型,不是int類型的。我修復了代碼。至於您的其他問題,那是因爲您現在需要將輸入結果傳遞給偵聽器聲明。

ActionListener sendsText = new TextListener(TYPED); 

或者只是做:

ActionListener sendsText = new TextListener(textbox.getText()); 
+0

我以爲我宣佈了它。 字符串TYPED =文本框。的getText(); 那麼如何以及在何種I類應申報呢?我不知道你的意思是圍繞它。 – 2013-02-10 22:03:17

+0

你宣稱它在一流水平,但在動作偵聽器的代碼不可見。也爲textarea的動作,你應當關心自己在關鍵監聽 – 2013-02-10 22:04:33

+0

感謝你的幫助,但它仍然無法正常工作,實際上是在Eclipse上,它提供了2個不同的錯誤,第一>>的ActionListener sendsText =新的TextListener();錯誤:構造的TextListener()是不確定的。 第二錯誤:this.typed =鍵入;類型不匹配:不能從int轉換爲字符串 – 2013-02-10 22:26:27