Java 从另一个类中清除JTextArea
我对Java非常陌生,我正在给自己设置编写Caesar移位密码解码器的挑战。我基本上是想从另一个类中清除一个JTextArea。我有两个类,一个叫做CrackerGUI的GUI类和一个shift类。JtextArea与以下方法一起位于GUI类中:Java 从另一个类中清除JTextArea,java,swing,inheritance,jtextarea,Java,Swing,Inheritance,Jtextarea,我对Java非常陌生,我正在给自己设置编写Caesar移位密码解码器的挑战。我基本上是想从另一个类中清除一个JTextArea。我有两个类,一个叫做CrackerGUI的GUI类和一个shift类。JtextArea与以下方法一起位于GUI类中: public void setPlainTextBox(String text) { plainTextBox.setText(text); } GUI类还有一个带有以下内容的清除按钮: private void btnClearAction
public void setPlainTextBox(String text)
{
plainTextBox.setText(text);
}
GUI类还有一个带有以下内容的清除按钮:
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
Shift classShift = new Shift();
classShift.btnClear();
}
最后,我在shift类中使用了清除JTextArea的方法
public class Shift extends CrackerGUI {
public void btnClear()
{
CrackerGUI gui = new CrackerGUI();
gui.setPlainText(" ");
System.out.println("testing");
}
}
测试文本正在打印到控制台,但JTextArea无法清除。我不知道为什么:)。我确信这是一个非常简单的错误,但它让我困惑不解。任何帮助都将不胜感激
提前感谢。您可以尝试使用静态方法,因为您最终会创建一个新的gui,然后显示该gui,而不是当前已显示的gui 这将要求父类也是静态的,这可能会导致某些方法出错,只是一个提示 或者,您可以创建自己的setText方法:
void setText(JTextField t, String s){
t.setText(s);
}
这可能使您能够直接编辑当前GUI中的组件。您可以尝试使用静态方法,因为最终会创建一个新的GUI,然后显示该GUI,而不是当前已显示的GUI 这将要求父类也是静态的,这可能会导致某些方法出错,只是一个提示 或者,您可以创建自己的setText方法:
void setText(JTextField t, String s){
t.setText(s);
}
这可能使您能够直接编辑当前GUI中的组件。您误用继承来解决不涉及继承的问题。不要使用Shift extend CrackerGUI,也不要在btnClear()方法内创建新的CrackerGUI对象,因为两个CrackerGUI都不是显示的对象。相反,让Shift键保持对显示的CrackerGUI对象的引用,并让它调用此对象的公共方法 e、 g
public class Shift {
private CrackerGUI gui;
// pass in a reference to the displayed CrackerGUI object
public Shift(CrackerGUI gui) {
this.gui = gui;
}
public void btnClear() {
//CrackerGUI gui = new CrackerGUI();
gui.setPlainText(" ");
System.out.println("testing");
}
}
您也不应该在GUI的actionPerformed方法中创建新的Shift对象,而应该只使用一个作为类字段的Shift对象。您误用继承来解决一个不涉及继承的问题。不要使用Shift extend CrackerGUI,也不要在btnClear()方法内创建新的CrackerGUI对象,因为两个CrackerGUI都不是显示的对象。相反,让Shift键保持对显示的CrackerGUI对象的引用,并让它调用此对象的公共方法 e、 g
public class Shift {
private CrackerGUI gui;
// pass in a reference to the displayed CrackerGUI object
public Shift(CrackerGUI gui) {
this.gui = gui;
}
public void btnClear() {
//CrackerGUI gui = new CrackerGUI();
gui.setPlainText(" ");
System.out.println("testing");
}
}
您也不应该在GUI的actionPerformed方法中创建新的Shift对象,而应该只使用一个作为类字段的Shift对象。假设CrackerGUI是您的GUI,您应该具有以下内容:
public class CrackerGUI {
public void setPlainTextBox(String text)
{
plainTextBox.setText(text);
}
public void btnClear()
{
setPlainTextBox("");
System.out.println("testing");
}
}
最后一件事,永远不要公开您的GUI元素!您应该要求GUI自行清除,并将清除元素的知识隐藏在其中。假设CrackerGUI是您的GUI,您应该具有以下内容:
public class CrackerGUI {
public void setPlainTextBox(String text)
{
plainTextBox.setText(text);
}
public void btnClear()
{
setPlainTextBox("");
System.out.println("testing");
}
}
最后一件事,永远不要公开您的GUI元素!您应该要求GUI自行清除,并将清除元素的知识隐藏在其中。btnClear方法清除新GUI实例的文本区域。这就像你想要清除一张纸上的一张画,你需要一张新的空白纸,然后清除它。原纸将保留其图纸 您需要将gui实例传递给班次:
public class Shift {
private CrackerGUI gui;
public Shift(CrackerGUI gui) {
this.gui = gui;
}
public void btnClear() {
this.gui.setPlainText(" ");
}
}
在CrackerGUI类中:
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
Shift classShift = new Shift(this);
classShift.btnClear();
}
btnClear方法清除新GUI实例的文本区域。这就像你想要清除一张纸上的一张画,你需要一张新的空白纸,然后清除它。原纸将保留其图纸 您需要将gui实例传递给班次:
public class Shift {
private CrackerGUI gui;
public Shift(CrackerGUI gui) {
this.gui = gui;
}
public void btnClear() {
this.gui.setPlainText(" ");
}
}
在CrackerGUI类中:
private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
Shift classShift = new Shift(this);
classShift.btnClear();
}
不。不要把孩子和洗澡水一起扔掉——不要为了解决这个问题而使用静态任何东西来扔掉OOP编程的好处,这个问题可以通过OOP技术更容易地解决。我甚至说有替代方案时,你也不必像个傻瓜。@Firexranger8:你的静态解决方案很糟糕。此外,除了内部类,Java中没有静态类。你的选择毫无意义。哦,你也不礼貌,不。不要把孩子和洗澡水一起扔掉——不要为了解决这个问题而使用静态任何东西来扔掉OOP编程的好处,这个问题可以更容易地通过OOP技术来解决。当我甚至说有替代方案时,你也不必是个混蛋。@Firexranger8:你的静态解决方案很糟糕。此外,除了内部类,Java中没有静态类。你的选择毫无意义。哦,你也很不礼貌。为什么要让Shift扩展CrackerGUI?@HovercraftFullOfEels-Oops!这是一个小错误,实际上不需要扩展GUI本身为什么要使用Shift扩展CrackerGUI?@HovercraftFullOfEels-Oops!这是一个小错误,实际上没有必要扩展GUI本身