目录
今天我将为大家用两种方式来说一下Java登陆界面并实现其中的某个算法。
一,相关内容介绍
第一种主要是以网格布局管理器为主的
第二种主要是以精确定位方法为主的
网格布局管理器:网格布局管理器(GridLayout,简称网格管理器)把容器空间按照用户的设置平均划分分成不同行与列的网络,每个网格可以放置一个组件,这种布局方式对数量众多的组件很合适。创建网格管理器时,要给出网格的行列数,在窗体容器中,可以直接通过setLayout(new GridLayout(2,1));方式调用一个2行1列的网格管理器。网格之间还可以添加间距,例如设置GridLayout(8,1,10.10);网格布局管理器时,网格为8行1列,网格之间的距离为10个点距。使用网格管理器定义的网格数可以比存放的组件多,但不能少。如果希望某个网格为空白,可以为他存放上一个空标签对象。网格布局管理器较长使用,其方便,简单,规范。
精确定位方法:在容器中存放组件也可以不用布局管理器,使用setLayout(null);方法关闭默认布局管理器,这时可以使用JFrame类的setBounds(int x,int y,int w,int h);方法精确指出组件在容器中的存放位置,该方法有4个参数,x和y指定组件在容器左上角的水平和垂直位置坐标;w指组件宽度;h指组件高度。
二,相关代码表示
第一种方法:
首先建立一个空白窗体
import javax.swing.*;
public class J10 extends JFrame {
J10(){
setTitle("登录界面");
setSize(400, 400);
setVisible(true);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new J10();
}
}
接着往空白窗口添加相关组件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class J11 extends J10 implements ActionListener {
JButton b1, b2;
J11() {
setLayout(new GridLayout(3, 1));
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JLabel l1 = new JLabel("账号:");
JLabel l2 = new JLabel("密码:");
JTextField t = new JTextField(16);
JPasswordField pass = new JPasswordField(16);
b1 = new JButton("登录");
b2 = new JButton("注册");
b1.addActionListener(this);
b2.addActionListener(this);
p1.add(l1); p1.add(t);
p2.add(l2); p2.add(pass);
p3.add(b1); p3.add(b2);
add(p1); add(p2); add(p3);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b2) {
new J12().setTitle("注册窗口");
this.setVisible(false);
}
}
public static void main(String[] args) {new J11().setVisible(true);}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class J12 extends J10 implements ActionListener {
JButton b;
J12() {
setLayout(new GridLayout(4, 1));
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JPanel p3 = new JPanel();
JPanel p4 = new JPanel();
JLabel l1 = new JLabel("申请账号:");
JLabel l2 = new JLabel("设置密码:");
JLabel l3 = new JLabel("确认密码:");
JTextField t = new JTextField(16);
JPasswordField pass1 = new JPasswordField(16);
JPasswordField pass2 = new JPasswordField(16);
b = new JButton("注册并登录");
b.addActionListener(this);
p1.add(l1); p1.add(t);
p2.add(l2); p2.add(pass1);
p3.add(l3); p3.add(pass2);
p4.add(b);
add(p1); add(p2); add(p3); add(p4);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == b) {
new J13().setTitle("随机数排序窗口");
this.setVisible(false);
}
}
public static void main(String[] args) {new J12().setVisible(true);}
}
最后实现随机数算法
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
public class J13 extends J10 implements ActionListener {
JButton b;
static String str = "",res = "";
static int[] a = new int[10];
J13() {
Random r = new Random();
for (int i = 0; i < 10; i ++) {
a[i] = r.nextInt(100);
str = str + a[i] + " ";
}
//冒泡排序
for (int i = 0; i < 9; i ++)
for (int j = 0; j < 9-i; j ++)
if (a[j] > a[j+1]) { int t = a[j]; a[j] = a[j+1]; a[j+1] = t;}
// //选择排序
// for (int i = 0; i < 9; i ++)
// for (int j = i+1; j < 10; j ++)
// if (a[i] > a[j]) {int t = a[i]; a[i] = a[j]; a[j] = t;}
for (int i = 0; i < 10; i ++)
res = res + a[i] + " ";
/* **************************************************************************************** */
setLayout(new GridLayout(2, 1));
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JLabel l = new JLabel("十个随机数:");
JTextArea t = new JTextArea(str, 1, 20);
b = new JButton("点击进行排序");
b.addActionListener(this);
p1.add(l); p1.add(t);
p2.add(b);
add(p1); add(p2);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) new J14();
}
public static void main(String[] args) {new J13().setVisible(true);}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class J14 extends J10 implements ActionListener {
JButton b;
J14() {
setLayout(new GridLayout(2, 1));
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JLabel l = new JLabel("排序后的数:");
JTextArea t = new JTextArea(J13.res, 1, 20);
b = new JButton("点击结束");
b.addActionListener(this);
p1.add(l);p1.add(t);
p2.add(b);
add(p1); add(p2);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) System.exit(0);
}
public static void main(String[] args) {new J14().setVisible(true);}
}
现在我把上面的用两个窗口实现
1.创建窗口,并添加组件
package wp32;
import java.awt.*;
import java.awt.event.ActionEvent;
//import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.*;
public class J20 extends JFrame {
J20(){
setTitle("登录界面");
setSize(400, 400);
setLocationRelativeTo(null);
setVisible(true);
setLayout(new GridLayout(3,1));
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JLabel l1=new JLabel("账户:");
JLabel l2=new JLabel("密码: ");
JTextField t1=new JTextField(16);
JTextField t2=new JTextField(16);
final JButton b1=new JButton("登录");
final JButton b2=new JButton("退出");
JCheckBox c=new JCheckBox("忘记密码");
p1.add(l1); p1.add(t1);
p2.add(l2); p2.add(t2);
p3.add(b1); p3.add(b2);p3.add(c);
add(p1); add(p2); add(p3);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==b1) {
new J21().setVisible(true);;
}
}
} );
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==b2) {
System.exit(0);
}
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new J20().setVisible(true);
}
}
2.实现算法
package wp32;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
public class J21 extends JFrame {
JButton b;
static String str="",res="";
static int[]a=new int[10];
J21() {
Random r=new Random();
for(int i=0;i<10;i++) {
a[i]=r.nextInt(100);
str=str+a[i]+" ";
}
//冒泡排序
//for(int i1=0;i1<9;i1++)
//for(int j = 0;j<9-i1;j++)
//if(a[j]>a[j+1]) {
// int t=a[j];
//a[j]=a[j+1];
//a[j+1]=t;
//}
//for(int i1=0;i1<10;i1++)
//res=res+a[i1]+" ";
//选择排序
for (int i = 0; i < 9; i ++)
for (int j = i+1; j < 10; j ++)
if (a[i] > a[j]) {int t = a[i]; a[i] = a[j]; a[j] = t;}
for(int i=0;i<10;i++)
res=res+a[i]+" ";
setTitle("算法实现");
setSize(400, 400);
setLocationRelativeTo(null);
setLayout(new GridLayout(3,1));
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JPanel p3=new JPanel();
JLabel l1=new JLabel("十个随机数");
JLabel l2=new JLabel("排序后的数");
JTextArea t=new JTextArea(str,1,20);
JTextArea t1=new JTextArea(res,1,20);
b=new JButton("结束排序");
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==b) {
System.exit(0);
}
}
} );
p1.add(l1); p1.add(t);
p2.add(l2);p2.add(t1);
p3.add(b);
add(p1); add(p2);add(p3);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new J21().setVisible(true);
}
}
第二种方法:
package 登录界面;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Random;
import javax.swing.*;
//import 窗口.f1;
//import 窗口.Buttonb1;
//import 窗口.Buttonb2;
public class loginBox {
public static void main(String[] args) {
JFrame JF=new JFrame("登录界面");
JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JF.setLocationRelativeTo(null);
JF.setSize(400, 400);
//取得窗口的内容面板
Container C=JF.getContentPane();
//采用绝对布局,自己定义位置
JF.setLayout(null);
//设置文本框
JTextField[] JTF= {new JTextField(null,10),new JTextField(null,10)};
//通过标签JLabel设置标题、用户名、密码
JLabel title=new JLabel("登录界面1");
title.setBounds(20, 10, 100, 20);
title.setFont(new Font("serif",Font.PLAIN,20));//设置标签字体与字号
//添加标签
C.add(title);
JLabel jl1=new JLabel("用户名:");
jl1.setBounds(50,75,300,40);
C.add(jl1);
JTF[0].setBounds(120, 135,200, 25);
//添加文本框
C.add(JTF[0]);
JLabel jl2=new JLabel("密 码:");
jl2.setBounds(50,125,300,40);
C.add(jl2);
JTF[1].setBounds(120, 89, 200, 25);
C.add(JTF[1]);
//添加两个按钮
JButton[] btn= {new JButton("登录"),new JButton("退出")};
//JPanel bt1=new JPanel();
//将两个按钮放到JPanel上,在添加到设置位置
//按钮无法直接设置出现位置,即setBounds()
//bt1.setBounds(80,180,63,40);
btn[0].setBounds(100,210,63,20);
btn[1].setBounds(195,210,63,20);
C.add(btn[0]);
C.add(btn[1]);
//添加复写框
JCheckBox JCB=new JCheckBox("忘记密码");
JCB.setBounds(280, 210, 100, 20);
JCB.setFont(new Font("serif",Font.PLAIN,12));
C.add(JCB);
//C.add(bt1);
//窗口可调节大小,可视
JF.setResizable(false);
JF.setVisible(true);
//设置点击登录和退出的监听器的功能
btn[0].addActionListener((ActionListener) new Buttonb1());
btn[1].addActionListener((ActionListener) new Buttonb2());
//设置复选框的监听器功能
CBHandler h=new CBHandler();//创建监听器对象
JCB.addItemListener(h);
}
}
//实现复选框接口方法的内部类
class CBHandler implements ItemListener{
public void itemStateChanged(ItemEvent e) {
}
}
//创建退出的功能
class Buttonb2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
//第一次创建页面(同jframe)
//创建第一次登录的功能以及登陆完后的新页面
class Buttonb1 implements ActionListener{
public void actionPerformed(ActionEvent e) {
/*//在新页面设置一个运算按钮
Button f1 = new Button("运算");
Frame F = new Frame();
F.setVisible(true);
F.setLocationRelativeTo(null);
F.setSize(550,430);
F.setLayout(null);
F.add(f1);
//设置运算按钮的位置以及大小
f1.setBounds(149,172,270,123);
f1.setBackground(Color.pink);
//添加运算按钮的监控器
f1.addActionListener((ActionListener) new Button());
*/
//Button f1 = new Button("运算");
JFrame F=new JFrame();
F.setTitle("这是登录后的另一个注册界面");
F.setSize(400, 400);
F.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
F.setLocationRelativeTo(null);
F.setLocationRelativeTo(null);
F.setLayout(null);
F.setVisible(true);
//JPanel JP=new JPanel();
JLabel j1=new JLabel("自己的相关信息:");
j1.setFont(new Font("serif",Font.BOLD,12));//设置标签字体与字号
j1.setBounds(10, 20, 200, 20);
JLabel j2=new JLabel("1.性别:");
j2.setFont(new Font("serif",Font.BOLD,12));//设置标签字体与字号
j2.setBounds(20, 60, 200, 20);
JRadioButton jb1=new JRadioButton("男");
jb1.setBounds(80, 100, 100, 20);
JRadioButton jb2=new JRadioButton("女");
jb2.setBounds(200, 100, 100, 20);
JLabel j3=new JLabel("2.输入爱好:");
j3.setBounds(20, 150, 200, 20);
JTextField JTF=new JTextField();
JTF.setBounds(50,180,300,100);
JButton JB1=new JButton("确定");
JB1.setBounds(60, 300, 100, 30);
JButton JB2=new JButton("退出");
JB2.setBounds(220, 300, 100, 30);
F.add(j1);
F.add(j2);
F.add(jb1);
F.add(jb2);
F.add(j3);
F.add(JTF);
F.add(JB1);
F.add(JB2);
//设置点击登录和退出的监听器的功能
JB1.addActionListener((ActionListener) new Buttonb1());
JB2.addActionListener((ActionListener) new Buttonb2());
}
}
//创建第二个页面的退出的功能
class JB2 implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
private void setLayout(GridLayout gridLayout) {
// TODO 自动生成的方法存根
}
//设置运算按钮的监控器内容,展示下一个新页面
class Buttonb1 implements ActionListener{
public void actionPerformed(ActionEvent e) {
JFrame f1=new JFrame();
f1.setTitle("确定后打开的另一个新的界面");
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f1.setLocationRelativeTo(null);
f1.setLocationRelativeTo(null);
f1.setLayout(null);
f1.setVisible(true);
JLabel l1=new JLabel("随机数的算法");
JTextField J1=new JTextField();
J1.setBounds(50,180,300,100);
//JPanel P1=new JPanel();
//f1.add(P1);
f1.add(l1); f1.add(J1);
}
}
}
/*class J31 extends J10 implements ActionListener {
//设置静态变量,这样就可以与其他类共享使用(前提是都要在同一个包里)
static JButton b;
static String str = " ";
static int[] a = new int[10];
J31() {
//网格布局管理器
setLayout(new GridLayout(2, 1));
//两个面板
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
//标签和按钮
JLabel l = new JLabel("登陆成功");
b = new JButton("生成10个随机数");
//l.setFont(new Font("Serif", 1, 14));
//添加组件、面板
p1.add(l); p2.add(b);
add(p1); add(p2);
//为按钮注册监听器
b.addActionListener(this);
}
public static void main(String[] args) {new J31().setVisible(true);}
//实现ActionListener接口抽象方法来完成具体事件
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if (obj == b) {
Random r = new Random(); //生成
for (int i = 0; i < 10; i ++) { //10个
a[i] = r.nextInt(100); //随机
str = str + a[i] + " "; //数
}
new J411().setTitle("随机数排序算法窗口"); //设置新窗口的标题
this.setVisible(false);
}
}
}*/
以上就简单的说说这两个方法。