暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第十一章 JDBC与MySQL数据库(13)——应用举例(下)

凯哥的故事 2020-09-15
488

上接应用举例(上)

④视图

(1)注册视图

注册视图提供显示模型和修改模型中数据的功能。这里用JPanel的子类作为注册视图。该视图中,用户可以输入注册信息,存放到模型中,单击“注册”按钮,将模型交给注册处理者。

(2)登录视图

用JPanel的子类作为登录视图。在该视图中用户可以输入注册的id和密码。单击“登录”按钮,将有关数据,例如id和密码,交给登录数据处理者。

(3)集成视图

首先将注册视图和登录视图集成到JTabbedPane容器,即分别作为JTabbedPane容器中的两个选项卡对应的组件,然后再把JTabbedPane容器添加到JPanel中。

(4)代码

视图的包名都是fan.view,程序代码如下所示:

  • 注册视图

package fan.view;
import java.awt.event.*;
import javax.swing.*;
import fan.handle.HandleInsertData;
import fan.model.Register;
public class RegisterView extends JPanel implements ActionListener {
Register register;
JTextField inputID,inputBirth;
JPasswordField inputPassword;
JButton buttonRegister;
RegisterView() {
register = new Register();
inputID = new JTextField(12);
inputPassword = new JPasswordField(12);
inputBirth = new JTextField(12);
buttonRegister = new JButton("注册");
add(new JLabel("ID:"));
add(inputID);
add(new JLabel("密码:"));
add(inputPassword);
add(new JLabel("出生日期(****-**-**):"));
add(inputBirth);
add(buttonRegister);
buttonRegister.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
register.setID(inputID.getText());
char [] pw =inputPassword.getPassword();
register.setPassword(new String(pw));
register.setBirth(inputBirth.getText());
HandleInsertData handleRegister = new HandleInsertData();
handleRegister.writeRegisterModel(register);
}
}
  • 登录视图

package fan.view;
import java.awt.event.*;
import javax.swing.*;
import fan.handle.HandleLogin;
import fan.model.Login;
public class LoginView extends JPanel implements ActionListener {
Login login;
JTextField inputID;
JPasswordField inputPassword;
JButton buttonLogin;
boolean loginSuccess;
LoginView() {
login = new Login();
inputID = new JTextField(12);
inputPassword = new JPasswordField(12);
buttonLogin = new JButton("登录");
add(new JLabel("ID:"));
add(inputID);
add(new JLabel("密码:"));
add(inputPassword);
add(buttonLogin);
buttonLogin.addActionListener(this);
}
public boolean isLoginSuccess() {
return loginSuccess;
}
public void actionPerformed(ActionEvent e) {
login.setID(inputID.getText());
char [] pw = inputPassword.getPassword();
login.setPassword(new String(pw));
HandleLogin handlelogin = new HandleLogin();
login = handlelogin.queryVerify(login);
loginSuccess = login.getLoginSuccess();
}
}
  • 集成视图

package fan.view;
import java.awt.BorderLayout;
import javax.swing.*;
public class RegisterAndLoginView extends JPanel {
JTabbedPane p;
RegisterView registerView;
LoginView loginView;
public RegisterAndLoginView() {
registerView = new RegisterView();
loginView = new LoginView();
setLayout(new BorderLayout());
p=new JTabbedPane();
p.add("我要注册",registerView);
p.add("我要登录",loginView);
p.validate();
add(p,BorderLayout.CENTER);
}
public boolean isLoginSuccess() {
return loginView.isLoginSuccess();
}
}


用户程序

下列程序提供一个华容道游戏(见第9章),但希望用户登录后才可以玩游戏。因此,程序决定引入fan.view包中的RegisterAndLoginView类,以便提示用户登录或注册(RegisterAndLoginView就可以满足用户的这个需求)。

程序代码如下所示:

import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import fan.handle.Hua_Rong_Road;
import fan.view.RegisterAndLoginView;
public class MainWindow extends JFrame implements ActionListener {
JButton computerButton;
RegisterAndLoginView view;
MainWindow() {
setBounds(100,100,700,260);
view = new RegisterAndLoginView();
computerButton = new JButton("玩华容道");
computerButton.addActionListener(this);
add (view, BorderLayout.CENTER);
add (computerButton,BorderLayout.NORTH);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(true);
}
public void actionPerformed (ActionEvent e) {
if(view.isLoginSuccess()==false) {
JOptionPane.showMessageDialog(null,"请登录","登录提示",JOptionPane.WARNING_MESSAGE);
}
else {
Hua_Rong_Road win = new Hua_Rong_Road(); //华容道
}
}
public static void main(String args[]) {
MainWindow window = new MainWindow();
window.setTitle("登录后可玩华容道");
}
}

运行效果如图所示。


文章转载自凯哥的故事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论