📄 coordinator.java
字号:
synchronized public void exit() { logout(); Runtime.getRuntime().removeShutdownHook(_shutdownHook); _mainView.dispose(); System.exit(0); } public void initEvent(final String[] users) { SwingUtilities.invokeLater(new Runnable() { public void run() { for(int cont = 0; cont < users.length; ++cont) { _users.addElement(users[cont]); } } }); } public void userJoinEvent(final long timestamp, final String name) { SwingUtilities.invokeLater(new Runnable() { public void run() { _users.addElement(name); _chatView.appendMessage(ChatUtils.formatTimestamp(timestamp) + " - <system-message> - " + name + " joined."); } }); } public void userLeaveEvent(final long timestamp, final String name) { SwingUtilities.invokeLater(new Runnable() { public void run() { int index = _users.indexOf(name); if(index != -1) { _users.remove(index); _chatView.appendMessage(ChatUtils.formatTimestamp(timestamp) + " - " + "<system-message> - " + name + " left."); } } }); } public void userSayEvent(final long timestamp, final String name, final String message) { SwingUtilities.invokeLater(new Runnable() { public void run() { _chatView.appendMessage(ChatUtils.formatTimestamp(timestamp) + " - <" + name + "> " + ChatUtils.unstripHtml(message)); } }); } synchronized public void sendMessage(String message) { if(_session != null) { try { ChatUtils.validateMessage(message); _session.proxy().send_async(new AMI_ChatSession_sendI(_username, message), message); } catch(Chat.InvalidMessageException ex) { _chatView.appendMessage("<system-message> - " + ex.reason); } } } public void setState(ClientState state) { _state = state; if(state == ClientState.Disconnected) { _loginView.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); _chatView.setConnected(false); _loginView.setEnabled(true); _loginView.setConnected(false); _mainView.setEnabled(false); _mainView.setConnected(false); _users.clear(); } else if(state == ClientState.Connecting) { _loginView.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); _loginView.setEnabled(false); _mainView.setEnabled(false); } else if(state == ClientState.Connected) { _chatView.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); _loginView.setConnected(true); _chatView.setConnected(true); _mainView.setEnabled(true); _mainView.setConnected(true); } else if(state == ClientState.Disconnecting) { _chatView.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); _mainView.setEnabled(false); } } public void setError(final String message) { SwingUtilities.invokeLater(new Runnable() { public void run() { if(_state != ClientState.Connected) { setState(ClientState.Disconnected); ErrorView errorView = new ErrorView(_mainView, message); errorView.setSize(430, 200); errorView.setMinimumSize(new Dimension(430, 200)); errorView.setMaximumSize(new Dimension(430, 200)); errorView.setResizable(false); ChatDemoGUIFactory.centerComponent(errorView, _mainView); errorView.show(); } else { _mainView.setEnabled(false); _mainView.setConnected(false); _chatView.appendError(message); } } }); } public String getUsername() { return _username; } // // Callback for the send async operation. // public class AMI_ChatSession_sendI extends Chat.AMI_ChatSession_send { public AMI_ChatSession_sendI(String name, String message) { _name = name; _message = message; } public void ice_response(long timestamp) { userSayEvent(timestamp, _name, _message); } public void ice_exception(Ice.UserException ex) { if(ex instanceof Chat.InvalidMessageException) { final Chat.InvalidMessageException e = (Chat.InvalidMessageException)ex; SwingUtilities.invokeLater(new Runnable() { public void run() { _chatView.appendMessage("<system-message> - " + e.reason); } }); } } public void ice_exception(final Ice.LocalException ex) { new Thread() { public void run() { if(_session != null) { _session.close(); _session = null; } try { if(_communicator != null) { _communicator.destroy(); _communicator = null; } } catch(Ice.LocalException e) { } setError("<system-message> - The connection with the server was unexpectedly lost.\n" + ChatUtils.stack2string(ex) + "\nYou can try to login again from the File menu."); } }.start(); } private final String _name; private final String _message; } public class ErrorView extends JDialog { private JButton bttClose = new JButton("Close"); ErrorView(Frame frame, String message) { super(frame, true); setTitle("Error - Chat Demo"); ActionListener closeListener = new ActionListener() { public void actionPerformed(ActionEvent e) { hide(); } }; bttClose.addActionListener(closeListener); final JTextArea txtErrorMessage = new JTextArea(message, 5, 30); txtErrorMessage.setLineWrap(true); JPanel errorPanel = null; // Build the error panel. { FormLayout layout = new FormLayout("center:pref:grow", "center:pref:grow"); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); javax.swing.ImageIcon icon = MainView.getIcon("/icons/32x32/error.png"); if(icon != null) { builder.append(new JLabel(icon)); builder.nextLine(); } txtErrorMessage.setEditable(false); builder.append(ChatDemoGUIFactory.createStrippedScrollPane(txtErrorMessage)); errorPanel = builder.getPanel(); } JPanel actionsPanel = null; // Build a panel for put actions. { FormLayout layout = new FormLayout("center:3dlu:grow", "pref"); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.append(bttClose); actionsPanel = builder.getPanel(); getRootPane().setDefaultButton(bttClose); } FormLayout layout = new FormLayout("fill:pref:grow", "pref"); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.append(errorPanel); builder.nextLine(); builder.append(actionsPanel); setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); setContentPane(builder.getPanel()); final JPopupMenu textMenu = new JPopupMenu(); textMenu.add(new DefaultEditorKit.CopyAction()); textMenu.pack(); txtErrorMessage.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if (e.isPopupTrigger()) // BUTTON3 is the right mouse button { textMenu.show(txtErrorMessage, e.getX(), e.getY()); } } }); } } private ClientState _state; private final String[] _args; private final MainView _mainView; private final ChatView _chatView; private final LoginView _loginView; private final DefaultListModel _users; private final Thread _shutdownHook; private Ice.Communicator _communicator = null; private Session _session = null; private String _username = "";}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -