2012-01-28 66 views
1

讀值我想讀從Java中textfied值,但我不能讀它 這裏是我的代碼從文本字段

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

public class TextField extends JDialog { 
    TextField() { 
    JFrame frm = new JFrame("SAMPLE PROGRAM"); 
    frm.setBounds(150,150,420,400); 
    frm.setLayout(null); 
    Container content = frm.getContentPane(); 
    content.setBackground(Color.cyan); 
    JTextField text = new JTextField(); 
    text.setBounds(70,25,100,30); 
    JButton button1, button2; 
    button1 = new JButton("PROGRAMMER"); 
    button2 = new JButton("USER"); 
    button1.setBounds(270,25,120,50); 
    button2.setBounds(270,90,120,50); 
    button1.addActionListener(new ButtonHandler()); 
    button2.addActionListener(new ButtonHandler()); 
    frm.add(button1); 
    frm.add(button2); 
    frm.add(text); 
    frm.setVisible(true); 
    frm.setResizable(false); 
    } 

    public static void main(String[] args) { 
    new TextField(); 
    } 
    class ButtonHandler implements ActionListener { 
    public void actionPerformed(ActionEvent e) {  
     String str = new String();  
     str = e.getActionCommand();  
     System.out.println(" " + str); 
    } 
    } 
} 

我嘗試以下方法

1.In類文本字段我用button2.addactionlistener.It根據本方法得到的誤差

無法指非最終可變文本在不同的方法中定義的內部類內部

button1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ae) { 
    if(text.getText().equals("joe")) 

2.In類ButtonHandler

它說,文本無法解析

我應該用什麼方法來讀取文本框,並在類應該在閱讀

+0

您能否讓您的課程更清晰些,並輸入所有必要的代碼?第一類沒有辦法。 – Russell 2012-01-28 10:48:27

+0

爲什麼所有'>'字符都在代碼行之前?今後請多做點努力,那個地段就像狗的早餐一樣。 – 2012-01-28 11:07:10

+1

沒辦法解讀基本的java教程/教科書並學習它的內容:-) http://docs.oracle.com/javase/tutorial/index.html – kleopatra 2012-01-28 11:10:21

回答

2

1)如果重命名(用與名稱的TextField AWT API可能發生的衝突)和刪除的JDialog,因爲它從來沒有使用過

public class TextField extends JDialog { TextField(){ 

public class MyTextField { public MyTextField(){ 

2),並更改主方法

public static void main(String[] args) { 
    new TextField(); 
} 

public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      private final JTabbedPane jtp = new JTabbedPane(); 

      @Override 
      public void run() { 
       MyTextField textField = new MyTextField(); 
      } 
     }); 
    } 

3)刪除所有字符>

4)添加DefaultCloseOparation爲JFrame的,否則你的程序將留在內存中,直到您的計算機重新啓動或關閉

5)刪除所有un_ Swing methods和使用a LayoutManager

+0

好主意與DefaultCloseOperations – Russell 2012-01-28 10:52:59

+0

我做了一個編輯。如果我猜對了你的意思是錯誤的,請將其還原。 ;) – 2012-01-28 11:10:22

1

字符串str = text.getText();

這個,如果你用

String str = text.getText(); 

更換

str = e.getActionCommand(); 

應該工作。如果不工作,你可能需要創建JTextField的爲靜態的JTextField或添加final修飾符。 PS:下一次,只放入必要的代碼,而不是JFrame或JButtons,它只是使閱讀代碼更容易。

+0

說什麼,讓它成爲一個靜態字段?我希望這不是一個嚴肅的建議。它將解決編譯問題,但這就是它將解決的所有問題。作爲回報,你會遇到一堆問題和糟糕的設計 – Robin 2012-01-28 16:53:26

+0

這確實是因爲軟件設計不好,但是通過代碼來判斷,我會說編碼器的水平並沒有達到大規模的水平程序等,使用靜態會使它更容易。不僅如此,當我編程時(請告訴我這是否壞)我傾向於不使用繼承,而是使重要變量變爲靜態,並在類中創建許多方法。 – Russell 2012-01-28 17:20:52

+0

如果你創建了這個類的兩個實例,他們會共享相同的靜態字段嗎?靜態實例屬於類,而不屬於類的實例。所以,一個JTextField,你的用戶界面的一部分,永遠不應該是一個靜態實例 – Robin 2012-01-28 17:30:20