2016-12-02 9 views
0

私はプログラムを作成しました.2つのテキストフィールドと2つのボタンを持つログインウィンドウです。この段階のactionPerformedメソッドは、テスト目的です。Jpanel UI main()メソッド

私の問題は、すべてのコンポーネントをコンストラクタに入れて、プログラムを実行するために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を使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。したがって、ピクセルの完全なレイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](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); 

むしろAより、LoginUIインスタンス自体のメソッドを呼び出します新しいJFrameを作成します。

次に、mainメソッドでは、LoginUIを作成し、それを表示するように設定する必要があります。これは次のようになります。

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

このコードは完全に入力されたフレームを表示します。ただし、正しいサイズを設定することはできません。通常はloginUI.pack()で自動的にサイズを調整できますが、パネルにnullレイアウトを使用します(これはほぼ普遍的にvery bad ideaと見なされます)。それを訂正したくない場合は、唯一必要なサイズを決定し、その値でloginUI.setSize()を呼び出してください。 I 強くは、nullレイアウトを使用しないことをお勧めします。

これらの変更をすべて行った場合、期待どおりのUIが表示されるはずです。

+0

ありがとう、私はmain()メソッドのサイズを設定しました。私はJavaの新しいリーンです。あなたのアドバイスは本当に私を大いに助けました –

関連する問題