好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现登录窗口

本文实例为大家分享了java实现登录窗口的具体代码,供大家参考,具体内容如下

登录窗口主类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

package ccnu.paint;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Enumeration;

import java.util.Properties;

 

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

 

import ccnu.util.Answer;

import ccnu.util.Verification;

 

public class Login extends JFrame

{

    private static final long serialVersionUID = 1L;

 

    private Properties pro = new Properties();

 

    private boolean ver_code = false ; // 默认输入验证码错误

 

    private Answer answer = null ;

 

    private JPanel p1 = new JPanel(); // 添加到JPanel中的组件默认为流式布局

    private JLabel luser = new JLabel( "username: " );

    private JTextField username = new JTextField( 20 );

 

    private JPanel p2 = new JPanel();

    private JLabel lpwd = new JLabel( "password: " );

    private JPasswordField pwd = new JPasswordField( 20 );

 

    private JPanel p4 = new JPanel();

    private JLabel lVer = new JLabel( "verification: " );

    private JTextField ver = new JTextField( 10 );

    private JLabel img = new JLabel();

    private JLabel result = new JLabel();

 

    private JPanel p3 = new JPanel();

    private JButton ok = new JButton( "ok" );

    private JButton cancel = new JButton( "cancel" );

    private JButton signUp = new JButton( "Sign up" ); // 用于账户注册

 

    // 设置组件的监听

    public void initListener()

    {

        username.addActionListener( new ActionListener()

        {

            @Override

            public void actionPerformed(ActionEvent e)

            { // JTextField的action是回车键

                String name = username.getText();

                // Login.this.setTitle(name);

                // System.out.println(name.hashCode() + "***" +"".hashCode());

                if (name.equals( "" ))

                {

                    JOptionPane.showMessageDialog(Login. this , "Please input a userName!" );

                } else

                {

                    pwd.grabFocus();

                }

            }

        });

 

        pwd.addActionListener( new ActionListener(){

            @Override

            public void actionPerformed(ActionEvent e)

            {

                String password = new String(pwd.getPassword());

                if (password.equalsIgnoreCase( "" ))

                {

                    JOptionPane.showMessageDialog(Login. this , "please input a password!" );

                } else {

                    ver.grabFocus();

                }

            }

 

        });

 

        ok.addActionListener( new ActionListener(){

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                // 重新加载最新的账户文件

                try

                {

                    pro.load( new FileInputStream( new File( "src/res/accouts.properties" )));

                } catch (IOException e1)

                {

                    e1.printStackTrace();

                }

                check();

            }

 

        });

 

        // 判断验证码是否正确

        ver.addActionListener( new ActionListener(){

            @Override

            public void actionPerformed(ActionEvent e)

            {

                String verCode = ver.getText();

                if (verCode.equals( "" ))

                {

                    JOptionPane.showMessageDialog(Login. this , "Please input a verification!" );

                } else {

                    if (verCode.equals(answer.getResult()))

                    {

                        result.setIcon( new ImageIcon(Login. this .getClass().getResource( "/res/right.jpg" ))); // 显示提示的图片信息(如√图片)

                        ver_code = true ;

                        // 检查之前,重新加载最新的账户文件

                        try

                        {

                            pro.load( new FileInputStream( new File( "src/res/accouts.properties" ))); // 将账户文件加载进来

                        } catch (IOException e1)

                        {

                            e1.printStackTrace();

                        }

                        check();

                    } else {

                        result.setIcon( new ImageIcon(Login. this .getClass().getResource( "/res/error.jpg" ))); // 显示提示的图片信息(如×图片) 

                        ver_code = false ;

                    }

                }

            }

        });

 

        // 点击图片会更改验证码

        img.addMouseListener( new MouseAdapter(){

 

            @Override

            public void mouseClicked(MouseEvent e)

            {

                answer = Verification.verification();

                img.setIcon( new ImageIcon(answer.getBufferedImage())); // 设置验证码图案

            }

        });

 

        cancel.addActionListener( new ActionListener()

        {

            @Override

            public void actionPerformed(ActionEvent e)

            {

                int option = JOptionPane.showConfirmDialog(Login. this , "Are you sure to exit?" );

//              System.out.println("option = " + option);

                if (option == 0 )

                { // Yes

                    Login. this .dispose();

                }

            }

        });

 

