我已经编写了一个包含多个类的标准控制台应用程序(Web抓取)。主要功能唯一的作用是: - 创建一个类的实例 - 从创建的对象中调用一个方法
现在我需要添加最简单的GUI,它将包含一个按钮来执行上述第二个操作(调用方法)和textarea,以显示NetBeans输出现在显示的所有内容。
我用GUI类创建了新文件。它基本上是一个带有jButton和jTextArea的jFrame。我设法让文本输出像我假设的那样工作。但是我不知道如何设置按钮。 Netbeans创建者将我重定向到这部分代码:
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
p1.use(); // <<< my initial try
}
其中p1是在原始文件的主类中创建的对象。 Netbeans标志着&#34; p1&#34; as&#34;找不到符号&#34;这是可以理解的。但是,我怎样才能执行这么简单的操作呢?我基本上需要Button来推动程序。
答案 0 :(得分:0)
您需要通过构造函数或setter将p1对象从主类传递到GUI的类中,否则它不知道您要访问的是什么。
例如,
public class MainClass {
private MyGuiClass gui;
private P1Class p1;
public static void main(String[] args) {
p1 = new P1Class( /*arguments*/ );
gui = new MyGuiClass( p1, /*other arguments*/ );
}
// Other logic...
}
public class MyGuiClass extends JFrame {
private P1Class p1;
public MyGuiClass( P1Class p1, /*other arguments*/ ) {
this.p1 = p1;
}
// Other logic...
}
此时,您可以在代码的其余部分中引用p1对象。
答案 1 :(得分:0)
有很多方法可以实现这一目标。
情景1
使对象p1可以通过在Main类中保持静态来访问jFrame对象。
public class Main {
public static P1 p1;
public static void main(String[] args) {
p1 = new P1();
//open window etc.
}
}
public class MyFrame extends JFrame {
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
// Access object by static reference
Main.p1.use();
}
}
场景2
您可以将对象P1
作为参数传递给jFrame对象的构造函数。
public class Main {
public static void main(String[] args) {
P1 p1 = new P1();
new MyFrame(p1);
//open window etc.
}
}
public class MyFrame extends JFrame {
private P1 p1;
public MyFrame(P1 param) {
// Save object inside the JFrame object
this.p1 = param;
}
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
p1.use();
}
}