2014-11-04 64 views
1

我有这样的代码:基本的Java不同文件中的变量范围

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class pruebaframe extends JFrame 
{ 
     public static String elurl="wut"; 
     JPanel jp = new JPanel(); 
     JLabel jl = new JLabel(); 
     JTextField jt = new JTextField(50); 
     JButton jb = new JButton("Enter"); 

     public pruebaframe() 
     { 
       setTitle("Inserte el URL"); 
       setVisible(true); 
       setSize(600, 200); 
       setDefaultCloseOperation(EXIT_ON_CLOSE); 
       jp.add(jt); 


       jp.add(jb); 

       jb.addActionListener(new ActionListener() 
       { 
         public void actionPerformed(ActionEvent e) 
         { 
          String input = jt.getText(); 
          elurl=input; 
          jl.setText(input); 
         } 
       }); 


       jp.add(jl); 
       add(jp); 

     } 

    public static String getElurl() { 
     return elurl; 
    } 

    public static void setElurl(String elurl) { 
     pruebaframe.elurl = elurl; 
    } 


} 

现在我想用elurl变量在另一类是这样的:

String url1; 
pruebaframe t = new pruebaframe(); 
url1 = t.getElurl(); 

所以每次我在输入的时候Jtextfield url1更改它的值。事情是它没有工作。它不会改变价值。我知道这是一个简单的问题,我只是找不到我错在哪里。

+0

因为他们是不是你正在使用的同一个对象。 New关键字将创建其他实例,您需要的是控制您创建的实例的数量。 – 2014-11-04 01:02:09

+0

但即时创建只是1“pruebaframe”。在另一个文件,但仍然。 – 2014-11-04 01:04:00

+0

我不确定你想要达到什么,但是因为'elurl'是静态的,所以只能有一个值。是否有理由让“elurl”静态? (虽然它是静态的可能不是价值不更新的原因)另外,你在哪里调用'setElurl'?显然,如果你从未设置过,elurl的值不会改变。你在寻找一个侦听文本字段修改的事件侦听器吗? – 2014-11-04 01:58:30

回答

0

当您在更改JTextField中的文本后单击该按钮时,会将一个新的String对象分配给elurl。如果你想每次更新url1,你也应该更新它。

每次您需要elurl值时,请不要指定给变量,请致电t.getElurl();。有了这个,你总是会得到的elurl

+0

我不知道该怎么办。由于url1是另一个文件中的变量 – 2014-11-04 01:11:53

+0

在我的答案中查看建议。 – 2014-11-04 01:17:36

+0

刚刚做到了,仍然没有任何意见:l – 2014-11-04 01:26:14

0

静态变量用途最新的值应该是

String url1; 
url1 = Pruebaframe.elurl; 

但我不建议使用静态变量来传递,因为并发问题的一个参数。

1

通过peuebaframe执行操作时的对象。通过使用另一个类的构造函数或方法。然后你可以得到你的jTextField的更新值。

AnotherClass.java

public class AnotherClass { 

    private pruebaframe t; 

    public AnotherClass(pruebaframe t) { 
     this.t= t; 
    } 

    public void print() { 
     System.out.println("Printing From Another Class: " + t.getElurl()); 
    } 
} 

而且做follwoing。

jb.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      String input = jt.getText(); 
      elurl = input; 
      jl.setText(input); 
      AnotherClass anotherClass = new AnotherClass(pruebaframe.this); 
      anotherClass.print(); 
     } 
    }); 

输出:

Printing From Another Class: <your updated jTextValue>