2013-03-08 68 views
0

這個程序的目的是從另一個類訪問私有變量jtextfield。我創建了這個簡單的程序,它接受來自JTextField的用戶輸入。我在一個類中有getter和setter方法,而另一個類中有按鈕和字段。因此,我想在用戶在文本框中輸入內容時打印某些內容。但按鈕被點擊時,程序不打印,並給出一個錯誤:如何在GUI中爲私有變量應用Getter/Setter方法?

錯誤:javax.swing.JTextField中[,140,62,124x20,佈局= javax.swing.plaf.basic.BasicTextUI中

我是否正確地初始化了getter和setter方法?

例1:

import javax.swing.*; 

class Example1 { 

private JTextField Name; 


public Example1(){ 

Name = null; 

} 

public Example1(JTextField n){ 

Name = n; 

} 


public void setName(JTextField Name) { 
    this.Name = Name; 
} 
public JTextField getName() { 
    return Name; 
} 

}

例2:

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


public class Example2 
{ 

JFrame frame = new JFrame(); 
JPanel panel = new JPanel(); 

private JTextField Name = new JTextField(); 
private JButton Button = new JButton("Print"); 


public Example2(){ 

panel.setLayout(null); 

Name.setBounds(140, 62, 124, 20); 
Button.setBounds(320, 62, 133, 20); 

panel.add(Name); 
panel.add(Button); 

frame.add(panel); 
frame.setSize(470,310); 
frame.setVisible(true); 



Button.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent e) { 

add(Name); 

} 
}); 



} 


public static void add(JTextField Name){ 

Example1 x = new Example1(); 
x.setName(Name); 

JTextField a = x.getName(); 
System.out.println(a); 

} 


public static void main(String [] args){ 

    Example2 print = new Example2(); 
} 



} 
+0

作爲一個方面說明,在Java的標準是使用'lowerCamelCase'成員變量。 – 2013-03-08 17:51:28

回答

1

你不希望打印的元素本身要通過文本域來訪問字符串保持。這不是一個錯誤。它只是爲JTextField調用toString()方法。使用textfield.getText()訪問文本字段的值。在示例2這將是:

public static void add(JTextField Name){ 
    Example1 x = new Example1(); 
    x.setName(Name); 

    JTextField a = x.getName(); 
    System.out.println(a.getText()); 
} 

希望這會有所幫助。

+0

好吧,我試過了,它的工作。另外,我如何將jtextfield添加到arraylist並使用循環打印出值? – Ramal 2013-03-08 19:15:50

+0

列表 textFields = new ArrayList (); \t textFields.add(Name); \t \t \t 爲(INT I = 0; I Ramal 2013-03-08 19:22:42

+0

我總是這樣做:List textFields = new ArrayList <>(); textFields.add(名稱); for(JTextField field:textFields){System.out.println(field.get(i).getText()); }但是你的解決方案也應該起作用。我可以請你接受這個答案嗎? – 2013-03-08 20:15:53

1

你所看到的並不是一個錯誤。這是打印沒有定義toString()方法的對象的結果。

JTextField a = x.getName(); 
System.out.println(a); 

當你傳遞一個對象來System.out.println()那麼對象toString()被調用。由於JTextField沒有toString(),所以調用標準的Object.toString()方法。

一個更好的辦法是:

System.out.println(a.getText()); 
+0

'JTextField'沒有'toString()'方法,不,但是在這種情況下它是從'Object'之外的東西繼承它的。儘管如此,這也是問題的原因(以及一個很好的解決方案)。 – 2013-03-08 17:50:26