forked from pfxzyqnua/daizuhua_git2
parent
ffe9d024ab
commit
00f01feecc
@ -0,0 +1,236 @@
|
||||
import java.awt.*;
|
||||
import java.awt.event.*;
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @version 1.33 2007-06-12
|
||||
* @author Cay Horstmann
|
||||
*/
|
||||
public class DataExchangeTest
|
||||
{
|
||||
public static void main(String[] args)
|
||||
{
|
||||
EventQueue.invokeLater(new Runnable()
|
||||
{
|
||||
public void run()
|
||||
{
|
||||
DataExchangeFrame frame = new DataExchangeFrame();
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A frame with a menu whose File->Connect action shows a password dialog.
|
||||
*/
|
||||
class DataExchangeFrame extends JFrame
|
||||
{
|
||||
public DataExchangeFrame()
|
||||
{
|
||||
setTitle("DataExchangeTest");
|
||||
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
|
||||
|
||||
// construct a File menu
|
||||
|
||||
JMenuBar mbar = new JMenuBar();
|
||||
setJMenuBar(mbar);
|
||||
JMenu fileMenu = new JMenu("File");
|
||||
mbar.add(fileMenu);
|
||||
|
||||
// add Connect and Exit menu items
|
||||
|
||||
JMenuItem connectItem = new JMenuItem("Connect");
|
||||
connectItem.addActionListener(new ConnectAction());
|
||||
fileMenu.add(connectItem);
|
||||
|
||||
// The Exit item exits the program
|
||||
|
||||
JMenuItem exitItem = new JMenuItem("Exit");
|
||||
exitItem.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
System.exit(0);
|
||||
}
|
||||
});
|
||||
fileMenu.add(exitItem);
|
||||
|
||||
textArea = new JTextArea();
|
||||
add(new JScrollPane(textArea), BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
public static final int DEFAULT_WIDTH = 300;
|
||||
public static final int DEFAULT_HEIGHT = 200;
|
||||
|
||||
private PasswordChooser dialog = null;
|
||||
private JTextArea textArea;
|
||||
|
||||
/**
|
||||
* The Connect action pops up the password dialog.
|
||||
*/
|
||||
|
||||
private class ConnectAction implements ActionListener
|
||||
{
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
// if first time, construct dialog
|
||||
|
||||
if (dialog == null) dialog = new PasswordChooser();
|
||||
|
||||
// set default values
|
||||
dialog.setUser(new User("yourname", null));
|
||||
|
||||
// pop up dialog
|
||||
if (dialog.showDialog(DataExchangeFrame.this, "Connect"))
|
||||
{
|
||||
// if accepted, retrieve user input
|
||||
User u = dialog.getUser();
|
||||
textArea.append("user name = " + u.getName() + ", password = "
|
||||
+ (new String(u.getPassword())) + "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A password chooser that is shown inside a dialog
|
||||
*/
|
||||
class PasswordChooser extends JPanel
|
||||
{
|
||||
public PasswordChooser()
|
||||
{
|
||||
setLayout(new BorderLayout());
|
||||
|
||||
// construct a panel with user name and password fields
|
||||
|
||||
JPanel panel = new JPanel();
|
||||
panel.setLayout(new GridLayout(2, 2));
|
||||
panel.add(new JLabel("User name:"));
|
||||
panel.add(username = new JTextField(""));
|
||||
panel.add(new JLabel("Password:"));
|
||||
panel.add(password = new JPasswordField(""));
|
||||
add(panel, BorderLayout.CENTER);
|
||||
|
||||
// create Ok and Cancel buttons that terminate the dialog
|
||||
|
||||
okButton = new JButton("Ok");
|
||||
okButton.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
ok = true;
|
||||
dialog.setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
JButton cancelButton = new JButton("Cancel");
|
||||
cancelButton.addActionListener(new ActionListener()
|
||||
{
|
||||
public void actionPerformed(ActionEvent event)
|
||||
{
|
||||
dialog.setVisible(false);
|
||||
}
|
||||
});
|
||||
|
||||
// add buttons to southern border
|
||||
|
||||
JPanel buttonPanel = new JPanel();
|
||||
buttonPanel.add(okButton);
|
||||
buttonPanel.add(cancelButton);
|
||||
add(buttonPanel, BorderLayout.SOUTH);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dialog defaults.
|
||||
* @param u the default user information
|
||||
*/
|
||||
public void setUser(User u)
|
||||
{
|
||||
username.setText(u.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the dialog entries.
|
||||
* @return a User object whose state represents the dialog entries
|
||||
*/
|
||||
public User getUser()
|
||||
{
|
||||
return new User(username.getText(), password.getPassword());
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the chooser panel in a dialog
|
||||
* @param parent a component in the owner frame or null
|
||||
* @param title the dialog window title
|
||||
*/
|
||||
public boolean showDialog(Component parent, String title)
|
||||
{
|
||||
ok = false;
|
||||
|
||||
// locate the owner frame
|
||||
|
||||
Frame owner = null;
|
||||
if (parent instanceof Frame) owner = (Frame) parent;
|
||||
else owner = (Frame) SwingUtilities.getAncestorOfClass(Frame.class, parent);
|
||||
|
||||
// if first time, or if owner has changed, make new dialog
|
||||
|
||||
if (dialog == null || dialog.getOwner() != owner)
|
||||
{
|
||||
dialog = new JDialog(owner, true);
|
||||
dialog.add(this);
|
||||
dialog.getRootPane().setDefaultButton(okButton);
|
||||
dialog.pack();
|
||||
}
|
||||
|
||||
// set title and show dialog
|
||||
|
||||
dialog.setTitle(title);
|
||||
dialog.setVisible(true);
|
||||
return ok;
|
||||
}
|
||||
|
||||
private JTextField username;
|
||||
private JPasswordField password;
|
||||
private JButton okButton;
|
||||
private boolean ok;
|
||||
private JDialog dialog;
|
||||
}
|
||||
|
||||
/**
|
||||
* A user has a name and password. For security reasons, the password is stored as a char[], not a
|
||||
* String.
|
||||
*/
|
||||
class User
|
||||
{
|
||||
public User(String aName, char[] aPassword)
|
||||
{
|
||||
name = aName;
|
||||
password = aPassword;
|
||||
}
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
public char[] getPassword()
|
||||
{
|
||||
return password;
|
||||
}
|
||||
|
||||
public void setName(String aName)
|
||||
{
|
||||
name = aName;
|
||||
}
|
||||
|
||||
public void setPassword(char[] aPassword)
|
||||
{
|
||||
password = aPassword;
|
||||
}
|
||||
|
||||
private String name;
|
||||
private char[] password;
|
||||
}
|
Loading…
Reference in new issue