我已经在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(“输出”)的文本?
我希望有人能够帮助我解决这个小问题。
我知道之前已经提到了类似的问题。我试图查看解决问题的解决方案。但是大多数其他问题对我来说太复杂了,无法理解它的全部内容。因此,我现在尝试发布我自己的问题。
答案 0 :(得分:2)
继承不是一切的答案,而这里的答案是 。继承应该模仿“is-a”,而不是想象力的延伸是Account
和UseAccount
。
相反,只需更改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的一部分?”
最后一点注意:为命名变量付出的努力确实很有成效。
答案 1 :(得分: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());
答案 2 :(得分: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())
...