📄 chatpanel.java
字号:
/* * Copyright (c) 2000 Lyrisoft Solutions, Inc. * Used by permission */package com.lyrisoft.chat.client.gui.awt102;import java.awt.*;import java.util.StringTokenizer;import java.util.NoSuchElementException;import com.lyrisoft.chat.Translator;import com.lyrisoft.chat.ICommands;import com.lyrisoft.chat.client.gui.IChatRoom;import com.lyrisoft.chat.client.gui.IChatClientInputReceiver;import com.lyrisoft.chat.client.gui.IChatGUIFactory;import com.lyrisoft.chat.client.gui.IQuery;import com.lyrisoft.chat.client.gui.IQueryCallback;import com.lyrisoft.awt.*;/** * JDK1.0.2 compliant ChatPanel. * * This object implements IChatRoom. It is a Panel, not a Frame. This way, we * can stick these things anywhere, not necessarily just in a frame. */public class ChatPanel extends Panel implements IChatRoom, IQueryCallback { protected Color bgColor; protected IChatClientInputReceiver _inputReceiver; protected String _room; protected String _title; protected IChatGUIFactory _factory; protected GridBagLayout gridbag = new GridBagLayout(); protected TextArea txtMessages; protected List lstUsers; protected TextField txtInput; protected Panel _buttonPanel; protected Component btnClose; protected Component btnEmote; protected Component btnPing; protected Component btnUserInfo; protected Component btnEmotePrivate; protected Component btnPrivate; protected Component btnStats; protected Component btnHelp; protected MenuItem miPrivate = new MenuItem(Translator.getMessage("label.private")); protected MenuItem miEmotePrivate = new MenuItem(Translator.getMessage("label.mesg")); protected MenuItem miEmote = new MenuItem(Translator.getMessage("label.emote")); protected MenuItem miStats = new MenuItem(Translator.getMessage("label.stats")); protected MenuItem miPing = new MenuItem(Translator.getMessage("label.ping")); protected MenuItem miWhois = new MenuItem(Translator.getMessage("label.whois")); protected boolean _showingBigButtons = true; protected static final int PING = 0; protected static final int PRIVATE = 1; protected static final int EMOTE = 2; protected static final int PRIVATE_EMOTE = 3; protected static final int WHOIS = 4; // Netscape for Mac doesn't like my pop up dialog windows.... public static boolean s_useDialogs = false; public ChatPanel(IChatGUIFactory factory, String room, String title, IChatClientInputReceiver inputReceiver) { _title = title; _factory = factory; bgColor = (Color)factory.getAttribute("bgColor"); if (bgColor == null) { bgColor = new Color(0x384CC7); } _room = room; _inputReceiver = inputReceiver; try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } public ChatPanel(IChatGUIFactory factory, String room, IChatClientInputReceiver inputReceiver) { this(factory, room, room, inputReceiver); } public String getName() { return _room; } public void requestFocus() { txtInput.requestFocus(); } // receive messages from the ChatPanel public void inputEvent(String txt) { _inputReceiver.inputEvent(_room, txt); } public void displayPrivateMessage(String user, String message) { displayMessage(Translator.getMessage("private", user, message)); } public void displayPrivateEmote(String user, String message) { displayMessage(Translator.getMessage("mesg", user, message)); } public void displayMessage(String user, String message) { displayMessage(user + ": " + message); } public void displayMessage(String message) { txtMessages.appendText(message + "\n"); } public void displayError(String error) {// _factory.playAudioClip("error.au"); displayMessage(Translator.getMessage("error", error)); } public void setUserList(String[] users) { synchronized (lstUsers) { lstUsers.clear(); for (int i=0; i < users.length; i++) { lstUsers.addItem(users[i]); } lstUsers.invalidate(); lstUsers.getParent().validate(); lstUsers.repaint(); lstUsers.getParent().repaint(); } } public String[] getUserList() { synchronized (lstUsers) { String[] list = new String[lstUsers.countItems()]; for (int i=0; i < list.length; i++) { list[i] = lstUsers.getItem(i); } return list; } } public void userJoinedRoom(String user) { displayMessage(Translator.getMessage("joined", user)); if (!listContains(user)) { lstUsers.addItem(user); lstUsers.invalidate(); lstUsers.getParent().validate(); lstUsers.repaint(); lstUsers.getParent().repaint(); } } private boolean listContains(String s) { int len = lstUsers.countItems(); for (int i=0; i < len; i++) { if (s.equals(lstUsers.getItem(i))) { return true; } } return false; } public void userPartedRoom(String user, boolean signoff) { if (signoff) { displayMessage(Translator.getMessage("part2", user)); } else { displayMessage(Translator.getMessage("part1", user)); } int len = lstUsers.countItems(); for (int i=0; i < len; i++) { if (user.equals(lstUsers.getItem(i))) { lstUsers.delItem(i); lstUsers.invalidate(); lstUsers.repaint(); break; } } } protected Component createTextWidget() { txtMessages = new TextArea(); txtMessages.setBackground(Color.white); txtMessages.setText(""); txtMessages.setEditable(false); return txtMessages; } protected Component createTitleArea() { Label l = new Label(_title); l.setBackground(bgColor); l.setForeground(Color.white); l.setFont(new Font("Dialog", Font.BOLD, 14)); return l; } private void jbInit() throws Exception { setLayout(gridbag); Component lblTitle = createTitleArea(); if (lblTitle != null) { gridbag.setConstraints(lblTitle, Constraints.create(0, 0, 2, 1, 1.0, 0, GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); add(lblTitle); } Component c = createButtonPanel(); _buttonPanel = new Panel(); _buttonPanel.setBackground(bgColor); GridBagLayout gb2 = new GridBagLayout(); _buttonPanel.setLayout(gb2); gb2.setConstraints(c, Constraints.create(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); _buttonPanel.add(c); gridbag.setConstraints(_buttonPanel, Constraints.create(0, 1, 2, 1, 1.0, 0, GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 0)); add(_buttonPanel); Component txtWidget = createTextWidget(); gridbag.setConstraints(txtWidget, Constraints.create(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); add(txtWidget); lstUsers = new List(); gridbag.setConstraints(lstUsers, Constraints.create(1, 2, 1, 1, 0.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.VERTICAL, new Insets(0, 0, 0, 0), 0, 0)); add(lstUsers); txtInput = new TextField(); txtInput.setBackground(Color.white); gridbag.setConstraints(txtInput, Constraints.create(0, 3, 2, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 0, 0, 0), 0, 4)); add(txtInput); } protected Component createButton(String img, String name) { if (img != null) { try { Image i = _factory.getImage(img); if (i != null && i.getHeight(this) > 0 && i.getWidth(this) > 0) { return new ImageButton(i, name); } } catch (Exception e) { e.printStackTrace(); } } Button b = new Button(name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -