📄 phonesimulator.java
字号:
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridx = 5;
gridBagConstraints1.gridy = 0;
gridBagConstraints1.weightx = 0.5;
southPanel.add(saveButton, gridBagConstraints1);
hangupButton.setToolTipText("结束通话");
hangupButton.setFont(new java.awt.Font("宋体", 0, 12));
hangupButton.setText("挂断");
hangupButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
hangupButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridx = 2;
gridBagConstraints1.gridy = 1;
southPanel.add(hangupButton, gridBagConstraints1);
redialButton.setToolTipText("重播上次的号码");
redialButton.setFont(new java.awt.Font("宋体", 0, 12));
redialButton.setText("重播");
redialButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
redialButtonActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridx = 3;
gridBagConstraints1.gridy = 0;
southPanel.add(redialButton, gridBagConstraints1);
directListenToggle.setToolTipText("免提通话方式");
directListenToggle.setFont(new java.awt.Font("宋体", 0, 12));
directListenToggle.setText("免提");
directListenToggle.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
directListenToggleActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridx = 2;
gridBagConstraints1.gridy = 0;
southPanel.add(directListenToggle, gridBagConstraints1);
pauseToggle.setToolTipText("暂停通话");
pauseToggle.setFont(new java.awt.Font("宋体", 0, 12));
pauseToggle.setText("暂停");
pauseToggle.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pauseToggleActionPerformed(evt);
}
});
gridBagConstraints1 = new java.awt.GridBagConstraints();
gridBagConstraints1.gridx = 3;
gridBagConstraints1.gridy = 1;
southPanel.add(pauseToggle, gridBagConstraints1);
topPanel.add(southPanel, java.awt.BorderLayout.SOUTH);
getContentPane().add(topPanel, java.awt.BorderLayout.CENTER);
}//GEN-END:initComponents
/** 存储地址簿
* @param evt 所发生的事件
*/
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
System.out.println("Path:"+getCodeBase().getPath());
System.out.println("host:"+getCodeBase().getHost());
try{
phoneAddSocket=new Socket(host,1200);//建立socket连接
phoneAddSocket.getOutputStream().write(PhoneSimulator.accessAdd);
//向服务器表明现在不是在初始化时访问地址簿
phoneAddSocket.getOutputStream().write(PhoneSimulator.savePhoneAdd);//向服务器表明想写出数据
if(phoneAddSocket.getInputStream().read()==PhoneAddServer.Approved_Operation){
BufferedWriter out=new BufferedWriter(
new OutputStreamWriter(phoneAddSocket.getOutputStream()));//得到输出流
out.write(phoneAddTextArea.getText());
System.out.println(phoneAddTextArea.getText());
out.flush();
out.close();
}
phoneAddSocket.close();
}
catch(IOException e){
System.out.println(e.getMessage());
}
}//GEN-LAST:event_saveButtonActionPerformed
/** 处理重播事件
* @param evt 所发生的事件
*/
private void redialButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_redialButtonActionPerformed
if(currentState==directListenState){//从免提状态重播
leaveDirectListenState();
}
enterAutoDialBState(currentState,lastDialNumber);
}//GEN-LAST:event_redialButtonActionPerformed
/** 处理拨号事件
* @param evt 所发生的事件
*/
private void dialButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dialButtonActionPerformed
enterAutoDialBState(currentState,selectedNum);
}//GEN-LAST:event_dialButtonActionPerformed
/** 处理用户选中地址簿中号码事件
* @param evt 所发生的事件
*/
private void phoneAddTextAreaCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_phoneAddTextAreaCaretUpdate
selectedNum=phoneAddTextArea.getSelectedText();
if( selectedNum!=null && selectedNum.length()==8
&&(currentState==initialState || currentState==directListenState)){//选取了一个合法的电话号码
enterAutoDialAState(currentState);//进入拨号状态A
}
}//GEN-LAST:event_phoneAddTextAreaCaretUpdate
/** 存储拨出的号码到地址簿
* @param evt 所发生的事件
*/
private void storeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_storeButtonActionPerformed
//连接状态时将用户拨出的新号码加入电话簿中
String newNumber=phoneNumDisp.getText();
int startPos=phoneAddTextArea.getText().indexOf(newNumber);
if(startPos==-1){//在电话簿中未找到该号码
phoneAddTextArea.append(newNumber+"\n");
startPos=phoneAddTextArea.getText().indexOf(newNumber);
}
}//GEN-LAST:event_storeButtonActionPerformed
/** 处理暂停事件
* @param evt 所发生的事件
*/
private void pauseToggleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pauseToggleActionPerformed
if(currentState==connectState){//当前状态为连接状态
if(pauseToggle.isSelected()){//如果暂停键被选中表示暂停
connectAudio.stop();
}
else{//暂停键释放接通继续
connectAudio.loop();
}
}
}//GEN-LAST:event_pauseToggleActionPerformed
/** 处理挂断事件
* @param evt 所发生的事件
*/
private void hangupButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_hangupButtonActionPerformed
hangUpAudio.play();
switch(currentState){
case(manualDialState)://当前状态处于手动拨号状态
leaveManualDialState();//作离开手动拨号状态的一些处理
goBack(fromStateMan);//退回到进入手动拨号的那个状态
break;
case(autoDialBState):
leaveAutoDialBState();
goBack(fromStateAuto);//退回到进入自动拨号的那个状态
break;
case(connectState):
leaveConnectState();
goBack(fromStateCon);//退回到进入手动拨号的那个状态
break;
}
}//GEN-LAST:event_hangupButtonActionPerformed
/** 处理电话拨号事件
* @param evt 所发生的事件
*/
private void processNumberDial(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_processNumberDial
if(firstDial){//第一次拨号表示刚进入手工拨号状态
enterManualDialState(currentState);
}
noOfNumber++;//又拨了一个号码
if(evt.getActionCommand() =="#"){
noOfNumber--;//恢复为原来的拨号值
dialNonDigitAudio.play();
}
else{
if(evt.getActionCommand()=="*"){//按了*键取消原来的所输的号码
dialNonDigitAudio.play();
noOfNumber=0;//重新计数
phoneNumDisp.setText("");//清空原来显示的号码
}
else{//剩余的数字键
//??拨号的声音
dialDigitAudio[Integer.parseInt(evt.getActionCommand())].play();
phoneNumDisp.setText(phoneNumDisp.getText()+
evt.getActionCommand());
if(noOfNumber==8 ){//拨了8个电话号码后,自动进入连接状态
/*if(currentState==autoDialBState && autoDialInterrupted){
//自动拨号进程已被中断
}
else{
*/
String phoneNum=phoneNumDisp.getText();
leaveManualDialState();
enterConnectState(currentState,phoneNum);
}
}
}
}//GEN-LAST:event_processNumberDial
/** 处理免提事件
* @param evt 所发生的事件
*/
private void directListenToggleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_directListenToggleActionPerformed
if(directListenToggle.isSelected()){//如果选中
enterDirectListenState(currentState);
}else//从免提状态返回初态
{
leaveDirectListenState();
enterInitialState(currentState);
}
}//GEN-LAST:event_directListenToggleActionPerformed
/** 刷新控件状态。根据系统所处的不同的刷新界面
* @param state 系统现在所处的状态
*/
private void refreshComponent(int state) {
switch (state){
case initialState:// 置初态下个按钮的状态
dialButton.setEnabled(false);//拨号按钮无效
directListenToggle.setEnabled(true);//免提键有效
if(lastDialNumber.length()>0){//上次拨号有记录
redialButton.setEnabled(true);//置重播键有效
}
else//否则置重播键无效
{
redialButton.setEnabled(false);
}
hangupButton.setEnabled(false);// 挂断键无效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(false);//暂停键无效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(false);//存储键无效
Button0.setEnabled(true);//数字键全有效
Button1.setEnabled(true);
Button2.setEnabled(true);
Button3.setEnabled(true);
Button4.setEnabled(true);
Button5.setEnabled(true);
Button6.setEnabled(true);
Button7.setEnabled(true);
Button8.setEnabled(true);
Button9.setEnabled(true);
ButtonStar.setEnabled(false);// *键无效
ButtonSharp.setEnabled(true);//#键有效
break;
case (directListenState):
dialButton.setEnabled(false);//拨号按钮无效
directListenToggle.setEnabled(true);//免提键有效
if(lastDialNumber.length()>0){//上次拨号有记录
redialButton.setEnabled(true);//置重播键有效
}
else//否则置重播键无效
{
redialButton.setEnabled(false);
}
hangupButton.setEnabled(false);// 挂断键无效
pauseToggle.setSelected(false);//未选暂停键.
pauseToggle.setEnabled(false);//暂停键无效.
//saveButton.setEnabled(true);//保存键有效
storeButton.setEnabled(false);//存储键无效
Button0.setEnabled(true);//数字键全有效
Button1.setEnabled(true);
Button2.setEnabled(true);
Button3.setEnabled(true);
Button4.setEnabled(true);
Button5.setEnabled(true);
Button6.setEnabled(true);
Button7.setEnabled(true);
Button8.setEnabled(true);
Button9.setEnabled(true);
ButtonStar.setEnabled(false);// *键无效
ButtonSharp.setEnabled(true);//#键有效
break;
case (autoDialAState):
dialButton.setEnabled(true);//拨号按钮有效
directListenToggle.setEnabled(false);//免提键无效
if(lastDialNumber.length()>0){//上次拨号有记录
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -