扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
本人急忙做的:有什么不合要求的请再告诉我:
创新互联建站是一家以网站建设、网页设计、品牌设计、软件运维、成都网站推广、小程序App开发等移动开发为一体互联网公司。已累计为成都酒店设计等众行业中小客户提供优质的互联网建站和软件开发服务。
package show;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Test extends JFrame implements ActionListener
{
GridBagLayout g=new GridBagLayout();
GridBagConstraints c=new GridBagConstraints();
Test(String str)
{
super(str);
setSize(300,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(g);
//调用方法
addComponent();
submit.addActionListener(this);
setVisible(true);
setLocationRelativeTo(null);//设居中显示;
}
//在这个方法中将会添加所有的组件;
//使用的网格包布局;希望楼主能看懂;
public void addComponent()
{
//个人信息登记
noteInformation=new JLabel("个人信息登记:");
add(g,c,noteInformation,0,0,1,1);
//用户名
userName=new JLabel("用户名:");
add(g,c,userName,0,1,1,1);
//用户名输入框
textUserName=new JTextField(10);
add(g,c,textUserName,1,1,2,1);
//密码:
password=new JLabel("密码:");
add(g,c,password,0,2,1,1);
//密码输入框
textUserPassword=new JTextField(10);
add(g,c,textUserPassword,1,2,2,1);
//性别
sex=new JLabel("性别:");
add(g,c,sex,0,3,1,1);
//男 女单选框
sexMan=new JRadioButton("男");
add(g,c,sexMan,1,3,1,1);
sexGirl=new JRadioButton("女");
add(g,c,sexGirl,2,3,1,1);
ButtonGroup group=new ButtonGroup();
group.add(sexMan);
group.add(sexGirl);
//出生日期
birthday=new JLabel("出生日期:");
add(g,c,birthday,0,4,1,1);
//复选框及其内容
String[] YEARS=new String[65];
for(int i=1950,k=0;i=2014;i++,k++)
{
YEARS[k]=i+"年";
}
year=new JComboBox(YEARS);
add(g,c,year,1,4,1,1);
//复选框及内容
month=new JComboBox(MONTH);
add(g,c,month,2,4,1,1);
//submit按钮
submit=new JButton("submit");
c.insets=new Insets(7,0,4,0);
add(g,c,submit,1,5,1,1);
result=new JTextArea(15,20);
add(g,c,result,0,6,3,4);
}
/* public void ActionPerformed(ActionEvent e)
{
String s=textUserName.getText();
String t=textUserPassword.getText();
String k=sexMan.getText();
String v=sexGirl.getText();
String a=(String) year.getSelectedItem();
String b=(String)month.getSelectedItem();
String num="用户名:"+s+"\n"+"密码: "+t+"性别: "+(k==null?v:k)+"\n"+"出生日期:"+a+" "+b;
result.append(num);
}*/
public void add(GridBagLayout g,GridBagConstraints c,JComponent jc,int x ,int y,int gw,int gh)
{
c.gridx=x;
c.gridy=y;
c.anchor=GridBagConstraints.WEST;
c.gridwidth=gw;
c.gridheight=gh;
g.setConstraints(jc,c);
add(jc);
}
public static void main(String args[])
{
new Test("个人信息登记表");
}
JLabel noteInformation,userName,password;
JLabel sex,birthday;
JTextField textUserName,textUserPassword;
JRadioButton sexMan,sexGirl;
JComboBox year,month;
JButton submit;
JTextArea result;
final String[] MONTH={"1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"};
@Override
public void actionPerformed(ActionEvent arg0)
{
String s=textUserName.getText();
String t=textUserPassword.getText();
String k=sexMan.getText();
String v=sexGirl.getText();
String a=(String) year.getSelectedItem();
String b=(String)month.getSelectedItem();
String num="用户名:"+s+"\n"+"密码: "+t+"\n 性别: "+(k==null?v:k)+"\n"+"出生日期:"+a+" "+b;
result.setText(num);
}
}
按照你第2点描述,你仅仅是想实现随即顺序点名而已,并不是随即点名。
我给你个解决方案:
在每次点中一名学生后,将java0803_students.txt文件中做个标示,表示该学生已经在本轮点名中被点过。
直到所有学生都点到后情况这个表示,准备下一轮点名做标记。
下面我给你一段伪代码,包含了 random 的使用方法:
public class CallStudents(){
private static Random random = new Random();
public void call(){
// 重新设置学生被点名的标示(根据点名情况)
reset();
long value = -1;
while (true) {
value = random.nextInt(maxValue + 1); // maxValue 是你当前有学生的最大数目
//在这里读取当前随即号对应的学生记录
String student = getStudentByID(value);
//判断该学生是否被点过名
if(!checkCalled(student)){
// 设置已经点过名
setCalled(student);
// 在控制台上显示被点名的学生信息
system.out.println(student);
// 结束循环
break;
}
}
}
private String getStudentByID(long id){
// 这个是读取文件,需要你自己实现的
// 返回 java0803_students.txt 文件中对应的学生记录
}
private boolean checkCalled(String student){
// 至于是什么样的规则,有你自己定义
// 我这里给你举个例子
// 如果这条学生记录中包含 一个字符为 called 的话,表明这名学生被点过名
if(student.indexOf("called") != -1){
retrn true;
}
return false;
}
private void setCalled(String student){
// 至于是什么样的规则,有你自己定义
// 我这里给你举个例子
// 设置学生已被点名
student += "_called";
// 将这个值重新写回到你的java0803_students.txt 文件中,覆盖愿信息!
}
private void reset(){
// 判断是否所有学生都被点过名,如果点过名,清空所有学生被点名的标记
// 这个实现有你自己定义,
// 这里我给你举个例子
// 读取文件,判断每一个学生信息是否都标有 called
// 如果都有,执行删除所有 called 的操作,并保存文件。
// 如果只有部分没有,则表明本轮点名没有结束,不做任何操作。
}
public static void main(String[] args){
String con = // 接受控制台信息
if(con.equals("y")){
CallStudents call = new CallStudents();
call.call();
}
if(con.equals("n")){
// 结束程序
}
}
}
因为你的i是在for循环中赋值,但是i的最新值是在下一次for循环时使用,比如,第一次for循环时,i初始为0,在循环中赋值得到2,但是输出的是初值0,2在第二次循环输出,所以到最后一次循环你会少加了一个50,你可以改成b=52或者如下
int sum = 0;
for(int i=0;i=50;i=i+2)
{
sum = sum+i;
System.out.println(sum);
}
最后,for循环很少你这种写法的,可以参考我的例子。
要是类名直接调用的方法,那这个方法就是静态的(static)方法,是不用new出新对象实例就可以直接调用的方法。例子如下:
class A{
public static void Method1(int a, int b){
//方法体
}
类名的命名是有讲究的,类名、属性名、变量名一般是名词,或者是形容词+名词。
方法一般是动词,或者是动词+名词,以AnnotationTest作为类名和以TestAnnotation作为类名是有区别的,前者是注解的测试,符合名词的特征,后者是测试注解,听起来就是一个动作名称,是方法的命名特征。
扩展资料
关键词主要有static和abstract两个关键词。有static修饰的方法叫做静态方法。没有的则叫非静态方法。其中我们最熟悉的main方法就有static 修饰。这个方法也是我最不熟悉搞不懂的方法。
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的。因为它不依附于任何对象,既然都没有对象,就谈不上this了。
用static修饰的方法。由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制:
1、类方法中不能引用对象变量;
2、类方法中不能调用类的对象方法;
3、在类方法中不能调使用super,this关键字;
4、类方法不能被覆盖。
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.swing.*;public class Login extends JFrame{
JLabel user,passwd;
JTextField userput;
JPasswordField passput;
JButton denglu,tuichu;
public Login(){
super("用户登录");
Container c=getContentPane();
c.setLayout(null);
Font f=new Font("宋体",Font.PLAIN,12);
user=new JLabel("账号");
passwd=new JLabel("密码");
userput=new JTextField();
passput=new JPasswordField();
denglu=new JButton("登录");
denglu.setFont(f);
denglu.addActionListener(new NewAction());
tuichu=new JButton("退出");
tuichu.setFont(f);
tuichu.addActionListener(new NewAction());
user.setBounds(50,50,60,20);
userput.setBounds(110,50,150,20);
passwd.setBounds(50,80,60,20);
passput.setBounds(110,80,150,20);
denglu.setBounds(50,160,60,30);
tuichu.setBounds(200,160,60,30);
c.add(user);
c.add(userput);
c.add(passwd);
c.add(passput);
c.add(denglu);
c.add(tuichu);
setSize(350, 300);
setVisible(true);
}
class NewAction implements ActionListener{
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=CDM";
String user="sa";
String passwd="394513265";
java.sql.Connection con;
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con= DriverManager.getConnection(url,user,passwd);
}catch(Exception ep){
JOptionPane.showMessageDialog(null, "加载驱动失败!");
}
if(e.getSource()==denglu){
Find();
}
if(e.getSource()==tuichu){
dispose();
}
} public void Find(){
String lk="select * from login";
try{
Statement sql=con.createStatement();
ResultSet rs=sql.executeQuery(lk);
while(rs.next()){
if(rs.getString(1).equals(userput.getText()) rs.getString(2).equals(passput.getText()))
new MainClient();
else
JOptionPane.showMessageDialog(null, "用户名或密码错误");
}
rs.close();
}catch(SQLException p){
JOptionPane.showMessageDialog(null, p.getMessage());
}
}
}
public static void main(String[] args) {
Login l=new Login();
l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
步骤就是建个工程 然后建个class
概述
具体框架使用jframe,文本框组件:JTextField;密码框组件:JPasswordField;标签组件:JLabel;复选框组件:JCheckBox;单选框组件:JRadioButton;按钮组件JButton。
登录界面:
代码实例
import javax.swing.*;
import java.awt.*; //导入必要的包
public class denglu extends JFrame{
JTextField jTextField ;//定义文本框组件
JPasswordField jPasswordField;//定义密码框组件
JLabel jLabel1,jLabel2;
JPanel jp1,jp2,jp3;
JButton jb1,jb2; //创建按钮
public denglu(){
jTextField = new JTextField(12);
jPasswordField = new JPasswordField(13);
jLabel1 = new JLabel("用户名");
jLabel2 = new JLabel("密码");
jb1 = new JButton("确认");
jb2 = new JButton("取消");
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
//设置布局
this.setLayout(new GridLayout(3,1));
jp1.add(jLabel1);
jp1.add(jTextField);//第一块面板添加用户名和文本框
jp2.add(jLabel2);
jp2.add(jPasswordField);//第二块面板添加密码和密码输入框
jp3.add(jb1);
jp3.add(jb2); //第三块面板添加确认和取消
// jp3.setLayout(new FlowLayout()); //因为JPanel默认布局方式为FlowLayout,所以可以注销这段代码.
this.add(jp1);
this.add(jp2);
this.add(jp3); //将三块面板添加到登陆框上面
//设置显示
this.setSize(300, 200);
//this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setTitle("登陆");
}
public static void main(String[] args){
new denglu();
}
}
拓展内容
java swing包
Swing 是一个为Java设计的GUI工具包。
Swing是JAVA基础类的一部分。
Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执行速度较慢,优点就是可以在所有平台上采用统一的行为。
概念解析:
JFrame – java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。
JPanel – Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,可以进行嵌套,功能是对窗体中具有相同逻辑功能的组件进行组合,是一种轻量级容器,可以加入到JFrame窗体中。。
JLabel – JLabel 对象可以显示文本、图像或同时显示二者。可以通过设置垂直和水平对齐方式,指定标签显示区中标签内容在何处对齐。默认情况下,标签在其显示区内垂直居中对齐。默认情况下,只显示文本的标签是开始边对齐;而只显示图像的标签则水平居中对齐。
JTextField –一个轻量级组件,它允许编辑单行文本。
JPasswordField – 允许我们输入了一行字像输入框,但隐藏星号(*) 或点创建密码(密码)
JButton – JButton 类的实例。用于创建按钮类似实例中的 "Login"。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流