2012-02-22 28 views
4

我正在創建一個程序來運行員工/客戶系統的開始階段,現在我剛剛創建了登錄GUI,但我遇到了一點問題,Java setLocation()不幸事故

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! – 2012-02-22 02:56:10

+0

LOOOOOOOOL。不能相信我錯過了這一點。 OH GOD LOL。 – 2012-02-22 03:11:53

+3

+1 [sscce](http://sscce.org/),但最後保存'setVisible()'。 – trashgod 2012-02-22 03:15:30

回答

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,我同意,這看起來更有希望:-) – 2012-02-22 05:15:55