2013-01-31 68 views
1

我是Java初學者&我正在學習swing api。我遇到了我的代碼問題,我無法弄清楚如何解決它。請幫忙。javax swing - 創建窗口

下面是我使用的代碼示例:

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class HelloWorldApp extends JFrame { 


    public static void main(String args[]) { 

    CustomWindow w = new CustomWindow(); 
    w.setVisible(true); 

    } 

    public CustomWindow() { 

    setSize(500, 500); 
    setTitle("Jacob Perkins"); 
    JLabel lbl = new JLabel("Hello World!"); 
    add(lbl); 

    } 

} 

我的問題是,我得到以下錯誤:

invalid method declaration; return type required 
+2

+1 SSCCE :) –

+0

您需要一個Java教程瞭解,什麼是構造函數。方法和其他OO東西。 –

回答

4
public CustomWindow() { 
    setSize(500, 500); 
    setTitle("Jacob Perkins"); 
    JLabel lbl = new JLabel("Hello World!"); 
    add(lbl); 
} 

應該是:

public void CustomWindow() { 
    setSize(500, 500); 
    setTitle("Jacob Perkins"); 
    JLabel lbl = new JLabel("Hello World!"); 
    add(lbl); 
} 

或者不是void(不返回任何內容),我們會放入想要返回的數據類型。該方法現在必須包括一個return語句返回適當的數據類型相匹配的方法簽名,或者你會得到你的錯誤:

invalid method declaration; return type required

Returning a Value from a Method

除非你正試圖創造比方法HelloWorldApp類的構造函數必須給出類名(對Providing Constructors for Your Classes讀):

public HelloWorldApp() { 
    setSize(500, 500); 
    setTitle("Jacob Perkins"); 
    JLabel lbl = new JLabel("Hello World!"); 
    add(lbl); 
} 

其他建議

  • 不要不必要地延伸JFrame

  • 不要調用setSize而是使用正確的LayoutManager和/或覆蓋getPreferredSize並返回Dimension S的適合其內容。在將其設置爲可見之前,但在添加組件之前,請先在JFrame上調用pack()

  • 創建並通過SwingUtilities.invokeLater(Runnable r)塊操作上Event Dispatch Thread Swing組件:

    SwingUtilities.invokeLater(new Runnable() { 
        @Override 
        public void run() { 
         //create and show ui here 
         CustomWindow w = new CustomWindow(); 
         w.setVisible(true); 
        } 
    }); 
    
+0

我只是一個初學者,並不真正知道SwingUtilities.invokeLater()會做什麼。 – JaPerk14

+0

@ JaPerk14看到我的更新...並點擊'Event Dispatch Thread'它會將你鏈接到Java併發課,它應該告訴你所有你需要知道的東西 –

+0

上面你調用SwingUtilities.invokeLater()的代碼示例,你會在public static void main(String args [])中運行這個嗎? – JaPerk14

3

此行

public CustomWindow() { 

書面需要返回類型,如果你不(void爲宜返回任何東西)。然而,這顯然意味着要成爲構造者;如果是這種情況,則需要將其命名爲與其所在的類相同的名稱。您需要將其重命名爲HelloWorldApp或將該類重命名爲CustomWindow

1

在Java中文件名必須匹配它們正在實現的類。所以,你需要更改你的類和文件名CustomWindow或更改你的構造函數的名稱HelloWorldApp的():

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class HelloWorldApp extends JFrame { 


public static void main(String args[]) { 

    HelloWorldApp w = new HelloWorldApp(); 
    w.setVisible(true); 

} 
public HelloWorldApp() { 

    setSize(500, 500); 
    setTitle("Jacob Perkins"); 
    JLabel lbl = new JLabel("Hello World!"); 
    add(lbl); 

} 

}