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考试系统"); } }

评论