        signUp.addActionListener( new ActionListener(){

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                new SignUp();

            }

        });

    }

 

    // 初始化登录窗口及其组件的设置监听

    public Login()

    {

        super ( "Login" );

 

        // 加载账户文件

        try

        {

            pro.load( new FileInputStream( new File( "src/res/accouts.properties" ))); // 从指定位置将账户文件加载进来

        } catch (IOException e)

        {

            e.printStackTrace();

        }

 

        initListener();

        answer = Verification.verification(); // 生成验证码

        img.setIcon( new ImageIcon(answer.getBufferedImage())); // 设置初始验证码

 

        this .setLocation( new Point( 200 , 200 ));

        this .setSize( 500 , 300 );

        this .setLayout( new GridLayout( 4 , 1 , 0 , 20 )); // 垂直间隙为20px

        p1.add(luser);

        p1.add(username);

        p2.add(lpwd);

        p2.add(pwd);

        p4.add( this .lVer);

        p4.add( this .ver);

        p4.add( this .img);

        result.setForeground(Color.red);

        result.setFont( new Font( "楷体" , Font.BOLD, 20 ));

        p4.add(result);

        p3.add(ok);

        p3.add(cancel);

        p3.add(signUp);

        this .add(p1);

        this .add(p2);

            this .add(p4);

        this .add(p3);

 

//      this.setBackground(Color.blue); // JFrame的上层还有一个ContentPane

        this .getContentPane().setBackground(Color.gray);

        this .setResizable( false );

        this .setVisible( true );

        this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 等价于Frame中的windowClosing事件

    }

 

    // 检查用户名或密码

    public void check()

    {

 

        String verCode = ver.getText();

        if (verCode.equals( "" ))

        {

            JOptionPane.showMessageDialog(Login. this , "Please input a verification!" );

            return ;

        } else {

            if (verCode.equals(answer.getResult()))

            {

                result.setIcon( new ImageIcon(Login. this .getClass().getResource( "/res/right.jpg" )));

                ver_code = true ;

            } else {

                result.setIcon( new ImageIcon(Login. this .getClass().getResource( "/res/error.jpg" )));

                ver_code = false ;

            }

        }

 

        if (ver_code == false )

        {

            JOptionPane.showMessageDialog( this , "verification is error!" );

            return ;

        }

        String name = username.getText();

        String password = new String(pwd.getPassword()); // return char[]

//      if (name.equalsIgnoreCase("admin") && password.equals("123456"))

        if (isPass(name, password))

        {

//          new PaintApp(name);

            JOptionPane.showMessageDialog( this , "-^_^-   OK..." ); // 此处可以加上其他的登陆成功后进一步处理的窗口

            this .dispose();

        } else

        {

            JOptionPane.showMessageDialog( this , "userName or password is incorrect!" );

            username.setText( "" );

            pwd.setText( "" );

            ver.setText( "" );

            answer = Verification.verification();

            img.setIcon( new ImageIcon(answer.getBufferedImage()));

            result.setIcon( null );

        }

    }

 

    // 验证用户输入的账户名和密码是否正确(通过与加载进来的账户 pro 比对)

    public boolean isPass(String name, String password)

    {

        Enumeration en = pro.propertyNames();

        while (en.hasMoreElements())

        {

            String curName = (String)en.nextElement();

//          System.out.println(curName + "---" + pro.getProperty(curName));

            if (curName.equalsIgnoreCase(name))

            {

                if (password.equalsIgnoreCase(pro.getProperty(curName)))

                {

                    return true ;

                }

            }

        }

        return false ;

    }

 

    public static void main(String[] args)

    {

        new Login();

    }

}

账户注册类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

package ccnu.paint;

 

import java.awt.GridLayout;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.util.Enumeration;

import java.util.Properties;

 

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

 

public class SignUp extends JFrame

{

    private static final long serialVersionUID = 3054293481122038909L;

 

    private Properties pro = new Properties(); // 最好时静态的,因为账户是共享的

 

    private JPanel panel = new JPanel();

    private JLabel label = new JLabel( "username: " );

    private JTextField field = new JTextField( 15 );

 

    private JPanel panel2 = new JPanel();

    private JLabel label2 = new JLabel( "password: " );

    private JPasswordField field2 = new JPasswordField( 15 );

 

    private JPanel panel3 = new JPanel();

    private JLabel label3 = new JLabel( "confirmation: " );

    private JPasswordField field3 = new JPasswordField( 15 );

 

    private JPanel panel4 = new JPanel();

    private JButton button = new JButton( "OK" );

    private JButton button2 = new JButton( "Cancel" );

 

    public void initListener()

    {

        field.addActionListener( new ActionListener()

        {

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                field2.grabFocus();

            }

 

        });

 

        field2.addActionListener( new ActionListener()

        {

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                field3.grabFocus();

            }

        });

        field3.addActionListener( new ActionListener()

        {

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                ok_actionPerformed(e);

            }

 

        });

 

        // OK

        button.addActionListener( new ActionListener()

        {

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                ok_actionPerformed(e);

            }

        });

 

        // Cancel

        button2.addActionListener( new ActionListener()

        {

 

            @Override

            public void actionPerformed(ActionEvent e)

            {

                cancel_actionPerformed(e);

            }

        });

    }

 

    public void ok_actionPerformed(ActionEvent e)

    {

        String userName = field.getText();

        String password = new String(field2.getPassword());

        String password2 = new String(field3.getPassword());

        if (userName.equals( "" ))

        {

            JOptionPane.showMessageDialog(SignUp. this , "username cannot be empty!" );

        } else

        {

            if (password.equalsIgnoreCase( "" ))

            {

                JOptionPane.showMessageDialog(SignUp. this , "password cannot be empty!" );

            } else

            {

                if (password2.equalsIgnoreCase(password))

                {

                    if (isExist(userName))

                    {

                        JOptionPane.showMessageDialog(SignUp. this , "username has been existed!" );

                        field.setText( "" );

                        field2.setText( "" );

                        field3.setText( "" );

                    } else

                    {

                        pro.setProperty(userName, password);

                        JOptionPane.showMessageDialog(SignUp. this , "SignUp success!" );

                        writeToPro(userName, password); // 将其写入到账户文件中

                        SignUp. this .dispose();

                    }

                } else

                {

                    JOptionPane.showMessageDialog(SignUp. this , "password is not consistent!" );

                    field2.setText( "" );

                    field3.setText( "" );

                }

            }

        }

    }

 

    public void cancel_actionPerformed(ActionEvent e)

    {

        System.exit( 0 );

    }

 

    public SignUp()

    {

        super ( "Sign up" );

 

        // 加载账户文件

        try

        {

            pro.load( new FileInputStream( new File( "src/res/accouts.properties" )));

        } catch (IOException e)

        {

            e.printStackTrace();

        }

 

        // 初始化窗口组件的监听

        initListener();

 

        this .setLocation( new Point( 300 , 230 ));

        this .setSize( 280 , 210 );

 

        this .setLayout( new GridLayout( 4 , 1 , 0 , 20 )); // 垂直间隙为20px

        panel.add(label);

        panel.add(field);

        panel2.add(label2);

        panel2.add(field2);

        panel3.add(label3);

        panel3.add(field3);

        panel4.add(button);

        panel4.add(button2);

        this .add(panel);

        this .add(panel2);

        this .add(panel3);

        this .add(panel4);

 

        this .setAlwaysOnTop( true );

        this .setResizable( false );

        this .setVisible( true );

    }

 

    // 如果注册始终可用,就要保存起来,否则不需要写入文件中,注册账户本次使用

    // 将账户名与其对应密码保存到指定的账户文件中

    public void writeToPro(String userName, String password)

    {

        pro.setProperty(userName, password);

        try

        {

            pro.store( new FileOutputStream( new File( "src/res/accouts.properties" )), "allAccouts" );

        } catch (IOException e)

        {

            e.printStackTrace();

        }

    }

 

 

    // 判断此用户名是否已经存在

    public boolean isExist(String userName)

    {

        Enumeration enumer = pro.propertyNames();

        while (enumer.hasMoreElements())

        {

            String temp = (String) enumer.nextElement();

            if (temp.equals(userName))

            {

                return true ;

            }

        }

        return false ;

    }

}

生成验证码类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

package ccnu.util;

 

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Point;

import java.awt.image.BufferedImage;

import java.util.Random;

 

// 用于生成验证码

public class Verification

{

    private static Answer answer = new Answer();

    private static BufferedImage bufferedImage = null ;

    private static String result = null ;

    private static String words = null ;

    private static String words2 = null ;

 

    // 生成验证码

    public static Answer verification()

    {

 

        bufferedImage = new BufferedImage( 200 , 35 , BufferedImage.TYPE_INT_RGB);

        Graphics g = bufferedImage.getGraphics();

        Random rand = new Random();

        for ( int i = 0 ; i < 20 ; i++)

        {

            Point p1 = new Point(rand.nextInt( 200 ), rand.nextInt( 30 ));

            Point p2 = new Point(rand.nextInt( 200 ), rand.nextInt( 30 ));

            g.drawLine(p1.x, p1.y, p2.x, p2.y);

        }

        g.setColor(Color.RED);

        g.setFont( new Font( "楷体" , Font.BOLD, 22 ));

        int plan = 2 ;

        switch (rand.nextInt(plan))

        {

        case 0 :

            plan(g);

            break ;

        case 1 :

            plan1(g);

            break ;

        default :

            break ;

        }

        answer.setBufferedImage(bufferedImage);

        answer.setResult(result);

        g.dispose();

        return answer;

    }

 

    // 方案一

    private static void plan(Graphics g)

    {

        words = ReadTxt.read( "/res/words.txt" ); // 指定生成验证码问题的资源文件的路径

        Random rand = new Random();

        String first = String.valueOf(words.charAt(rand.nextInt(words.length())));

        String second = String.valueOf(words.charAt(rand.nextInt(words.length())));

        String third = String.valueOf(words.charAt(rand.nextInt(words.length())));

        g.drawString(first, rand.nextInt( 40 ) + 20 , rand.nextInt( 12 ) + 15 );

        g.drawString(second, rand.nextInt( 40 ) + 80 , rand.nextInt( 12 ) + 15 );

        g.drawString(third, rand.nextInt( 40 ) + 140 , rand.nextInt( 12 ) + 15 );

        result = first + second + third;

    }

 

    // 方案二

    private static void plan1(Graphics g)

    {

        words2 = ReadTxt.read( "/res/words2.txt" ); // 指定生成验证码问题的资源文件的路径

        Random rand = new Random();

        String first = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2 )));

        String second = String.valueOf(words2.charAt(rand.nextInt( 2 ) + 9 ));

        String third = String.valueOf(words2.charAt(rand.nextInt(words2.length() - 2 )));

        g.drawString(first, rand.nextInt( 30 ) + 20 , rand.nextInt( 12 ) + 15 );

        g.drawString(second, rand.nextInt( 40 ) + 60 , rand.nextInt( 12 ) + 15 );

        g.drawString(third, rand.nextInt( 30 ) + 110 , rand.nextInt( 12 ) + 15 );

        g.drawString( "=" , rand.nextInt( 40 ) + 150 , rand.nextInt( 12 ) + 15 );

        if (second.equals( "+" ))

        {

            result = String.valueOf(Integer.valueOf(first) + Integer.valueOf(third)); 

        } else {

            result = String.valueOf(Integer.valueOf(first) - Integer.valueOf(third)); 

        }

    }

 

}

读取生成验证码所需文件类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

package ccnu.util;

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

 

// 专门用于读取文件

public class ReadTxt

{

    public static String read(String path) // 根据指定路径path来读取它,并返回它所包含的内容

    {

        StringBuffer sb = new StringBuffer();

        try

        {

            BufferedReader br = new BufferedReader( new InputStreamReader(Verification. class .getResourceAsStream(path)));

            String temp = null ;

            while ( null != (temp = br.readLine()))

            {

                sb.append(temp);

            }

            br.close();

        } catch (IOException e)

        {

            e.printStackTrace();

        }

        return sb.toString();

    }

 

}

得到生成的验证码所包含的信息类 (图案、问题)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

package ccnu.util;

 

import java.awt.image.BufferedImage;

 

// 用于将生成的验证码的图案信息以及问题结果封装

public class Answer

{

    private BufferedImage bufferedImage = null ; // 验证码图像

    private String result = null ; // 验证码图像问题的答案

 

    public BufferedImage getBufferedImage()

    {

        return bufferedImage;

    }

    public void setBufferedImage(BufferedImage bufferedImage)

    {

        this .bufferedImage = bufferedImage;

    }

    public String getResult()

    {

        return result;

    }

    public void setResult(String result)

    {

        this .result = result;

    }

 

}

验证码生成汉字识别的问题的文件words.txt
如: 中国湖北省武汉市汉东大学政法学院

验证码生成算术运算的问题的文件words2.txt
123456789+-

提示图片

登录效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/Recall_Tomorrow/article/details/70475027

查看更多关于java实现登录窗口的详细内容...

  阅读:32次