0

我已经用 PHP 和其他 Web 编程语言编程了很长时间,但我对 Java 真的很陌生。由于我在使用 PHP 编程时一直使用程序化方法,因此我对 OOP 也很陌生。现在我正在学习一个非常基本的 Java 教程。

我有这个代码用于显示不同的“银行账户”:

public class UseAccount extends JFrame {

public static void main(String[] args) {

    Account myAccount = new Account();
    Account yourAccount = new Account();

    myAccount.name = "Jimmy";  
    myAccount.address = "Arjeplogsvägen 1";
    myAccount.balance = 1250.70;

    yourAccount.name = "Greg Giraldo";
    yourAccount.address = "Fishermans friend's 4";
    yourAccount.balance = -5820.30;

    myAccount.display();
    System.out.println();
    yourAccount.display();
}
}

这是“帐户”类:

public class Account{
    String name;
    String address;
    double balance;

    void display() {
        System.out.print(name);
        System.out.print(" (");
        System.out.print(address);
        System.out.print(") has $");
        System.out.print(balance);
    }     
}

这真的很好用。但现在我想将此信息输出到 JTextArea。所以我为 UseAccount 类编写了这段代码:

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

public class UseAccount extends JFrame {
        JTextArea output = new JTextArea();

    public UseAccount() {
        setLayout(new BorderLayout());
        add(output, BorderLayout.CENTER);
    }

    public static void main(String[] args) {
    UseAccount frame = new UseAccount();
    frame.setTitle("Account");
    frame.setSize(500,400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

    Account myAccount = new Account();
    Account yourAccount = new Account();

    myAccount.name = "Jimmy";  
    myAccount.address = "Arjeplogsvägen 1";
    myAccount.balance = 1250.70;

    yourAccount.name = "Greg Giraldo";
    yourAccount.address = "Fishermans friend's 4";
    yourAccount.balance = -5820.30;

    myAccount.display();
    System.out.println();
    yourAccount.display();
    }
}

然后我试图让“Account”类扩展“UseAccount”类,然后使用 output.append("the_text") 来显示文本。但这显然不起作用:

public class Account extends UseAccount{
    String name;
    String address;
    double balance;

    void display() {
        output.append(name);
        output.append(" (");
        output.append(address);
        System.out.print(") has $");
        System.out.print(balance);
    }     
}

我没有将每个 system.out.print() 都更改为 output.append,因为它无论如何都不起作用。

我想知道如何从其他类访问和更改我的 textarea("output") 的文本?

我希望有人能够帮助我解决这个小问题。

我知道之前已经在这里提出了类似的问题。我试图查看针对这些问题的解决方案来解决我的问题。但是大多数其他问题对我来说太复杂了,无法理解它的全部内容。因此,我现在尝试发布我自己的问题。

4

3 回答 3

2

继承不是所有事情的答案,这里根本不是答案。继承应该模拟“is-a”,并且无论如何想象都是Accounta UseAccount

相反,只需将签名更改为display()aJTextArea作为参数;然后在display()代码中你可以JTextArea使用。当你打电话时display(),传JTextArea进去。

换句话说:

void display(JTextArea ta) {
    ta.append(name);
    ...

进而

// "frame" is the UseAccount object that contains the JTextArea variable `output`
myAccount.display(frame.output);

大多数时候,正确的问题不是“X 怎样才能访问 Y 的一部分”,而是“Y 怎样才能让 X 访问自己的一部分?”

最后一点:在命名变量上付出的小努力确实有回报。

于 2012-06-11T14:12:58.393 回答
2

该类Account可能应该更符合。

public class Account extends UseAccount{
    String name;
    String address;
    double balance;

    @Override
    public String toString() {
        return name + 
          " (" +
          address +
          ") has $" + 
          balance;
    }     
}

通过覆盖toString(),我们可以简单地执行以下操作:

Account account = //...
System.out.println(account);
output.setText(account.toString());
于 2012-06-11T14:29:08.400 回答
1

在阅读以前的答案时,我正在考虑另一种方法(差别不大):

-class Account 提供将放置在 TextArea 上的文本

- 框架获取该文本并将其放置在 TextArea

在您需要的类帐户中

public class Account {
    String name;
    String address;
    double balance;

    public String toString() {
        return name + address + balance; // This string should follow your desired format
    }     
}

在框架中:

...
output.append(account.toString())
...
于 2012-06-11T14:40:07.167 回答