2012-02-22 1 views
4

저는 직원/고객 시스템을 운영하는 프로그램을 만드는 초기 단계에 있습니다. 지금은 로그인 GUI를 만들었지 만,Java setLocation() mishap

에 약간 문제가 있습니다.
setLocation(); 

메서드입니다. 250, 250으로 설정했지만 내 GUI의 높이가 절대적으로 떨어집니다. 만약 누군가가 이것을 고칠 수 있다면 내 코드는 아래에있다.

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 

public class Main extends JFrame { 
    private static final int HEIGHT = 1003; 
    private static final int WIDTH = 400; 

    JTextField _uid = new JTextField(10); 
    JPasswordField _pwd = new JPasswordField(10); 
    JButton _login = new JButton("Login"); 
    JButton _reset = new JButton("Reset"); 

    public Main() { 
     super("Login - Durptech"); 
     Container pane = getContentPane(); 
     setLayout(new FlowLayout()); 

     add(new JLabel("User ID:")); 
      add(_uid); 
     add(new JLabel("Password:")); 
      add(_pwd); 

      add(_login); 
      add(_reset); 
       _reset.addActionListener(new ResetButtonHandler()); 


     setSize(WIDTH, HEIGHT); 
     setVisible(true); 
     setResizable(false); 
     setLocation(250, 250); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
    } 

    private class ResetButtonHandler implements ActionListener { 
     public void actionPerformed(ActionEvent e) { 
      _uid.setText(""); 
      _pwd.setText(""); 
      _uid.requestFocusInWindow(); 
     } 
    } 

    public static void main(String[] args) { 
     new Main(); 
    } 
} 
+3

높이를 **입니다 ** 절대적으로 견과류 - 1003! –

+0

LOOOOOOOOL. 내가 그걸 놓쳤다는 것을 믿을 수 없어. 오 신로드 롤. –

+3

[sscce] (http://sscce.org/)는 +1하지만 last는'setVisible()'을 저장하십시오. – trashgod

답변

4

나 자신을, 나는이 대화 상자를 생성하기위한 JOptionPane하지 않는 JFrame의를 사용하십시오 : 응용 프로그램의

import java.awt.Component; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.Insets; 
import java.awt.event.ActionEvent; 

import javax.swing.*; 

@SuppressWarnings("serial") 
public class UserIdPasswordPanel extends JPanel { 
    JTextField selectionField = new JTextField(10); 
    JTextField userIDField = new JTextField(10); 
    JTextField passwordField = new JTextField(10); 

    public UserIdPasswordPanel(JFrame frame) { 
     add(new JButton(new AbstractAction("Login") { 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      LoginPane loginPane = new LoginPane(UserIdPasswordPanel.this, 
        "My Login Panel"); 
      int result = loginPane.show(); 
      System.out.println("" + result); 
      if (result >= 0) { 
       String selectionText = LoginPane.options[result].toString(); 
       if (selectionText.equals(LoginPane.LOGIN)) { 
        System.out.println("do some login action here"); 
       } else if (selectionText.equals(LoginPane.RESET)) { 
        System.out.println("do some reset action here"); 
       } 

       // just to show that this works: 
       selectionField.setText(selectionText); 
       userIDField.setText(loginPane.getUserId()); 

       // !! never do this !!!!! 
       passwordField.setText(new String(loginPane.getPassword())); 
      } 
     } 
     })); 
     selectionField.setEditable(false); 
     userIDField.setEditable(false); 
     passwordField.setEditable(false); 
     add(new JLabel("Selection: ")); 
     add(selectionField); 
     add(new JLabel("ID: ")); 
     add(userIDField); 
     add(new JLabel("Password: ")); 
     add(passwordField); 
    } 

    private static void createAndShowGui() { 
     JFrame frame = new JFrame("UserIdPasswordPanel"); 

     UserIdPasswordPanel mainPanel = new UserIdPasswordPanel(frame); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 

class LoginPane { 
    public static final String LOGIN = "Login"; 
    public static final String RESET = "Reset"; 
    public static final Object[] options = { LOGIN, RESET }; 
    private JTextField userIdField = new JTextField(10); 
    private JPasswordField passwordField = new JPasswordField(10); 
    private Component parent; 
    private String title; 
    private JPanel message = new JPanel(); 

    public LoginPane(Component parent, String title) { 
     this.parent = parent; 
     this.title = title; 

     message.setLayout(new GridBagLayout()); 

     GridBagConstraints gbc = getGbc(0, 0); 
     message.add(new JLabel("User ID:"), gbc); 
     gbc = getGbc(1, 0); 
     message.add(userIdField, gbc); 
     gbc = getGbc(0, 1); 
     message.add(new JLabel("Password:"), gbc); 
     gbc = getGbc(1, 1); 
     message.add(passwordField, gbc); 
    } 

    private GridBagConstraints getGbc(int x, int y) { 
     GridBagConstraints gbc = new GridBagConstraints(); 
     gbc.gridx = x; 
     gbc.gridy = y; 
     gbc.gridwidth = 1; 
     gbc.gridheight = 1; 
     gbc.insets = new Insets(5, 5, 5, 5); 
     gbc.anchor = (x == 0) ? GridBagConstraints.WEST : GridBagConstraints.EAST; 
     return gbc; 
    } 

    public String getUserId() { 
     return userIdField.getText(); 
    } 

    public char[] getPassword() { 
     return passwordField.getPassword(); 
    } 

    public int show() { 
     Object initialValue = "Login"; 
     return JOptionPane.showOptionDialog(parent, message, title, 
      JOptionPane.YES_NO_OPTION, JOptionPane.PLAIN_MESSAGE, null, 
      options, initialValue); 
    } 
} 
+0

+1, 나는 이것이 더 유망 해 보인다 :-) –