[英]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.