⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logindialog.java

📁 ErGo是一个很早的Java通用围棋服务器(IGS/NNGS)客户端程序。有全部源码和文档
💻 JAVA
字号:
package ergo.ui;

// $Id: LoginDialog.java,v 1.3 1999/08/13 01:20:09 sigue Exp $

/*
 *  Copyright (C) 1999  Carl L. Gay and Antranig M. Basman.
 *  See the file copyright.txt, distributed with this software,
 *  for further information.
 */

import ergo.*;
import ergo.util.*;
import ergo.server.*;
import ergo.logic.*;
import java.awt.*;
import java.awt.event.*;

/**
 * A dialog for entering the username and password.
 * LoginDialog is created by TerminalWindow, and single instance lasts for
 * entire run.
 *
 * +++ This could be an inner class inside Controller, since that's
 *     really the only place it's used.  Same with some of the other
 *     dialogs, I'm sure.
 */

public class LoginDialog extends ErgoDialog implements ActionListener, Optionizable {
  private static String nameString = "Login name";
  private static String passString = "Password name";
  private TextField login = new TextField(16);
  public TextField password = new TextField(16);
  private Button okButton = new Button("  OK  ");
  private Button cancelButton = new Button("Cancel");
  private TerminalWindow window;
  private ServerConnection conn;

  public boolean hecho = false;
  public boolean passwordSent = false;
  private InformDialog informDialog;

  LoginDialog (TerminalWindow term, ServerConnection conn) {
    super(term, "Login to " + conn.shortName(), true, false);	// parent, title, modal
    Ergo.opser.expressOwnership(nameString, Optionizer.TYPE_STRING, null, "");
    Ergo.opser.expressOwnership(passString, Optionizer.TYPE_STRING, null, "");
    Ergo.opser.expressOwnership(Ergo.opser.currentString,
        Optionizer.TYPE_INTEGER, this, new Integer(0));
    window = term;
    this.conn = conn;

    okButton.addActionListener(this);
    cancelButton.addActionListener(this);
    login.addActionListener(this);
    password.addActionListener(this);

    Panel p1 = new Panel();
    GridBagLayout gbl = new GridBagLayout();
    GridBagConstraints gbc = new GridBagConstraints();
    p1.setLayout(gbl);
    int marg = 10;
    int midh = 3;
    int midv = 7;
    gbc.gridwidth = 1;
    Insets i = new Insets(2, marg, 2, marg);
    gbc.insets = i;
    gbc.weightx = 1.0;
    gbc.weighty = 1.0;
    gbc.anchor = GridBagConstraints.WEST;

    i.top = marg;
    i.right = 0;
    makeIt(p1, gbl, gbc, new Label("Login name:"));

    i.right = marg;
    i.left = midh;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    makeIt(p1, gbl, gbc, login);

    gbc.gridwidth = 1;
    i.top = midv;
    i.left = marg;
    i.bottom = marg;
    i.right = 0;
    makeIt(p1, gbl, gbc, new Label("Password:"));

    i.right = marg;
    i.left = midh;
    gbc.gridwidth = GridBagConstraints.REMAINDER;
    makeIt(p1, gbl, gbc, password);
    password.setEchoChar('*');
    add("Center", p1);

    Panel p3 = new Panel();
    p3.setLayout(new FlowLayout(FlowLayout.RIGHT));
    p3.add(okButton);
    p3.add(cancelButton);
    add("South", p3);

    fillFields();
    //Initialize this dialog to its preferred size.
    if (Util.isWindows())
      setSize(250, 125);
    else
      pack();
  }

  private void fillFields() {
    login.setText   ( Ergo.opser.getStringOption(nameString));
    password.setText( Ergo.opser.getStringOption(passString));
    }    

  // Listens for changes in the current option set number, and changes
  // contents of fields as necessary.

  public void optionEvent(String keyword, Object arg) {
    if (Ergo.opser.isSameKey(Ergo.opser.currentString, keyword)) {
      fillFields();
      }
    }

  // GridBagLayout utility function, perhaps move to some global utility class.
  void makeIt(Container co, GridBagLayout gbl, GridBagConstraints gbc,
	      Component c) {
    gbl.setConstraints(c, gbc);
    co.add(c);
  }

  private void finish () {
    hecho = true;
    window.setAccountName(login.getText());
    conn.send(login.getText());
    if (Ergo.opser.getBooleanOption(GlobalOptions.saveloginString)) {
      Ergo.opser.updateOption(nameString, login.getText());
      Ergo.opser.updateOption(passString, password.getText());
    }
    else {
      // blast any existing info. User clearly doesn't want it...!
      Ergo.opser.updateOption(nameString, "");
      Ergo.opser.updateOption(passString, "");
    }
    close();
  }

  public void actionPerformed (ActionEvent event) {
    Object source = event.getSource();
    int llen = login.getText().length();
    int plen = password.getText().length();

    if (source == cancelButton) {
      conn.close();
      close();
    }
    else if (source == okButton) {
      if (llen == 0) {
	String[] msg = {"Invalid login name or password.",
			"Please enter a username and password."};
	new InformDialog(window, "Invalid Login", ColumnLayout.LEFT, msg)
	  .open();
      }
      else
	finish();
    }
    else if (llen == 0)
      login.requestFocus();
    else if (plen == 0)
      password.requestFocus();
    else if (source == login) {
      password.requestFocus();
      password.selectAll();
    }
    else if (source == password)
      finish();
  }

}  // end class LoginDialog

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -