【问题标题】:How to apply Getter/Setter method for private variable in GUI?如何在 GUI 中为私有变量应用 Getter/Setter 方法?
【发布时间】:2013-03-08 17:08:01
【问题描述】:

这个程序的目的是从另一个类访问私有变量 jtextfield。我创建了这个从 JTextField 获取用户输入的简单程序。我在一个类中有 getter 和 setter 方法,在另一个类中有按钮和字段。因此,当用户在文本字段中键入内容时,我想打印一些内容。但是当点击按钮时,程序不打印并报错:

错误:javax.swing.JTextField[,140,​​62,124x20,layout=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();
}



}

【问题讨论】:

  • 附带说明,Java 中的标准是使用lowerCamelCase 作为成员变量。

标签: java swing jtextfield setter getter


【解决方案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());
}

希望这会有所帮助。

【讨论】:

  • 好的,我试过了,它奏效了。另外,如何将 jtextfield 添加到 arraylist 并使用循环打印出值?
  • List textFields = new ArrayList(); textFields.add(Name); for(int i = 0;i
  • 我总是这样: List textFields = new ArrayList(); textFields.add(Name); for (JTextField field : textFields) { System.out.println(field.get(i).getText());但是您的解决方案也应该有效。我可以请你接受这个答案吗?
  • 好的,谢谢。好吧,我的解决方案在 Name[i] = textFields.get(i).getValue(); 上给了我一个错误
  • 哦,我已经在评论中的代码中监督了这一点 - 没有 getValue() 函数...
【解决方案2】:

您看到的不是错误。这是打印一个没有定义toString() 方法的对象的结果。

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

当您将一个对象传递给System.out.println() 时,就会调用该对象toString()。由于JTextField 没有toString(),所以调用标准的Object.toString() 方法。

更好的方法是:

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

【讨论】:

  • JTextField 没有toString() 方法,不,但在这种情况下它是从Object 以外的东西继承的。不过,这问题的原因(也是一个很好的解决方案)。
猜你喜欢
  • 2014-03-27
  • 2017-08-26
  • 1970-01-01
  • 2013-06-22
  • 2021-08-08
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多