2016-12-02 30 views
0

我編寫了一個程序,它是一個包含兩個文本字段和兩個按鈕的登錄窗口,此階段的actionPerformed方法用於測試目的。我的問題是,我把所有的組件在構造函數中,我不知道如何編寫我的main()方法爲了讓程序運行,我嘗試了一些喜歡抓取類的引用,設置可見性,但沒有一個可行。Jpanel UI main()方法

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JPasswordField; 
import javax.swing.JTextField; 


public class LoginUI extends JFrame implements ActionListener 
{ 


JTextField Tusername; 
JTextField Tpassword; 
JButton Login = new JButton("Login"); 
JButton register = new JButton("Register"); 
JLabel passwordLabel = new JLabel("Password"); 
JLabel userLabel = new JLabel("User"); 

public String username; 
public String password; 

public LoginUI() 
{ 

    JFrame frame = new JFrame("Login or register"); 
    JPanel Panel = new JPanel(); 
    frame.add(Panel); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    Login.setBounds(10, 80, 80, 25); 
    Panel.add(Login); 
    Login.addActionListener(this); 

    register.setBounds(180, 80, 80, 25); 
    Panel.add(register); 
    register.addActionListener(this); 

    Panel.setLayout(null); 

    JLabel userLabel = new JLabel("User"); 
    userLabel.setBounds(10, 10, 80, 25); 
    Panel.add(userLabel); 

    Tusername = new JTextField(20); 
    Tusername.setBounds(100, 10, 160, 25); 
    Panel.add(Tusername); 

    JLabel passwordLabel = new JLabel("Password"); 
    passwordLabel.setBounds(10, 40, 80, 25); 
    Panel.add(passwordLabel); 

    Tpassword = new JPasswordField(20); 
    Tpassword.setBounds(100, 40, 160, 25); 
    Panel.add(Tpassword); 

} 


public void actionPerformed(ActionEvent e) 
{ 
    if (e.getSource() == Login) 
    { 
     String username = Tusername.getText(); 
     System.out.println(username); 
    } 
    else if (e.getSource() == register) 
    { 
     String password = Tpassword.getText(); 
     System.out.println(password); 
    } 
} 


public static void main(String args[]) 
{ 




}} 
+2

1)Java GUI必須在不同的語言環境中使用不同的PLAF來處理不同的操作系統,屏幕大小,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 2)請學習常用的Java命名規則(命名約定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute',除非它是'UPPER_CASE_CONSTANT')並且一致地使用它。 –

回答

3

好的,這裏有一些錯誤。首先是構造函數的這一部分:

JFrame frame = new JFrame("Login or register"); 

LoginUI已經是JFrame。你不需要創建另一個。替換該行與此:

super("Login or register"); 

,然後更改這些行:

frame.add(Panel); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

這樣:

add(Panel); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

這將呼籲LoginUI實例本身的方法,而不是它創建的新的JFrame

然後,在您的main方法中,您需要創建LoginUI,並將其設置爲可見。這看起來是這樣的:

JFrame loginUI = new LoginUI(); 
loginUI.setVisible(true); 

該代碼將調出完全填充幀。但是,它不會爲它設置正確的大小。通常情況下,您可以使用loginUI.pack()自動調整大小,但在面板中使用null佈局(這幾乎被普遍認爲是very bad idea)。如果您不想糾正這種情況,唯一的選擇是確定它需要的尺寸,然後用這些值調用loginUI.setSize()。我強烈建議不使用null佈局雖然。

如果您進行了所有這些更改,它應該像您期望的那樣調出UI。

+0

非常感謝您,我在main()方法中設置了大小,我是Java的新精簡者,您的建議確實幫助了我很多 –