创建类的实例

时间:2009-03-03 16:12:46

标签: java object

我目前正在处理一些我遇到麻烦的代码。

我在GUI上有两个按钮。如果按下一个按钮,它会为字符串赋值以反映此值。

另一个按钮是相同的,只是为字符串分配了不同的值。

此String在构造函数之前的开头以下列方式创建:

public string s = "String"; // public so I can call it in another class

当我想知道在另一个班级中按下了哪个按钮时,问题出现了。我想看看s是什么,所以我必须创建该类GUI的实例:

gui = new GUI(); 

然后再次将s的值重置为“String”,这会破坏我的比较。

有什么方法可以解决这个问题吗?

我尝试了很多想法,但似乎没有任何效果。

7 个答案:

答案 0 :(得分:3)

当您最初创建GUI(即GUI gui = new GUI();)时,请保存该引用,以便您在何时访问该成员s

当您创建新的GUI对象时,该对象从未被用户操纵,因此其s值仅为"String"。您需要保留对原始对象的引用。

答案 1 :(得分:2)

将第一个表单的状态传递给第二个表单或让第一个表单通知第二个表单实时发生特定事件可能是更好的做法。否则你需要将第一个表单的引用传递给第二个表单来进行你正在尝试IE的比较:

public class SecondForm {
    private FirstForm _firstForm = null;
    public SecondForm(FirstForm firstForm){
        _firstForm = firstForm;
    }

    ...

    if(_firstForm.s == "comparison"){
        ...
    }
}

SecondForm secondForm = new SecondForm(this);

答案 2 :(得分:-1)

在这篇文章下面的评论中,我自己和另外两个人已经确定你应该学习java语言,研究面向对象编程的概念(包括对象范围),然后学习如何实现正确的事件处理代码 - 有几种方法可以实现你想要的,我建议我提供的代码和Welbog提供的参考建议的组合(当然,这将需要修改我的代码,但实际上并不多你的主要课程在其他地方)

基本上, google一个java教程(或购买一本书/“获取”一本书),如果你知道一些基本概念,请跳到面向对象的部分。

如果我按照你想要的方式,这里有一些骨架代码:

// imports

public class GUI extends JFrame implements ActionListener {
    public String s = "String";

    public GUI() {
        // initializer code for buttons
        btn1.addActionListener(this);
        btn2.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e) {
        if(s == "???")
            s = "this";
        else
            s = "that";
    }

    // other methods

}

答案 3 :(得分:-1)

我会使用一个监听器来观察'string'变量的状态。

public class Gui
{
    public static final String STRING_PROPERTY = "string";
    private String string = "String";
    private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    private void setString(String string)
    {
        String oldValue = this.string;
        this.string = string;
        propertyChangeSupport.firePropertyChange(STRING_PROPERTY, oldValue, this.string);
    }

    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
    {
        propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
    }
}

此代码段演示了如何向您的类添加propertyChangeListener支持。有兴趣知道'string'值的类将实现PropertyChangeListener并通过'addPropertyChangeListener'方法添加。

答案 4 :(得分:-1)

您可以在每个按钮上使用ActionListener和action命令,如此代码所示

public class GUI  extends JFrame implements ActionListener
{
  public static final String BUTTON_1_PRESSED = "BUTTON_1_PRESSED";
  public static final String BUTTON_2_PRESSED = "BUTTON_2_PRESSED";

  public String s = "String";

  public GUI()
  {
    // create buttons
    button1.addActionListener(this);
    button1.setActionCommand(BUTTON_1_PRESSED);
    button2.addActionListener(this);
    button2.setActionCommand(BUTTON_2_PRESSED);
  }

  public void actionPerformed(ActionEvent e) 
  {
    if(e.getActionCommand().equals(BUTTON_1_PRESSED))
    {
      s = "this";
    }
    else if(e.getActionCommand().equals(BUTTON_2_PRESSED))
    {
      s = "that";
    }
  }
}

答案 5 :(得分:-2)

解读你的问题非常困难。但一般来说,如果您想知道导致事件的按钮,请为每个按钮(或其模型)添加不同的ActionListener。保持代码尽可能简洁。

答案 6 :(得分:-3)

创建一个包含按钮(名称)的额外值。单击相应按钮并从其他类中读取时更改该值。 与s

基本相同的想法