Java-如何添加将使用初始类的gui
我已经用几个类编写了一个标准控制台应用程序(web抓取)。main Function唯一能做的就是: -创建一个类的实例 -从创建的对象调用一个方法 现在我需要添加最简单的GUI,它将包含一个按钮来执行上述第二个操作(调用方法)和textarea,以显示NetBeans输出现在显示的所有内容 我用GUI类创建了新文件。它基本上是一个包含jButton和jTextArea的jFrame。我设法让文本输出像我想象的那样工作。但是我不知道如何设置按钮。Netbeans creator将我重定向到这部分代码:Java-如何添加将使用初始类的gui,java,jbutton,Java,Jbutton,我已经用几个类编写了一个标准控制台应用程序(web抓取)。main Function唯一能做的就是: -创建一个类的实例 -从创建的对象调用一个方法 现在我需要添加最简单的GUI,它将包含一个按钮来执行上述第二个操作(调用方法)和textarea,以显示NetBeans输出现在显示的所有内容 我用GUI类创建了新文件。它基本上是一个包含jButton和jTextArea的jFrame。我设法让文本输出像我想象的那样工作。但是我不知道如何设置按钮。Netbeans creator将我重定向到这部分
private void buttonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
p1.use(); // <<< my initial try
}
private void按钮执行的操作(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
p1.use();//您需要通过构造函数或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
通过使jFrame对象在主类中保持静态,使其可以访问对象p1
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();
}
}
听说静态对象或变量不是最好的习惯,特别是对初学者来说,但它确实是一个解决方案。感谢您提供的示例。您是对的,第二个解决方案可能是可行的,我只列出了2个选项。您还可以选择将P1设置为单例,以便您可以从任何地方访问它,但这取决于nds如果类P1真的适合这样的用途。谢谢。我之前怎么能不考虑它…然而,问题来了-如果我需要在GUI类构造之后在main中创建对象,该怎么办。从GUI调用一些setter来传递对象?但是我想我需要在运行应用程序之前声明它。可能声明ArrayList将是一个解决方案?然后构造函数和其他setter将能够在任何时候捕获任意数量的对象并生成某种堆栈。我是否遵循正确的轨道?除非您计划使用多个P1类,否则您不应该需要ArrayList。如果GUI类必须在P1类之前声明,您可以添加一个acti作为setter的一部分,在setter中,您将拥有this.p1=p1;
,然后是buttonName.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){p1.use();})
谢谢。这是一个理论问题。我的意思是特殊情况:一个对象在GUI类实例之前创建,但是在运行时需要创建更多的对象。比如:p1=新的P1Class(/*参数*/);GUI=新的MyGuiClass(p1,/*其他参数*/);p2=新的P1Class(/*参数*/);GUI.set(p2);然而,我认为一旦在main类中创建GUI实例,在main中就不会有进一步的操作,因为所有的处理都交给GUI和用户,所以提到的示例没有任何用处。这个假设正确吗?