package client.frm; import java.awt.Color; import java.awt.Dialog; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.SwingConstants; import javax.swing.border.LineBorder; import javax.swing.border.TitledBorder; import tools.DateDeal; import data.JQMessage; import data.Portrait; import data.RegUser; import data.User; import data.UserSex; import data.UserState; /** * 新用户注册类。 */ public class RegisterPane extends JFrame implements ActionListener{ private JLabel lblNickName = new JLabel("用户昵称:"); private JLabel lblEmail = new JLabel("E-mail:"); private JLabel lblPassword = new JLabel("登录密码:"); private JLabel lblRePass = new JLabel("重复输入:"); private JLabel lblSex = new JLabel("性 别:"); private JLabel lblAge = new JLabel("年龄:"); private JLabel lblRealName = new JLabel("姓名:"); private JLabel lblSignature = new JLabel("个性签名:"); private JTextField txtNickName = new JTextField(); private JTextField txtEmail= new JTextField(); private JPasswordField pfPassword = new JPasswordField(); private JPasswordField pfRePass = new JPasswordField(); private JComboBox boxSex = new JComboBox(); private JTextField txtAge = new JTextField(); private JTextField txtRealName = new JTextField(); private JTextArea areaSignature = new JTextArea(); private JLabel lblPhoto = new JLabel(); private JButton btnChange = new JButton("更改头像"); private JButton btnSet = new JButton("设置↓"); private JButton btnOk = new JButton("注册"); private JButton btnCancle = new JButton("取消"); private ChooseProtrait chooseProtrait = null; private JLabel lblServerIP = new JLabel("服务器IP:"); private JTextField txtServerIP = new JTextField("127.0.0.1"); private JLabel lblServerPort = new JLabel("端口:"); private JTextField txtServerPort = new JTextField("3608"); private boolean isSet = false; private Socket client = null; private ObjectOutputStream oos = null; private ObjectInputStream ois = null; public RegisterPane() { setTitle("JQ新用户注册"); setSize(330,343); setResizable(false); Toolkit tk=Toolkit.getDefaultToolkit(); setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2); init(); btnCancle.addActionListener(this); btnChange.addActionListener(this); btnOk.addActionListener(this); btnSet.addActionListener(this); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } /** * 初始化面板。因为时间关系,可能写的比较戳,望见谅。 */ private void init(){ setLayout(null); lblNickName.setPreferredSize(new Dimension(60,20)); lblEmail.setPreferredSize(new Dimension(60,20)); lblPassword.setPreferredSize(new Dimension(60,20)); lblRePass.setPreferredSize(new Dimension(60,20)); lblSex.setPreferredSize(new Dimension(60,20)); lblAge.setPreferredSize(new Dimension(30,20)); lblRealName.setPreferredSize(new Dimension(30,20)); lblSignature.setPreferredSize(new Dimension(60,20)); txtNickName.setPreferredSize(new Dimension(120,20)); txtEmail.setPreferredSize(new Dimension(120,20)); pfPassword.setPreferredSize(new Dimension(120,20)); pfRePass.setPreferredSize(new Dimension(120,20)); boxSex.setPreferredSize(new Dimension(40,20)); txtAge.setPreferredSize(new Dimension(40,20)); txtRealName.setPreferredSize(new Dimension(60,20)); JScrollPane sp = new JScrollPane(areaSignature); sp.setPreferredSize(new Dimension(220,60)); lblPhoto.setOpaque(true); lblPhoto.setBackground(Color.WHITE); lblPhoto.setHorizontalAlignment(SwingConstants.CENTER); lblPhoto.setPreferredSize(new Dimension(50,50)); lblPhoto.setBorder(new LineBorder(Color.DARK_GRAY)); lblPhoto.setIcon(new Portrait()); btnChange.setPreferredSize(new Dimension(60,20)); btnChange.setMargin(new Insets(0,0,0,0)); boxSex.addItem(UserSex.Boy); boxSex.addItem(UserSex.Girl); JPanel paneRequire = new JPanel(); paneRequire.setBorder(new TitledBorder(new LineBorder(Color.GRAY),"必填选项")); paneRequire.setSize(210,135); paneRequire.setLocation(10, 10); paneRequire.setLayout(new FlowLayout(FlowLayout.LEFT,5,6)); paneRequire.add(lblNickName); paneRequire.add(txtNickName); paneRequire.add(lblEmail); paneRequire.add(txtEmail); paneRequire.add(lblPassword); paneRequire.add(pfPassword); paneRequire.add(lblRePass); paneRequire.add(pfRePass); JPanel paneUnRequire = new JPanel(); paneUnRequire.setBorder(new TitledBorder(new LineBorder(Color.GRAY),"选填选项")); paneUnRequire.setSize(305,125); paneUnRequire.setLocation(10, 150); paneUnRequire.setLayout(new FlowLayout(FlowLayout.LEFT,5,6)); paneUnRequire.add(lblSex); paneUnRequire.add(boxSex); paneUnRequire.add(lblAge); paneUnRequire.add(txtAge); paneUnRequire.add(lblRealName); paneUnRequire.add(txtRealName); paneUnRequire.add(lblSignature); paneUnRequire.add(sp); JPanel panePhoto = new JPanel(); panePhoto.setBorder(new TitledBorder(new LineBorder(Color.GRAY),"头像")); panePhoto.setSize(85,135); panePhoto.setLocation(230, 10); panePhoto.setLayout(new FlowLayout(FlowLayout.CENTER,5,8)); panePhoto.add(new FillWidth(50,4)); panePhoto.add(lblPhoto); panePhoto.add(btnChange); JPanel paneBottom = new JPanel(); paneBottom.setSize(305,30); paneBottom.setLocation(10, 275); paneBottom.setLayout(new FlowLayout(FlowLayout.LEFT,2,5)); paneBottom.add(btnSet); paneBottom.add(new FillWidth(100,20)); paneBottom.add(btnOk); paneBottom.add(new FillWidth(8,20)); paneBottom.add(btnCancle); TitledBorder tb = new TitledBorder(new LineBorder(Color.GRAY),"网络设置"); JPanel paneSet = new JPanel(); paneSet.setSize(305,60); paneSet.setLocation(10,313); paneSet.setBorder(tb); paneSet.add(lblServerIP); paneSet.add(txtServerIP); paneSet.add(new FillWidth(30,20)); paneSet.add(lblServerPort); paneSet.add(txtServerPort); add(paneRequire); add(paneUnRequire); add(panePhoto); add(paneBottom); add(paneSet); } /** * 取消按钮、更改头像按钮、注册按钮、设置按钮事件。 */ public void actionPerformed(ActionEvent e) { if(e.getSource()==btnCancle){ dispose(); new LoginPane(); } if(e.getSource()==btnChange){ if(chooseProtrait==null) new ChooseProtrait(); else chooseProtrait.setVisible(true); } if(e.getSource()==btnOk){ try { String pass = new String(pfPassword.getPassword()); String repass = new String(pfRePass.getPassword()); if(pass.equals(repass)){ btnOk.setEnabled(false); new RegNewUser().start(); } else JOptionPane.showMessageDialog(null, "2次密码输入的不一致,请重新输入!"); } catch (IOException e1) { JOptionPane.showMessageDialog(null, "错误:"+e1.getMessage()); } } if(e.getSource()==btnSet){ if(isSet){ isSet = false; setSize(getWidth(),getHeight()-65); btnSet.setText("设置↓"); }else{ isSet = true; setSize(getWidth(),getHeight()+65); btnSet.setText("设置↑"); } } } /** * 注册新用户线程 */ private class RegNewUser extends Thread{ public RegNewUser() throws IOException { client = new Socket(txtServerIP.getText(),Integer.parseInt(txtServerPort.getText())); oos = new ObjectOutputStream(new BufferedOutputStream(client.getOutputStream())); User user = new User(); user.setRealname(txtRealName.getText()); user.setNickname(txtNickName.getText()); user.setEmail(txtEmail.getText()); user.setPassword(new String(pfPassword.getPassword())); user.setSex(((UserSex)boxSex.getSelectedItem()).getType()); user.setAge(Integer.parseInt(txtAge.getText())); user.setSignature(areaSignature.getText()); user.setPhoto(((Portrait)lblPhoto.getIcon()).getNum()); JQMessage regMessage = new JQMessage(); regMessage.setType(10); regMessage.setObj(user); oos.writeObject(regMessage); oos.flush(); ois = new ObjectInputStream(new BufferedInputStream(client.getInputStream())); //ois = new ObjectInputStream(client.getInputStream()); //oos = new ObjectOutputStream(client.getOutputStream()); } public void run() { try { while(ois!=null){ Object obj = ois.readObject(); if(obj instanceof JQMessage){ JQMessage message = (JQMessage)obj; int type = message.getType(); switch (type) { case 11: RegUser xuser = (RegUser)message.getObj(); new RegSuccess(xuser,RegisterPane.this,true); //btnOk.setEnabled(true); closeClient(); break; case 12: JOptionPane.showMessageDialog(null, "注册失败!请重新注册!"); btnOk.setEnabled(true); closeClient(); break; case 90: JOptionPane.showMessageDialog(null, message.getObj().toString()); closeClient(); System.exit(0); break; } break; } } } catch (IOException e) { JOptionPane.showMessageDialog(null, "发生错误,原因:"+e.getMessage()); closeClient(); } catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(null, "发生错误,原因:"+e.getMessage()); closeClient(); } } public void closeClient(){ try { if(oos!=null)oos.close();oos = null; if(ois!=null)ois.close();ois = null; if(client!=null)client.close();client=null; } catch (IOException e) { System.out.println("错误:"+e.getMessage()); } } } /** * 注册成功窗口 */ private class RegSuccess extends JDialog implements ActionListener{ private JTextArea txtInfo = new JTextArea(); private JButton btnLogin = new JButton("直接登录"); private JButton btnReturn = new JButton("返回登陆界面"); private RegUser user; public RegSuccess(RegUser user,Frame owner, boolean modal) { super(owner,modal); this.user = user; setSize(250,190); setResizable(false); Toolkit tk=Toolkit.getDefaultToolkit(); setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2); setTitle("注册信息"); txtInfo.setText("恭喜!"+user.getRealname()+",注册成功!\n"+ "用户昵称:"+user.getNickname()+"\n"+ "登陆号码:"+user.getJqnum()+"\n"+ "登陆密码:"+user.getPassword()+"\n"+ "请妥善保管您的号码和密码!"); txtInfo.setEditable(false); txtInfo.setOpaque(true); txtInfo.setBackground(this.getBackground()); txtInfo.setPreferredSize(new Dimension(200,100)); txtInfo.setBorder(new TitledBorder(new LineBorder(Color.DARK_GRAY)," 注册信息 ")); setLayout(new FlowLayout(FlowLayout.CENTER,10,10)); btnLogin.addActionListener(this); btnReturn.addActionListener(this); add(txtInfo); add(btnLogin); add(btnReturn); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==btnLogin){ dispose(); RegisterPane.this.dispose(); new MainPane(txtServerIP.getText(),Integer.parseInt(txtServerPort.getText()),user.getJqnum(),user.getPassword(),UserState.ONLINESTATE.getState()); } if(e.getSource()==btnReturn){ dispose(); RegisterPane.this.dispose(); new LoginPane(); } } } /** * 选择头像窗口 */ private class ChooseProtrait extends JDialog implements ActionListener{ private JButton[] btnPortrait = new JButton[158]; private Portrait[] portraits = new Portrait[158]; private JLabel lblBoys = new JLabel("男士头像(共30个)"); private JLabel lblGirls = new JLabel("女士头像(共29个)"); private JLabel lblAnimals = new JLabel("动物头像(共36个)"); private JLabel lblOthers = new JLabel("其他头像(共63个)"); private JLabel lblViewInfo = new JLabel("预览:"); private JLabel lblPhotoView = new JLabel(); private JButton btnP_Ok = new JButton("确定"); private JButton btnP_Cancle = new JButton("取消"); public ChooseProtrait() { setTitle("选择头像"); setSize(500,440); setResizable(false); Toolkit tk=Toolkit.getDefaultToolkit(); setLocation((tk.getScreenSize().width-getSize().width)/2,(tk.getScreenSize().height-getSize().height)/2); btnP_Ok.setSize(80,20); btnP_Ok.setLocation(300, 375); btnP_Ok.addActionListener(this); btnP_Cancle.setSize(80,20); btnP_Cancle.setLocation(400, 375); btnP_Cancle.addActionListener(this); //初始化按钮,并将头像显示的按钮上 for(int i=0;i<btnPortrait.length;i++){ btnPortrait[i] = new JButton(); btnPortrait[i].setMargin(new Insets(0,0,0,0)); btnPortrait[i].setPreferredSize(new Dimension(50,50)); btnPortrait[i].addActionListener(this); btnPortrait[i].setOpaque(true); btnPortrait[i].setBackground(Color.WHITE); } //初始化预览头像 lblPhotoView.setOpaque(true); lblPhotoView.setBackground(Color.WHITE); lblPhotoView.setHorizontalAlignment(SwingConstants.CENTER); lblPhotoView.setPreferredSize(new Dimension(50,50)); lblPhotoView.setBorder(new LineBorder(Color.DARK_GRAY)); lblPhotoView.setIcon(lblPhoto.getIcon()); lblPhotoView.setSize(50,50); lblPhotoView.setLocation(420, 40); lblViewInfo.setSize(60,20); lblViewInfo.setLocation(425, 10); initJLabel(lblBoys); initJLabel(lblGirls); initJLabel(lblAnimals); initJLabel(lblOthers); JPanel paneBoys = getPane(0, 30); JPanel paneGirls = getPane(30, 60); JPanel paneAnimals = getPane(60, 96); JPanel paneOthers = getPane(96, 158); JPanel panePortrait = new JPanel(); panePortrait.setPreferredSize(new Dimension(380,1500)); panePortrait.setOpaque(true); panePortrait.setBackground(Color.WHITE); panePortrait.add(lblBoys); panePortrait.add(paneBoys); panePortrait.add(lblGirls); panePortrait.add(paneGirls); panePortrait.add(lblAnimals); panePortrait.add(paneAnimals); panePortrait.add(lblOthers); panePortrait.add(paneOthers); JScrollPane sp = new JScrollPane(panePortrait); sp.setSize(400,350); sp.setLocation(10,5); setLayout(null); JPanel paneAll = new JPanel(); paneAll.setSize(480,365); paneAll.setLocation(5, 0); paneAll.setOpaque(true); paneAll.setBackground(Color.WHITE); paneAll.setBorder(new LineBorder(Color.BLACK)); paneAll.setLayout(null); paneAll.add(sp); paneAll.add(lblViewInfo); paneAll.add(lblPhotoView); add(paneAll); add(btnP_Ok); add(btnP_Cancle); //启动多线程加载头像到按钮上,加快对话框的显示时间 new Thread(){ public void run() { for(int i=0;i<btnPortrait.length;i++){ portraits[i] = new Portrait(i+1); btnPortrait[i].setIcon(portraits[i]); } } }.start(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); setVisible(true); } /** * 初始化一些面板,仅仅为简便方法。 * @param pane */ private void initJLabel(JLabel pane){ pane.setOpaque(true); pane.setBackground(new Color(226,247,254)); pane.setPreferredSize(new Dimension(380,25)); pane.setBorder(new LineBorder(Color.BLACK)); } /** * 根据开始和结束获得面板。 * @param begin 开始的头像位置。 * @param end 结束的头像位置。 * @return 添加好头像的面板。 */ private JPanel getPane(int begin,int end){ JPanel pane = new JPanel(); pane.setOpaque(true); pane.setBackground(Color.WHITE); pane.setLayout(new GridLayout(0,7,5,5)); for(int i = begin;i<end;i++) pane.add(btnPortrait[i]); return pane; } public void actionPerformed(ActionEvent e) { //点击确定时更改选择的图像 if(e.getSource()==btnP_Ok){ lblPhoto.setIcon(lblPhotoView.getIcon()); dispose(); return; } //点击确定时关闭选择图像的窗口 if(e.getSource()==btnP_Cancle){ dispose(); return; } //如果是图像的按钮时,显示图想到浏览头像面板上 int i = -1; for(i=0;i<btnPortrait.length;i++){ if(e.getSource()==btnPortrait[i]) break; } if(i<btnPortrait.length){ lblPhotoView.setIcon(portraits[i]); } } } public static void main(String[] args) { RegisterPane r=new RegisterPane(); } }

krispeng LV15
2024年6月4日
陈小灏 LV18
2023年12月27日
xinxin23383 LV7
2023年11月28日
liugua777 LV2
2023年5月7日
微信网友_6444139264921600 LV8
2023年4月29日
xiexiaoming05 LV14
2022年5月21日
waitingforyou LV20
2022年3月31日
13112360 LV2
2021年12月5日
Aoifee LV4
2021年11月9日
18350164218 LV13
2021年6月18日