gpt4 book ai didi

java - 如何从另一个类访问和更改 JTextArea

转载 作者:行者123 更新时间:2023-12-01 17:30:58 24 4
gpt4 key购买 nike

我已经使用 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();
}
}

这是“Account”类:

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") 的文本?

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

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

最佳答案

继承并不是所有问题的答案,而这根本不是答案。继承应该建模“is-a”,并且绝对不能想象 AccountUseAccount

相反,只需更改 display() 的签名以将 JTextArea 作为参数即可;然后在 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 授予对其自身部分的访问权限?”

最后一点:在命名变量上投入的小努力确实会得到返回。

关于java - 如何从另一个类访问和更改 JTextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10981761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com