📄 chatpanel.java
字号:
package at.ac.uni_linz.tk.vchat;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
/**
* Works as a container for the chat interaction. It includes the ViewPanel,
* RoomPanel, MoodPanel, the control components for the history mode and the
* TextField for the message text.
*
* @author Arno Huetter
* (C)opyright by the Institute for Computer Science, Telecooperation Department, University of Linz
*/
public class ChatPanel extends Panel implements ActionListener, MouseListener, KeyListener, FocusListener {
private ChatApplet chatApplet;
private Dimension roomListPanelSize = ChatRepository.ROOM_DIMENSION;
private Dimension roomCanvasSize = ChatRepository.ROOM_DIMENSION;
private Dimension moodCanvasSize = ChatRepository.ROOM_DIMENSION;
private InsetsPanel viewPanel, controlPanel, mapPanel, roomPanel, textPanel, textNavigationPanel, portraitPanel, historyCheckboxGroupPanel;
private NavigationCanvas navigationCanvas;
private RoomListPanel roomListPanel;
private MoodCanvas moodCanvas;
private TextField chatField;
private Label chatLabel;
private RoomCanvas roomCanvas;
private ViewCanvas viewCanvas;
private HistoryPanel pnlHistory;
private TextArea messageArea;
/**
* Constructs the ChatPanel.
*
* @param chatParam the ChatApplet which administrates the
* users
* @param repositoryParam the ChatRepository, where commonly used objects
* are being stored
*/
public ChatPanel(ChatApplet chatParam) {
super();
GridBagConstraints constraints;
chatApplet = chatParam;
viewPanel = new InsetsPanel(ChatRepository.INSETS);
viewPanel.setLayout(new BorderLayout());
viewCanvas = new ViewCanvas(chatApplet);
viewCanvas.setBackground(ChatRepository.COMPONENT_BACKGROUND);
viewPanel.add(viewCanvas, "Center");
controlPanel = new InsetsPanel();
controlPanel.setLayout(new GridLayout(3, 1));
roomListPanel = new RoomListPanel(chatParam);
roomListPanel.setSize(roomListPanelSize);
roomPanel = new InsetsPanel(ChatRepository.INSETS);
roomCanvas = new RoomCanvas(chatApplet);
roomCanvas.setBackground(ChatRepository.COMPONENT_BACKGROUND);
roomCanvas.setSize(roomCanvasSize);
roomPanel.add(roomCanvas);
portraitPanel = new InsetsPanel(ChatRepository.INSETS);
moodCanvas = new MoodCanvas(chatApplet);
moodCanvas.setSize(moodCanvasSize);
portraitPanel.add(moodCanvas);
controlPanel.add(roomListPanel);
controlPanel.add(roomPanel);
controlPanel.add(portraitPanel);
textPanel = new InsetsPanel(new Insets(ChatRepository.INSETS.top, 0, ChatRepository.INSETS.bottom, 0));
chatLabel = new Label("Chat:", Label.RIGHT);
pnlHistory = new HistoryPanel("History", chatApplet);
chatField = new TextField(100);
messageArea = new TextArea("", 6, 25, TextArea.SCROLLBARS_VERTICAL_ONLY);
messageArea.setEditable(false);
chatField.addKeyListener(this);
chatField.addActionListener(this);
chatField.addMouseListener(this);
textPanel.setLayout(new GridBagLayout());
if (chatApplet.getBooleanParam("HistoryBarVisibility", true)) {
ChatUtil.addWithRemainingConstraints(textPanel, pnlHistory);
}
ChatUtil.addWithBeginningConstraints(textPanel, chatLabel);
ChatUtil.addWithRemainingConstraints(textPanel, chatField);
navigationCanvas = new NavigationCanvas(chatApplet);
navigationCanvas.setForwardIcon(chatApplet.getImage(ChatRepository.IMAGE_ARROW_FORWARD));
navigationCanvas.setBackwardIcon(chatApplet.getImage(ChatRepository.IMAGE_ARROW_BACKWARD));
navigationCanvas.setLeftIcon(chatApplet.getImage(ChatRepository.IMAGE_ARROW_LEFT));
navigationCanvas.setRightIcon(chatApplet.getImage(ChatRepository.IMAGE_ARROW_RIGHT));
textNavigationPanel = new InsetsPanel(new Insets(0, ChatRepository.SMALL_INSETS.left, 0, ChatRepository.SMALL_INSETS.right));
textNavigationPanel.setLayout(new BorderLayout());
textNavigationPanel.add(textPanel, "Center");
textNavigationPanel.add(navigationCanvas, "East");
textNavigationPanel.add(messageArea, "South");
viewPanel.add(textNavigationPanel, "South");
setLayout(new BorderLayout());
setFont(ChatRepository.STANDARD_FONT);
add(viewPanel, "Center");
add(controlPanel, "East");
chatApplet.setHistoryPanel(pnlHistory);
}
/**
* Invoked when a component gains the keyboard focus.
*
* @param event the FocusEvent
*/
public void focusGained(FocusEvent event) {
}
/**
* Invoked when a component loses the keyboard focus.
*
* @param event the FocusEvent
*/
public void focusLost(FocusEvent event) {
}
/**
* Invoked when an action occurs.
*
* @param event the ActionEvent
*/
public void actionPerformed(ActionEvent event) {
if (event.getSource() == chatField) {
chatApplet.setUserMessage(chatApplet.getCurrentUser().getId(), chatField.getText(), true);
// lastMsgLabel2.setText(chatField.getText());
chatField.setText("");
}
}
/**
* Contains functionality for all possible KeyEvents on the ChatPanel and its
* components.
*
* @param event the KeyEvent
*/
public void handleKeyEvent(KeyEvent event) {
if (event.isAltDown()) {
if (event.getKeyCode() == KeyEvent.VK_DOWN) {
chatApplet.setUserPosition(chatApplet.getCurrentUser().getId(), new Point(chatApplet.getCurrentUser().getPosition().x - (int)(Math.cos((double)(chatApplet.getCurrentUser().getHeading()) * Math.PI / 180.0) * 2.0), chatApplet.getCurrentUser().getPosition().y + (int)(Math.sin((double)(chatApplet.getCurrentUser().getHeading()) * Math.PI / 180.0) * 2.0)), event.getID() == KeyEvent.KEY_RELEASED);
}
else if (event.getKeyCode() == KeyEvent.VK_UP) {
chatApplet.setUserPosition(chatApplet.getCurrentUser().getId(), new Point(chatApplet.getCurrentUser().getPosition().x + (int)(Math.cos((double)(chatApplet.getCurrentUser().getHeading()) * Math.PI / 180.0) * 2.0), chatApplet.getCurrentUser().getPosition().y - (int)(Math.sin((double)(chatApplet.getCurrentUser().getHeading()) * Math.PI / 180.0) * 2.0)), event.getID() == KeyEvent.KEY_RELEASED);
}
else if (event.getKeyCode() == KeyEvent.VK_LEFT) {
chatApplet.setUserHeading(chatApplet.getCurrentUser().getId(), chatApplet.getCurrentUser().getHeading() + 2, event.getID() == KeyEvent.KEY_RELEASED);
}
else if (event.getKeyCode() == KeyEvent.VK_RIGHT) {
chatApplet.setUserHeading(chatApplet.getCurrentUser().getId(), chatApplet.getCurrentUser().getHeading() - 2, event.getID() == KeyEvent.KEY_RELEASED);
}
}
if (event.getComponent() == chatField) {
if (chatApplet.historyMode())
chatApplet.exitHistoryMode();
}
}
/**
* Invoked when a key has been pressed.
*
* @param event the KeyEvent
*/
public void keyPressed(KeyEvent event) {
handleKeyEvent(event);
}
/**
* Invoked when a key has been released.
*
* @param event the KeyEvent
*/
public void keyReleased(KeyEvent event) {
handleKeyEvent(event);
}
/**
* Invoked when a key has been typed.
*
* @param event the KeyEvent
*/
public void keyTyped(KeyEvent event) {
handleKeyEvent(event);
}
/**
* Invoked when the mouse has been clicked on a component.
*
* @param event the MouseEvent
*/
public void mouseClicked(MouseEvent event) {
if (event.getComponent() == chatField) {
if (chatApplet.historyMode())
chatApplet.exitHistoryMode();
}
}
/**
* Invoked when the mouse enters a component.
*
* @param event the MouseEvent
*/
public void mouseEntered(MouseEvent event) {
}
/**
* Invoked when the mouse exits a component.
*
* @param event the MouseEvent
*/
public void mouseExited(MouseEvent event) {
}
/**
* Invoked when a mouse button has been pressed on a component.
*
* @param event the MouseEvent
*/
public void mousePressed(MouseEvent event) {
}
/**
* Invoked when a mouse button has been released on a component.
*
* @param event the MouseEvent
*/
public void mouseReleased(MouseEvent event) {
}
/**
* Repaints the ViewPanel. Should be called after changes in the User's view.
*/
public void repaintView() {
viewCanvas.repaint();
}
/**
* Repaints the RoomList. Should be called after Users have moved to Rooms.
*/
public void updateRoomList() {
roomListPanel.updateRoomList();
}
/**
* Fills the RoomList. Should be called after Romm data has changed.
*/
public void fillRoomList() {
roomListPanel.fillRoomList();
}
/**
* Repaints the RoomPanel. Should be called after changes of users' position
* or heading.
*/
public void repaintRoom() {
roomCanvas.repaint();
}
/**
* Repaints the MoodPanel. Should be called after changes of User's mood.
*/
public void repaintMood() {
moodCanvas.repaint();
}
public void addMessage(String userName, String message) {
messageArea.append("\n<" + userName + "> " + message);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -