📄 chatframe.java
字号:
/*
* ChatFrame.java
*
* Created on January 27, 2004, 10:13 PM
*/
package gov.nist.applet.phone.ua.gui;
import java.net.URL;
import javax.swing.*;
import gov.nist.applet.phone.media.messaging.VoiceRecorder;
import gov.nist.applet.phone.ua.ChatSessionManager;
import gov.nist.applet.phone.ua.MessengerManager;
import gov.nist.applet.phone.ua.call.AudioCall;
import gov.nist.applet.phone.ua.call.Call;
/**
*
* @author DERUELLE Jean
*/
public class ChatFrame extends javax.swing.JFrame {
String contactAddress=null;
MessengerManager sipMeetingManager=null;
ChatSessionManager chatSessionManager=null;
IncomingMessageFrame incomingMessageFrame=null;
/** Creates new form ChatFrame */
public ChatFrame(
Object parent,
String contactAddress,
MessengerManager sipMeetingManager,
ChatSessionManager chatSessionManager) {
this.chatSessionManager=chatSessionManager;
this.contactAddress=contactAddress.trim().toLowerCase();
this.sipMeetingManager=sipMeetingManager;
initComponents();
if(parent instanceof JApplet){
JApplet applet=(JApplet)parent;
jLabel1.setIcon(new ImageIcon(
applet.getImage(
applet.getCodeBase(),
"short_nisthome_banner.jpg")));
jLabel2.setIcon(new ImageIcon(
applet.getImage(
applet.getCodeBase(),
"short_logo.jpg")));
}
else{
//Get current classloader
ClassLoader cl = this.getClass().getClassLoader();
URL url=cl.getResource("images/short_nisthome_banner.jpg");
if(url!=null)
jLabel1.setIcon(new ImageIcon(url));
URL url2=cl.getResource("images/short_logo.jpg");
if(url2!=null)
jLabel2.setIcon(new ImageIcon(url2));
}
this.setSize(750, 430);
jTextArea1.requestFocus();
//this.setResizable(false);
this.setTitle("In conversation with "+contactAddress);
//sipMeetingManager.createInstantMessagingSession("sip:"+contactAddress);
}
/****************************** GUI METHODS *******************************/
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {//GEN-BEGIN:initComponents
jSplitPane1 = new javax.swing.JSplitPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea2 = new javax.swing.JTextArea();
jPanel2 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jPanel3 = new javax.swing.JPanel();
jLabel3 = new javax.swing.JLabel();
jButton4 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
getContentPane().setLayout(null);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jSplitPane1.setDividerLocation(200);
jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
jSplitPane1.setAlignmentX(10.0F);
jSplitPane1.setMaximumSize(new java.awt.Dimension(100, 100));
jSplitPane1.setOneTouchExpandable(false);
jSplitPane1.setPreferredSize(new java.awt.Dimension(100, 100));
jPanel1.setLayout(null);
jTextArea1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(java.awt.event.KeyEvent evt) {
jTextArea1KeyPressed(evt);
}
});
jTextArea2.setEditable(false);
jTextArea2.setLineWrap(true);
jTextArea1.setLineWrap(true);
jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane1.setViewportView(jTextArea2);
jPanel1.add(jScrollPane1);
jScrollPane1.setBounds(0, 0, 460, 200);
jSplitPane1.setTopComponent(jPanel1);
jPanel2.setLayout(null);
jButton1.setText("Send");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel2.add(jButton1);
jButton1.setBounds(390, 10, 63, 50);
jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane2.setViewportView(jTextArea1);
jPanel2.add(jScrollPane2);
jScrollPane2.setBounds(0, 0, 380, 70);
jSplitPane1.setBottomComponent(jPanel2);
getContentPane().add(jSplitPane1);
jSplitPane1.setBounds(10, 70, 462, 280);
getContentPane().add(jLabel1);
jLabel1.setBounds(10, 10, 460, 50);
getContentPane().add(jLabel2);
jLabel2.setBounds(500, 70, 191, 310);
jPanel3.setLayout(null);
/*jLabel3.setText("Voice Messaging :");
jLabel3.setEnabled(false);
jPanel3.add(jLabel3);
jLabel3.setBounds(0, 0, 130, 20);
jButton4.setText("Right click & hold to record msg.");
jButton4.setEnabled(false);*/
/*jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});*/
/*jButton4.addMouseListener(new MouseListener(){
public void mousePressed(MouseEvent m){
VoiceRecorder voiceRecorder=VoiceRecorder.getInstance();
//record voice in a buffer
if(voiceRecorder.start())
jButton4.setText("Release to send voice msg.");
}
public void mouseReleased(MouseEvent m){
VoiceRecorder voiceRecorder=VoiceRecorder.getInstance();
jButton4.setText("Right click & hold to record msg.");
//stop recording voice
if(voiceRecorder.stop()){
//send the voice message
sipMeetingManager.sendVoiceMessage(
"sip:"+contactAddress,
voiceRecorder.getRecord());
}
}
public void mouseEntered(MouseEvent m){
}
public void mouseExited(MouseEvent m){
}
public void mouseClicked(MouseEvent m){
}
});
jPanel3.add(jButton4);
jButton4.setBounds(1, 40, 230, 50);*/
getContentPane().add(jPanel3);
jPanel3.setBounds(500, 240, 300, 110);
jButton2.setText("Audio");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonAudioActionPerformed(evt);
}
});
getContentPane().add(jButton2);
jButton2.setBounds(496, 10, 80, 50);
jButton3.setText("Video");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButtonVideoActionPerformed(evt);
}
});
getContentPane().add(jButton3);
jButton3.setBounds(610, 10, 80, 50);
pack();
}//GEN-END:initComponents
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
sendMessage(jTextArea1.getText());
}
private void jButtonAudioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
// Add your handling code here:
if(jButton2.getText().equalsIgnoreCase("audio")){
dial();
}
else if(jButton2.getText().equalsIgnoreCase("stop")){
disableAudioConversation();
stopCall();
}
else if(jButton2.getText().equalsIgnoreCase("cancel")){
jTextArea2.append("You cancelled the call\n");
cancelCall();
}
}//GEN-LAST:event_jButton2ActionPerformed
private void jButtonVideoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
JOptionPane.showMessageDialog(
this,
"feature not available in this release",
"Video feature",
JOptionPane.INFORMATION_MESSAGE);
}//GEN-LAST:event_jButton2ActionPerformed
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
// Add your handling code here:
VoiceRecorder voiceRecorder=VoiceRecorder.getInstance();
if(jButton4.getText().equalsIgnoreCase("talk")){
//record voice in a buffer
if(voiceRecorder.start())
jButton4.setText("Stop");
}
else{
//stop recording voice
if(voiceRecorder.stop()){
jButton4.setText("Talk");
//send the voice message
sipMeetingManager.sendVoiceMessage(
"sip:"+contactAddress,
voiceRecorder.getRecord());
}
}
}//GEN-LAST:event_jButton2ActionPerformed
private void jTextArea1KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1KeyPressed
// Add your handling code here:
if(evt.getKeyCode()==java.awt.event.KeyEvent.VK_ENTER)
sendMessage(jTextArea1.getText());
}
/**
*
*
*/
public void cancelAudioConversation(){
jLabel3.setEnabled(false);
jButton4.setEnabled(false);
jButton2.setEnabled(true);
jButton2.setText("Audio");
if(incomingMessageFrame!=null){
incomingMessageFrame.dispose();
incomingMessageFrame=null;
}
jTextArea2.append("Your buddy has cancelled the call\n ");
}
/**
*
*
*/
public void disableAudioConversation(){
jLabel3.setEnabled(false);
jButton4.setEnabled(false);
jButton2.setText("Audio");
}
/**
*
* @param callee
*/
public void enableAudioConversation(String callee){
AudioCall audioCall=
sipMeetingManager.getCallManager().findAudioCall(callee);
if(audioCall.getVoiceMessaging()){
jButton4.setEnabled(true);
jLabel3.setEnabled(true);
}
jButton2.setText("Stop");
}
/**
*
* @param callStatus
*/
public void updateAudioStatus(String callStatus){
if(callStatus.equalsIgnoreCase(Call.BUSY)){
jTextArea2.append("Your buddy is currently busy, " +
"your call was rejected\n");
jButton2.setText("Audio");
}
else if (callStatus.equalsIgnoreCase(Call.TEMPORARY_UNAVAILABLE)){
jTextArea2.append("Your buddy is currently unavailable\n");
jButton2.setText("Audio");
}
else{
jButton2.setText("Cancel");
}
}
/**
*
*
*/
public void disableVideoConversation(){
}
/**
* Exit the session and the chat frame
*/
protected void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
exitIMSession();
}//GEN-LAST:event_exitForm
/**
* Exit the session and the chat frame
*/
public void exitIMSession(){
if(jButton2.getText().equalsIgnoreCase("Stop"))
stopCall();
//sipMeetingManager.stopInstantMessagingSession("sip:"+contactAddress);
chatSessionManager.removeChatSession(contactAddress);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
/***************************** APPLICATION METHODS ************************/
/**
* Got a new instant message, update the gui
* @param message - message received
*/
public void newMessage(String message){
if(message.indexOf("\n")==0)
message=message.substring("\n".length());
jTextArea2.append(
contactAddress
+ "> "
+ message+"\n");
jTextArea2.setCaretPosition(jTextArea2.getText().length());
}
/**
* Action performed when pushing the Dial Button
*/
protected void dial() {
sipMeetingManager.call("sip:"+contactAddress);
}
/**
* Action performed when pushing the Stop Button
*/
protected void stopCall() {
sipMeetingManager.endCall("sip:"+contactAddress);
}
/**
* Action performed when pushing the Cancel Button
*/
protected void cancelCall() {
sipMeetingManager.cancelCall("sip:"+contactAddress);
}
/**
* Action performed when answering NO to an incoming call
*/
protected void answerBusy(String caller) {
sipMeetingManager.sendBusy(caller);
jButton2.setEnabled(true);
}
/**
* Action performed when answering YES to an incoming call
*/
protected void answerOK(String caller) {
sipMeetingManager.answerCall(caller);
jButton2.setEnabled(true);
}
/**
*
* @param message
*/
protected void sendMessage(String message){
while(message.indexOf("\n")==0)
message=message.substring("\n".length());
if(message.length()<=0)
return;
jTextArea2.append(
sipMeetingManager.getMessageListener().getConfiguration().userURI
+ "> "
+ message+"\n");
jTextArea2.setCaretPosition(jTextArea2.getText().length());
jTextArea1.setText(null);
sipMeetingManager.sendInstantMessage("sip:"+contactAddress,message);
}
/**
*
* @param incomingMessageFrame
*/
public void setIncomingMessageFrame(IncomingMessageFrame incomingMessageFrame){
this.incomingMessageFrame=incomingMessageFrame;
jButton2.setEnabled(false);
}
private javax.swing.ButtonGroup buttonGroup1;
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JSplitPane jSplitPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextArea jTextArea2;
// End of variables declaration//GEN-END:variables
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -