TestPanel.java
package ClientPart;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.net.*;
public class TestPanel extends JPanel implements ActionListener,Runnable{
private Socket connectToServer;
private DataInputStream inFromServer;
private DataOutputStream outToServer;
private Thread thread;
private Timer testTimer;
private int testTime;
private JButton startButton;
private JLabel timeLabel;
private JTextArea questionArea;
private Checkbox radioButton[] = new Checkbox[4];
private CheckboxGroup buttonGroup = new CheckboxGroup();
private JButton answerButton;
private JButton questionButton;
private JButton scoreButton;
public TestPanel(InetAddress add,int port){
initPanelGUI();
try{
connectToServer = new Socket(add,port);
inFromServer = new DataInputStream(
connectToServer.getInputStream());
outToServer = new DataOutputStream(
connectToServer.getOutputStream());
System.out.println(connectToServer.getInetAddress());
}
catch(IOException e){
System.out.println("TestPanel连接错误");
startButton.setEnabled(false);
}
testTimer = new Timer(1000,this);
thread = new Thread(this);
thread.start();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==startButton){
startButtonPerformed();
}
if(e.getSource()==testTimer){
testTimerPerformed();
}
if(e.getSource()==questionButton){
questionButtonPerformed();
}
if(e.getSource()==answerButton){
answerButtonPerformed();
}
if(e.getSource()==scoreButton){
scoreButtonPerformed();
}
}
public void run(){
String inStr ="";
while(true){
try{
inStr = inFromServer.readUTF();
if(inStr.startsWith("考试时间")){
inStr = inStr.substring(inStr.indexOf("@")+1);
testTime = Integer.parseInt(inStr);
timeLabel.setText(convertTime(testTime));
testTimer.start();
}
if(inStr.startsWith("下一题")){
inStr = inStr.substring(inStr.indexOf("@")+1);
questionArea.setText(inStr);
if(inStr.startsWith("试题结束")){
testTimer.stop();
questionButton.setEnabled(false);
answerButton.setEnabled(false);
scoreButton.setEnabled(true);
}
}
if(inStr.startsWith("成绩")){
JOptionPane.showMessageDialog(null,inStr,"成绩显示",JOptionPane.INFORMATION_MESSAGE);
socketClosing();
}
}
catch(Exception e){
socketClosing();
questionArea.setText("服务器连接终止");
break;
}
}
}
private void initPanelGUI(){
setLayout(new BorderLayout());
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridLayout(2,1));
startButton = new JButton("开始考试");
startButton.addActionListener(this);
timeLabel = new JLabel("考试剩余时间");
northPanel.add(startButton);
northPanel.add(timeLabel);
add(northPanel,BorderLayout.NORTH);
questionArea = new JTextArea(30,10);
questionArea.setLineWrap(true);
questionArea.setFont(new Font("幼圆",Font.PLAIN,16));
int vScroll = ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;
int hScroll = ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;
add(new JScrollPane(questionArea,vScroll,hScroll),BorderLayout.CENTER);
JPanel southPanel = new JPanel();
JPanel radioPanel = new JPanel();
String s[] = {"A","B","C","D"};
for(int i=0;i<radioButton.length;i++){
radioButton[i] = new Checkbox(s[i],buttonGroup,false);
radioPanel.add(radioButton[i]);
}
answerButton = new JButton("提交答案");
answerButton.setEnabled(false);
answerButton.addActionListener(this);
questionButton = new JButton("下一题");
answerButton.setEnabled(false);
questionButton.addActionListener(this);
scoreButton = new JButton("成绩");
scoreButton.setEnabled(false);
scoreButton.addActionListener(this);
southPanel.add(radioPanel);
southPanel.add(answerButton);
southPanel.add(questionButton);
southPanel.add(scoreButton);
add(southPanel,BorderLayout.SOUTH);
}
private String convertTime(int time){
int leftTime = time/1000;
int leftHour = leftTime/3600;
int leftMinute = (leftTime-leftHour*3600)/60;
int leftSecond = leftTime%60;
String timeStr = "剩余时间:"+leftHour+"小时 "+leftMinute+"分 "+leftSecond+"秒 ";
return timeStr;
}
public void startButtonPerformed(){
startButton.setEnabled(false);
questionButton.setEnabled(true);
try{
outToServer.writeUTF("开始考试");
}
catch(IOException ioe){
System.out.println("向服务器写\"开始考试\"失败");
}
}
public void testTimerPerformed(){
testTime -= 1000;
timeLabel.setText(convertTime(testTime));
if(testTime<=0){
testTimer.stop();
questionButton.setEnabled(false);
answerButton.setEnabled(false);
}
}
public void questionButtonPerformed(){
questionButton.setEnabled(false);
answerButton.setEnabled(true);
try{
outToServer.writeUTF("下一题");
}
catch(IOException ioe){
System.out.println("向服务器写\"下一题\"失败");
}
}
public void answerButtonPerformed(){
String answer = "";
questionButton.setEnabled(true);
answerButton.setEnabled(false);
for(int i = 0;i<radioButton.length;i++){
if(radioButton[i].getState()){
answer = radioButton[i].getLabel();
break;
}
}
try{
outToServer.writeUTF("提交答案@"+answer);
}
catch(IOException ioe){
System.out.println("向服务器\"提交答案\"失败");
}
}
public void scoreButtonPerformed(){
try{
scoreButton.setEnabled(false);
outToServer.writeUTF("成绩");
}
catch(IOException ioe){
System.out.println("要求服务器发送\"成绩\"失败");
}
}
private void socketClosing(){
try{
inFromServer.close();
outToServer.close();
connectToServer.close();
}
catch(Exception e){
System.out.println("关闭socket异常!");
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
ClientFrame.java
package ClientPart;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class ClientFrame extends JFrame {
TestPanel myPanel;
public ClientFrame(String s){
super(s);
Container container = getContentPane();
try{
myPanel = new TestPanel(InetAddress.getLocalHost(),5500);
}
catch(UnknownHostException e){
System.out.println("找不到主机:");
}
container.add(myPanel,BorderLayout.CENTER);
setSize(400,200);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
ClientFrame frame = new ClientFrame("C/S考试系统");
}
}
评论