上接应用举例(上)
④视图
(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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




