public class Wnd1 extends JFrame{
JLabel lblAccount = new JLabel("账号:");
JTextField jtfAccount = new JTextField(25);
JLabel lblPwd = new JLabel("密码:");
JPasswordField jtfPwd = new JPasswordField(25);
JButton btnLogin = new JButton("登录");
JButton btnCalcel = new JButton("取消");
/*
JButton jb1 = new JButton("东");
JButton jb2 = new JButton("南");
JButton jb3 = new JButton("西");
JButton jb4 = new JButton("北");
JButton jb5 = new JButton("中");*/
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
JPanel jp4 = new JPanel();
JPanel jp3 = new JPanel();
public Wnd1(){
//设置窗口的一些特性:
//1、设置大小
this.setSize(400,300);
//2、设置标题
this.setTitle("QQ登录");
//3、设置可见
this.setVisible(true);
//4、设置可以被关闭
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//5、设置窗口的位置,相对桌面居中
this.setLocationRelativeTo(null);
//6、设置不能改变大小
this.setResizable(false);
//放入我们的组件
initComponent();
}
/**
*初始化各个组件
*/
public void initComponent(){
jp1.add(lblAccount);
jp1.add(jtfAccount);
jp2.add(lblPwd);
jp2.add(jtfPwd);
jp4.add(btnLogin);
jp4.add(btnCalcel);
jp3.add(jp1);
jp3.add(jp2);
jp3.add(jp4);
// 将jp3放在窗口的中间.
this.add(jp3, "Center");
// 事件处理者
MyHandler myHandler = new MyHandler();
// 将事件源和事件处理者关联
btnLogin.addActionListener(myHandler);
// 将组件放入窗口受布局的影响,我们JFrame的默认布局是边框布局。
/*this.add(jb5,"Center");
this.add(jb1, "East");
this.add(jb2, "South");
this.add(jb3,"West");
this.add(jb4,"North");*/
}
/**
*事件处理者
*ActionListener:按钮的点击事件接口
*/
class MyHandler implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// 获取账号,密码信息
String account = Wnd1.this.jtfAccount.getText();
String pwd = jtfPwd.getText();
if("admin".equals(account) && "123".equals(pwd)){
System.out.println("登录成功!");
Wnd2 wnd2 = new Wnd2();
// 释放窗口
dispose();
}else{
System.out.println("账号或密码错误!");
// null:表示是这个消息框的父窗口
JOptionPane.showMessageDialog(Wnd1.this,"账号或密码错误!");
}
}
}
public static void main(String[] args) {
new Wnd1();
}
}
public class Wnd2 extends JFrame{
public Wnd2(){
this.setSize(800,400);
this.setVisible(true);
}
}
/**
* 构造一个指定行和列的空表格
*/
JTable(int,int)
/**
* 第一个参数为 Object 类型的二维数组,第一维表示行,第二维表示
* 每行的具体数据
* 第二个参数为 Object 类型的一维数组,表示每列的列表名
*/
JTable(Object[][],Object[])
/**
* 使用模型来构造表格,TableModel 是一个接口,我们可以
* 自己写一个类实现这个接口,从而完成模型的功能
*
* Java 也帮我们提供了一个默认的表模型,DefaultTableModel
* DefaultTableModel mdl=new DefaultTableModel(vRows,vColums);
* JTable myTable=new JTable(mdl);
*/
JTable(TableModel model)
void addRow(Object[] rowData) // 在模型的末尾添加一行
void addRow(Vector rowData) // 在模型的末尾添加一行
void removeRow(int row) // 从模型中删除 row 的行
public class JTableDemo1 extends JFrame{
JTable myTable;
public JTableDemo1(){
this.setSize(500,400);
this.setTitle("我的数据表");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
initComponent();
this.setVisible(true);
}
public void initComponent(){
Object[] columns = {
"编号",
"姓名",
"性别",
"职位"
};
Object[][] rowData = {
{1,"张飞","男","打手"},
{2,"关羽","男","打手"},
{3,"孔明","男","军事"},
{4,"小乔","女","小三"},
};
// 将表格放入窗口中
myTable = new JTable(rowData, columns);
// 设置单元格的高
myTable.setRowHeight(30);
// 将表格放入一个滚动界面中
this.add(new JScrollPane(myTable));
}
public static void main(String[] args){
new JTableDemo1();
}
}
public class JTableDemo2 extends JFrame{
JTable myTable;
public JTableDemo2(){
this.setSize(500,400);
this.setTitle("我的数据表");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
initComponent();
this.setVisible(true);
}
public void initComponent(){
// 表示是列名称
Vector vColumns = new Vector();
vColumns.add("编号");
vColumns.add("姓名");
vColumns.add("性别");
vColumns.add("职位");
//表示行的数据
Vector vRows = new Vector();
Vector v1 = new Vector();
v1.add(1);
v1.add("张飞");
v1.add("男");
v1.add("打手");
vRows.add(v1);
Vector v2 = new Vector();
v2.add(2);
v2.add("张飞");
v2.add("男");
v2.add("打手");
vRows.add(v2);
Vector v3 = new Vector();
v3.add(3);
v3.add("张飞");
v3.add("男");
v3.add("打手");
vRows.add(v3);
Vector v4 = new Vector();
v4.add(4);
v4.add("张飞");
v4.add("男");
v4.add("打手");
vRows.add(v4);
// 不加入这个模型的话,后续进行增删改有问题
DefaultTableModel mdl = new DefaultTableModel(vRows, vColumns);
// 将表格放入窗口中
myTable = new JTable(mdl);
// 设置单元格的高
myTable.setRowHeight(30);
// 将表格放入一个滚动界面中
this.add(new JScrollPane(myTable));
}
public static void main(String[] args) {
new JTableDemo2();
}
}
public class JTableDemo3 extends JFrame{
JTable myTable;
JButton btnAdd = new JButton("新增");
JButton btnDel = new JButton("删除");
JPanel pnl = new JPanel();
private DefaultTableModel mdl;
public JTableDemo3(){
this.setSize(500,400);
this.setTitle("我的数据表");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
initComponent();
this.setVisible(true);
}
public void initComponent(){
pnl.add(btnAdd);
pnl.add(btnDel);
this.add(pnl,"South");
btnAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AddEmpFrame addEmpFrame = new AddEmpFrame(mdl);
}
});
btnDel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 点击是:0,否:1,取消:2,×:-1
int i = JOptionPane.showConfirmDialog(null, "确认删除吗?");
if(i==0){
// 获取表格的选中的行
int selectedRow = myTable.getSelectedRow();
if(selectedRow==-1){
JOptionPane.showMessageDialog(null,"没有选中任何行!");
return;
}
mdl.removeRow(selectedRow);
}
}
});
//表示是列名称
Vector vColumns = new Vector();
vColumns.add("编号");
vColumns.add("姓名");
vColumns.add("性别");
vColumns.add("职位");
//表示行的数据
Vector vRows = new Vector();
Vector v1 = new Vector();
v1.add(1);
v1.add("张飞");
v1.add("男");
v1.add("打手");
vRows.add(v1);
Vector v2 = new Vector();
v2.add(2);
v2.add("张飞");
v2.add("男");
v2.add("打手");
vRows.add(v2);
Vector v3 = new Vector();
v3.add(3);
v3.add("张飞");
v3.add("男");
v3.add("打手");
vRows.add(v3);
Vector v4 = new Vector();
v4.add(4);
v4.add("张飞");
v4.add("男");
v4.add("打手");
vRows.add(v4);
// 不加入这个模型的话,后续进行增删改有问题
mdl = new DefaultTableModel(vRows, vColumns);
// 将表格放入窗口中
myTable = new JTable(mdl);
// 设置单元格的高
myTable.setRowHeight(30);
// 将表格放入一个滚动界面中
this.add(new JScrollPane(myTable));
}
public static void main(String[] args) {
new JTableDemo3();
}
}
class AddEmpFrame extends JFrame{
DefaultTableModel mdl;
JLabel lbl1 = new JLabel("编号:");
JLabel lbl2 = new JLabel("姓名:");
JLabel lbl3 = new JLabel("性别:");
JLabel lbl4 = new JLabel("职业:");
JTextField jtf1 = new JTextField(25);
JTextField jtf2 = new JTextField(25);
JTextField jtf3 = new JTextField(25);
JTextField jtf4 = new JTextField(25);
JButton btnSave = new JButton("保存");
JButton btnClose = new JButton("关闭");
JPanel pn1 = new JPanel();
JPanel pn2 = new JPanel();
JPanel pn3 = new JPanel();
JPanel pn4 = new JPanel();
JPanel pn5 = new JPanel();
JPanel pn6 = new JPanel();
public AddEmpFrame(DefaultTableModel mdl){
this.mdl = mdl;
this.setSize(400,500);
this.setTitle("新增员工");
this.initComponent();
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void initComponent(){
pn1.add(lbl1);
pn1.add(jtf1);
pn2.add(lbl2);
pn2.add(jtf2);
pn3.add(lbl3);
pn3.add(jtf3);
pn4.add(lbl4);
pn4.add(jtf4);
pn5.add(btnSave);
pn5.add(btnClose);
pn6.add(pn1);
pn6.add(pn2);
pn6.add(pn3);
pn6.add(pn4);
pn6.add(pn5);
this.add(pn6);
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Vector v = new Vector();
v.add(jtf1.getText());
v.add(jtf2.getText());
v.add(jtf3.getText());
v.add(jtf4.getText());
mdl.addRow(v);
}
});
btnClose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
}
@OVerride
public void paint(Graphics g){
super.paint(g);
// 绘制你自己的图形
for(int i=0;i<lines.size(){
Line line=(Line) lines.get(i);
g.drawLine(line.x1,line.y1,line.x2,line.y2);
}
}
/**
* Toolkit:工具包
* Toolkit.getDefaultToolkit():获取默认工具包
*/
Image img=Toolkit.getDefaultToolkit().getImage("pName.png");
资料 |
---|
JAVA_API_CN.exe |
JavaAPI 学习(java.lang).pdf |
java笔记.txt |
资料 |
---|
基本数据类型、包装类型和 String 间的转换 |
字符串的本质是字符数组,具有不可变性
字符串的构造
String 的常用 API
方法原型 | 说明 |
---|---|
boolean equalsIgnoreCase(String anotherString) | 判断字符串 anotherString 是否与当前字符串相等,忽略大小写模式 |
int compareTo(String anotherString | 根据 ASCII 码比较字符串 anotherString 和当前字符串的大小,比较方式类似于 c 语言中的 strcmp 函数 |
boolean startsWith(String prefix) | 判断当前字符串是否以字符串 prefix 为开头 |
boolean endsWith(String suffix) | 判断当前字符串是否以字符串 suffix 为后缀 |
int indexOf(int ch) | 搜索字符 ch 在当前字符串中第一次出现的索引,没有出现则返回 -1 |
int indexOf(String str) | 搜索字符串 str 在当前字符串中第一次出现的索引,没有出现则返回 -1 |
int lastIndexOf(int ch) | 搜索字符 ch 在当前字符串中最后一次出现的索引,没有出现则返回 -1 |
int lastIndexOf(String str) | 搜索字符串 str 在当前字符串中最后一次出现的索引,没有出现则返回 -1 |
char cahrAt(int index) | 用于从指定位置提取单个字符,该位置由 index 指定,索引值必须为非负数 |
String substring(in index) | 用于提取从 index 指定的位置开始的字符串部分 |
String substring(int begin,int end) | 用于提取 begin 和 end 位置之间的字符串部分 |
String concat(String str) | 用于连接两个字符串,并新建一个包含调用字符串的字符串对象 |
String replace(char oldChar,char newChar) | 用于将调用字符串中出现的 oldChar 指定的字符全部替换为 newChar 指定的字符 |
replaceAll(String regex,String replacement) | 用于将调用字符串中出现或者匹配 regex 的字符串全部都替换为 replacement 指定的字符 |
String trim() | 用于返回一个前后不含任何空格的调用字符串的副本 |
正则表达式(用于验证指定字符串是否合法的一个模板)
// s:你要验证的字符串,表达式:(匹配公式)
boolean bFlag=s.matches(表达式);
单个字符
标识符 | 说明 |
---|---|
某个单词(例如:1) | 直接匹配 |
. | 匹配任意的字符 |
[0-9] | 数组1-9,在里面时 |
^表达式 | 必须以表达式的规则为开头 |
表达式$ | 必须以表达式的规则为结尾 |
字符个数
标识符 | 次数 |
---|---|
* | 0次或者多次 |
+ | 1次或者多次 |
? | 0次或者1次 |
{n} | 恰好 n 次 |
{n, } | n 次到无限 |
{n,m} | 从 n 次到 m 次 |
快捷符号
标识符 | 说明 |
---|---|
\d | 表示 [0-9] |
\D | 表示 [^ 0-9] |
\w | 表示 [0-9A-Z_a-z] |
\W | 表示[^0-9A-Z_a-z] |
\s | 表示 [\t \n \r] |
\S | 表示 [^ \t \n \r \f] |
正则表达式作用
/**
* 当 append 和 insert 时,如果原来 value 数组长度不够,可扩容
*/
StringBuffer append(xxx); // 提供了很多的 append() 方法,用于进行字符串拼接
StringBuffer insert(int offset,xxx); // 在指定位置插入 xxx
StringBuffer delete(int start,int end); // 删除指定位置的内容
StringBuffer replace(int start,int end,String str); // 把 [start,end) 位置替换成 str
StringBuffer reverse(); // 把当前字符串序列逆转
int indexOf(String str);
char charAt(int n);
void setCharAt(int n,char ch);
int length();
String substring(int start,int end);
public static double ceil(double a){ // 代码体 }
public static double floor(double a){ // 代码体 }
public static int round(float a){ // 代码体 }
public static long round(double a){ // 代码体 } // -12.5会出现错误
public static double pow(double a,double b){ // 代码体 }