簡體   English   中英

如何從另一個Java類調用JFrame [Netbeans]

[英]How to call JFrame from another Java class [Netbeans]

我知道它已經發布過,但是我無法獲得任何結果,所以我需要幫助。

我試圖將我的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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM