登陆界面的构想
在做登陆界面之前首先肯定是要对界面的进行布局构想,想这个界面到底有哪些元素构成,就拿下面的图来说吧
从这张图片中我们可以知道这登陆界面的组成需要到用户名和密码两个Jlabel标签和一个JTextField文本框和JPasswordField的密码框以及三个JButton按钮,最后将这些元素添加到container这个容器中。
java swing组件中的Jlabel、JTextField、JPasswordField以及JButton一些基本属性
JLabel
get/setText(): 获取/设置标签的文本。
get/seticon(): 获取/设置标签的图片。
get/setHorizontalAlignment(): 获取/设置文本的水平位置。
get/setVerticalAlignment(): 获取/设置文本的垂直位置。
get/setDisplayedMnemonic(): 获取/设置标签的访问键(下划线文字)。
get/setLableFor(): 获取/设置这个标签附着的组件,所以当用户按下 Alt+访问键时,焦点转移到指定的组件。
JButton
get/setText(): 获取/设置标签的文本。
get/seticon(): 获取/设置标签的图片。
get/setHorizontalAlignment(): 获取/设置文本的水平位置。
get/setVerticalAlignment(): 获取/设置文本的垂直位置。
get/setDisplayedMnemonic(): 获取/设置访问键(下划线字符),与 Alt 按钮组合时,造成按钮单击。
JButton 上的状态(活动/不活动、选中/没选中、鼠标经过/鼠标离开、按下/没按下,等等)方法
get/setDisabledIcon()
get/setDisableSelectedIcon()
get/setIcon()
get/setPressedIcon()
get/setRolloverIcon()
get/setRolloverSelectedIcon()
get/setSelectedIcon()
JTextField —— 基本文本组件,局限在一个文本中
get/setText():用于获取/设置 JTextField 中的文本
JTextArea —— 支持多行文本
is/setLineWrap():设置在行过长的时候是否要自动换行。
is/setWrapStyleWord():设置在单词过长的时候是否要把长单词移到下一行。
JPasswordField —— 密码输入
get/setEchoChar():获取/设置每次字符输入时在 JPasswordField 中显示的字符。在获取口令时,不会返回“回声”,而是返回实际的字符。
getText(): 不应当 使用这个函数,因为它会带来可能的安全问题(String 会保存在内存中,可能的堆栈转储会暴露口令)。
getPassword():这是从 JPasswordField 中获得口令的恰当方法,因为它返回一个包含口令的 char[]。为了保证恰当的安全性,数组应当被清为 0,以确保它不会保留在内存中。
JFrame —— 相当于一个容器,可以把其他组件放在其中展现给用户
get/setTitle(): 获取/设置该容器的标题。
get/setState(): 获取/设置该容器的最小化、最大化等状态。
is/setVisible(): 获取/设置该容器的可视状态,换句话说,是否在屏幕上显示。
get/setLocation(): 获取/设置该容器在屏幕上应当出现的位置。
get/setsize(): 获取/设置该容器的大小。
add(): 将组件添加到该容器中。
equals()的用法:
1、“==”比较两个变量本身的值,即两个对象在内存中的首地址。
(java中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个参数,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性)
2、“equals()”比较字符串中所包含的内容是否相同。
比如:
1
String s1,s2,s3 = "abc", s4 ="abc" ;
s1 = new String("abc");
s2 = new String("abc");
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
2
class Value
{
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));//(1)flase
System.out.println(v1 == v2);//(2)true
}
}
代码的实现
package mk1;
import java.awt.*;//导入awt包
import javax.swing.*;//导入swing包
import java.awt.event.ActionListener;//导入awt包中的监听器事件包
import java.awt.event.ActionEvent;//导入awt包中的ActionEvent事件包
public class denglu extends JFrame {
public denglu() {
setSize(300,290);//设计窗体的大小
JLabel a=new JLabel("用户名"); //实例化JLabel对象
JLabel b=new JLabel("密 码");
JTextField c=new JTextField(15);//实例化用户名文本框
JPasswordField d=new JPasswordField(15);//实例化密码框
d.setEchoChar('*');//将输入密码框中的密码以*显示出来
JButton e=new JButton("确定");
JButton f=new JButton("重置");
JButton g=new JButton("注册");
setVisible(true);//使窗体可视化
Container mk=getContentPane();//获取一个容器
// 将用户名、密码的Jlabel和用户名JTextField文本框、密码JPasswordField密码框以及确定JButton、重置JButton、注册JButton添加到container容器里面 //
mk.add(a);
mk.add(b);
mk.add(c);
mk.add(d);
mk.add(e);
mk.add(f);
mk.add(g);
setBounds(300,300,300,290);//设置窗体的长宽各为300、300 让其显示在左上方的300、300处
mk.setLayout(null);
// a、b、c、d、e、f、g显示在container容器中的位置坐标
a.setBounds(10,40,50,18);
b.setBounds(10,80,50,18);
c.setBounds(60,40,200,18);
d.setBounds(60,80,200,18);
e.setBounds(110,180,60,30);
f.setBounds(30,180,60,30);
g.setBounds(190,180,60,30);
f.addActionListener(new ActionListener() {//对重置按钮添加监听事件
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
c.setText("");//对用户名文本框进行重置
d.setText("");//对密码文本框进行重置
}
});
e.addActionListener(new ActionListener() {//对确定按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
if(c.getText().trim().equals("mk")&&new String(d.getPassword()).equals("123456")) {//equals函数进行用户名和密码的匹配
JOptionPane.showMessageDialog(null,"登录成功");
new NewFrame();//进入到NewFrame这个窗体中
}else {
JOptionPane.showMessageDialog(null, "登录失败");
}
}
});
g.addActionListener(new ActionListener(){//对注册按钮添加监听事件
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new zhuce();//进入都到zhuce窗体中
}
});
}
public static void main(String[] args) {
new denglu();
}
}
NewFrame窗体
package mk1;
import javax.swing.*;
import java.awt.*;
public class NewFrame extends JFrame {
NewFrame(){
this.setBounds(100,100,500,400);
this.setTitle("欢迎来到新窗口");
Container s= getContentPane();
JLabel t=new JLabel("NewFrame");
s.add(t);
this.setAlwaysOnTop(true);
this.setVisible(true);
}
}
注册窗体
package mk1;
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.sql.*;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class zhuce extends JFrame {
public zhuce() {
setSize(300,250);
JLabel a=new JLabel("用户名");
JLabel b=new JLabel("密 码");
JLabel D1=new JLabel("再次确认密码");
JTextField c=new JTextField(15);
JPasswordField d=new JPasswordField(15);
// JPasswordField D=new JPasswordField(15);
d.setEchoChar('.');
// D.setEchoChar('.');
JButton e=new JButton("确定");
JButton f=new JButton("重置");
JButton g=new JButton("返回");
setVisible(true);
Container mk=getContentPane();
mk.add(a);
mk.add(b);
mk.add(c);
mk.add(d);
mk.add(e);
mk.add(f);
mk.add(g);
// mk.add(D);
setBounds(300,250,300,250);
mk.setLayout(null);
a.setBounds(10,40,50,18);
b.setBounds(10,80,50,18);
c.setBounds(60,40,200,18);
d.setBounds(60,80,200,18);
e.setBounds(110,120,60,30);
f.setBounds(30,120,60,30);
g.setBounds(190,120,60,30);
g.addActionListener(new ActionListener(){
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
new denglu();
}
});
}
}
实现结果:
做得不好的地方请各位大佬指出来,一起学习一起进步,谢谢大家。