2016-05-17 48 views
-2

我看過類似的問題,但無法找到我的問題的答案。我有一個主類,它有它自己的JFrame。但是,我創建了另一個Class,創建了另一個JFrame,提示用戶輸入一些數據。主類是主要的應用程序。輔助類應該在主類GUI運行之前彈出。我爲每個類創建了2個不同的包。 所以,我試圖從主類調用次級類的對象,但沒有出現界面。我沒有在代碼中出現任何錯誤,並且應用程序運行,就好像次級類的對象根本沒有被調用一樣。我是Java的新手,希望能對此有所瞭解。如何從類調用GUI(Swing)到主類?

我的代碼如下:

主類

public class TempConverter extends javax.swing.JFrame { 

    public TempConverter() { 
     initComponents(); 
    } 

// More code 

public static void main(String args[]) { 

    DemoUserData test = new DemoUserData(); 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      test.setVisible(true); 
      new TempConverter().setVisible(true); 
     } 
    }); 
} 

中學班級

public class DemoUserData extends javax.swing.JPanel { 

    public DemoUserData() { 
     initComponents(); 
    } 
} 
+0

您正在'JPanel'上調用'setVisible',而不是在其父'JFrame'上調用'setVisible'。 – Berger

回答

1

你的JFrame的是主窗口。在很早出現之前,可能會顯示一個啓動畫面,通常是帶有徽標的小切片。

但是,似乎你想要一些輸入對話框,就像說一個登錄。這不能是一個JPanel,但必須是頂層窗口:JFrame或JDialog。或者其中一個JOptionPane對話框(詢問字符串輸入,或whatevever)。

也許你應該爲當前的JPanel製作一個JFrame,運行它。

DemoUserDataFrame test = new DemoUserDataFrame(this); 

    /* Create and display the form */ 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      test.setVisible(true); 
     } 
    }); 

    public class DemoUserDataFrame extends JFrame { 

     //private final JFrame tempConverter; 

     public DemoUserDataFrame(final JFrame tempConverter) { 
      //this.tempConverter = tempConverter; 
      addWindowListener(new WindowAdapter() { 
       @Override 
       public void windowClosing(WindowEvent e) { 
        tempConverter.setVisible(true); 
       } 
      }); 
     } 
     ... 
    } 

在上面的關閉測試中,會使主JFrame可見。

爲了有一個更好的概述,讓這些類不相互引用,你可以看看模型 - 視圖 - 控制器的概念。然後有一個全球「控制器」類作爲所有業務邏輯的中介。它包含數據(模型)等等。

+0

:-)不要在句子末尾使用點號字符,因爲打破代碼塊 – mKorbel

+0

是的。我只是簡單地將它改成了JFrame,它運行良好。謝謝你的幫助。 –