0

第三个代码示例包含错误 - 如何解决?

在下面的代码中,我生成了一个名为“生成器”的方法。此方法接收一个 JTextField 和一个 JLabel 作为参数。

它生成单独的 JPanel 并将它们添加到另一个 JPanel(带有边框“Vermieter”的 JPanel)。结果应如下所示(标记为红色):

http://imageshack.us/photo/my-images/853/stammdateneraffsenguibe.png/

在这里,我将 JTextFields 实例化为字段:

private JTextField txtplzvermieter;
private JTextField txtemailvermieter;
private JTextField txtgeburtsdatumvermieter;
private JTextField txthandyvermieter;
private JTextField txtidvermieter;
private JTextField txtnamevermieter;
private JTextField txtortvermieter;
private JTextField txtstrassevermieter;
private JTextField txttelefonvermieter;
private JTextField txtvornamevermieter;

在这里,我正在调用我上面描述的方法

        public  void vermieterPanel(JPanel verPanel){
         verPanel.add(generator( "ID", txtidvermieter ));
       verPanel.add(generator("Name", txtnamevermieter ));
       verPanel.add(generator( "Vorname", txtvornamevermieter ));
       verPanel.add(generator( "Straße", txtstrassevermieter ));
       verPanel.add(generator("PLZ", txtplzvermieter ));
       verPanel.add(generator( "Ort", txtortvermieter ));
       verPanel.add(generator( "Geburtsdatum", txtgeburtsdatumvermieter ));
       verPanel.add(generator( "Telefon", txttelefonvermieter ));
       verPanel.add(generator("Handy", txthandyvermieter ));
       verPanel.add(generator( "E-Mail", txtemailvermieter ));

这是包含错误的方法生成器:

      public JPanel generator(String lableText, JTextField s){   // generiert ein Panel mit einer Zeile aus lable + TextFeld

     JPanel gens = new JPanel();
     JLabel lable = new JLabel(lableText);
     lable.setPreferredSize(new Dimension(100,25));

     s = new JTextField();
     s.setPreferredSize(new Dimension(200, 25));


    gens.add(lable);
    gens.add(s);
    return gens;
  }

后来我无法在我的 TeftFields 上获得引用,.getText();因为我在这里创建了对新 JTextField-Object 的引用s = new JTextField();

如果我删除该行以访问我的对象,我会得到一个空指针异常。

我究竟做错了什么?

4

3 回答 3

0

原始值永远不会被创造出来。你需要这样做

private JTextField txtplzvermieter = new JTextField();

对于他们每个人。但它必须在方法之外,而不是在内部。

于 2012-04-07T21:51:27.933 回答
0

java中你不能将对象作为引用传递,它永远不会发生
这是创建java语言的目的,最小的内存管理
如果你将对象作为参数传递,对象引用的副本将被传递
,所以每次更改field除了使用关键字为它分配一个新对象时,对象' s 将被反映new,在这里您将松开对象的抓取尝试将您的JField s 设为 global class fields,并且不要通过参数部分将它们传递给方法.

于 2012-04-07T21:55:51.690 回答
0

当然你会得到一个异常,因为你在初始化之前传递了 JTextield !
您只是在声明它,
在将其作为参数传递之前使用 new 关键字对其进行初始化。

于 2012-04-07T22:02:31.640 回答