如何从另一个Java类[Netbeans]调用JFrame



我知道它以前已经发布过,但我没有取得任何结果,所以我请求帮助。

我正在尝试将我的JFrame类调用到将要设置Comm端口的主类。该框架是使用Netbeans软件中的设计创建的。我的问题是,为什么我的主Java文件无法打开在另一个类中创建的框架

以下是缩短的代码:

主类是SerialTest

package javaapplication1;
import javaapplication1.RCDA_JFrame;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier; 
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent; 
import gnu.io.SerialPortEventListener; 
import java.util.Enumeration;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SerialTest extends JFrame implements SerialPortEventListener {
    public static void main(String[] args) throws Exception {
                JFrame RCDA_JFrame = new JFrame();
                RCDA_JFrame.setVisible(true);
    }
}

我的GUI类是RCDA_JFrame

package javaapplication1;
import java.io.IOException;
//import java.io.OutputStream;
import javaapplication1.SerialTest;
public class RCDA_JFrame extends javax.swing.JFrame {
    //private OutputStream SerialOut;
    public RCDA_JFrame() {
        initComponents();
    }
    public static void main(String args[]) {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new RCDA_JFrame().setVisible(true);
            }
        });
    }
}

首先,只有一个类(GUI类)应该扩展JFrame。然而,这并不是问题的根源。其次,即使两个类都扩展了JFrame(这通常意味着应该实例化一个类),也不会实例化任何一个类。第三,在整个应用程序中应该只有一个main方法。第四,不完全确定GUI类中的main()方法在做什么——为什么它要创建一个RCDA_JFrame(根据标题问题,我认为Serial类应该这样做),为什么它要在一个单独的线程中这样做?最后,确保您正在设置JFrame的大小(尽管您可能已经在initComponents方法中这样做了。)

以下是一些基本代码,允许您从另一个类创建和访问自定义JFrame:

开始类(这是主要类)

public class Start{
    private static CustomJFrame myFrame;
    public static void main(String[] args){
        myFrame = new CustomJFrame();
        //you can edit myFrame's properties here.
    }
}

CustomJFrame类(JFrame类别)

import javax.swing.JFrame;

public class CustomJFrame extends JFrame{
    public CustomJFrame(){
        //set its size in px.
        setSize(200,200);
        //center it on screen.
        setLocationRelativeTo(null);
        //give it a title.
        setTitle("My JFrame");
        //set the close operation.
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //make it visible.
        setVisible(true);
    }
}

经过测试,运行良好。

我建议这样做。不需要两种main方法。

import javax.swing.*;
public class SerialTest{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(RCDA_JFrame::new);
    }
}

这个

public class RCDA_JFrame extends JFrame {
    public RCDA_JFrame() {
        initComponents();
    }
    public void initComponents(){
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

相关内容

  • 没有找到相关文章

最新更新