JavaSwing笔记
1.0快速入门
1.1JFrame窗口
1.1.1JFrame下的常用方法
①setSize(int width, int height) 用来设置窗口大小尺寸width代表长,height代表高
②setLocation(int x, int y) 用来设置窗口位置,x代表水平位置,y代表垂直位置,左上角为起点
③setBounds(int x, int y, int width, int height) x代表水平位置,y代表垂直位置,左上角为起点,width代表长,height代表高
④setResizable(false) 代表窗口尺寸大小不可变,如果不设置的话默认为true,表示窗口尺寸可以变化
⑤setVisible(true) 代表窗口可见
⑥setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE) 设置x代表关闭
⑦new JFrame(“标题”) 使用参数时参数代表标题
⑧setTitle(String title) 使用new JFrame()空参创建窗口时,可以使用setTitle(String title)方法来设置标题
使用JFrame搭建一个窗口
public class SwingDemo1 {
public static void main(String[] args) {
//父框架面板
JFrame jf=new JFrame("JFrame");
jf.setSize(400,250);
jf.setLocation(400,400);
jf.setResizable(false);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
1.2JDialog子窗口
JDialog是JFrame下的子框架,其使用方法和JFrame类似,需要注意的是,父框架关闭子框架也会被关闭
public class SwingDemo1 {
public static void main(String[] args) {
//父框架面板
JFrame jf=new JFrame("JFrame");
jf.setSize(400,250);
jf.setLocation(400,400);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//子框架面板
JDialog jd=new JDialog(jf,"JDialog");
jd.setSize(200,100);
jd.setLocation(450,500);
jd.setVisible(true);
jd.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.3JButton按钮
创建一个JButton按钮,创建一个JPanel面板,将JPanel面板添加到JFrame窗口中,将JButton按钮添加到JPanel面板中
注意: jf.setVisible(true);要设置在最后,不然初始化窗口时可能看不见按钮
public class SwingDemo2 {
public static void main(String[] args) {
JFrame jf=new JFrame("按钮");
jf.setBounds(400,300,400,250);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JButton jb1=new JButton("按钮1");
JButton jb2=new JButton("按钮2");
JPanel jp=new JPanel(new FlowLayout());
jp.add(jb1);
jp.add(jb2);
jf.add(jp);
jf.setVisible(true);
}
}
截图如下:
1.4JLabel标签
用来设置文本标签
public class SwingDemo3 {
public static void main(String[] args) {
JFrame jf=new JFrame("JLabel标签");
jf.setBounds(400,300,600,400);
JLabel jl1=new JLabel("账号:",SwingConstants.LEFT);
JLabel jl2=new JLabel("密码:",SwingConstants.LEFT);
JPanel jp=new JPanel(null);
jl1.setBounds(0,0,50,20);
jl2.setBounds(0,20,50,20);
jp.add(jl1);
jp.add(jl2);
jf.add(jp);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.5常用的三种按钮-JRadioButton,JCheckBox,JComboBox
常用的三种按钮有单选按钮,复选按钮,下拉选项按钮
示例如下:
public class SwingDemo4 {
public static void main(String[] args) {
JFrame jf=new JFrame("按钮");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setBounds(400,300,600,400);
//以下为单选按钮
JRadioButton jrb1=new JRadioButton("男");
JRadioButton jrb2=new JRadioButton("女");
ButtonGroup bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jf.add(jrb1);
jf.add(jrb2);
//以下为多选按钮
JCheckBox jcb1=new JCheckBox("睡觉",true);
JCheckBox jcb2=new JCheckBox("吃饭",false);
JCheckBox jcb3=new JCheckBox("打游戏",false);
JCheckBox jcb4=new JCheckBox("看书",false);
jf.add(jcb1);
jf.add(jcb2);
jf.add(jcb3);
jf.add(jcb4);
//以下为下拉选项按钮
JComboBox cb=new JComboBox();
cb.addItem("--学历选择--");
cb.addItem("--高中--");
cb.addItem("--本科--");
cb.addItem("--研究生--");
jf.add(cb);
//最后设置窗口可见
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.6JMenuBar菜单栏
常用的菜单栏设置如下
示例代码如下:
public class SwingDemo5 {
public static void main(String[] args) {
JFrame jf=new JFrame("菜单栏");
jf.setBounds(400,300,600,400);
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
//设置一个菜单栏
JMenuBar mr=new JMenuBar();
//菜单选项
JMenu menu=new JMenu("File");
JMenu menu1=new JMenu("Edit");
JMenu menu2=new JMenu("View");
//菜单下的选项
JMenuItem item1=new JMenuItem("New");
JMenuItem item2=new JMenuItem("Open");
JMenuItem item3=new JMenuItem("Setting");
JMenuItem item4=new JMenuItem("Cut");
JMenuItem item5=new JMenuItem("Copy");
JMenuItem item6=new JMenuItem("Tool Window");
JMenuItem item7=new JMenuItem("Show Siblings");
mr.add(menu);
mr.add(menu1);
mr.add(menu2);
menu.add(item1);
menu.add(item2);
menu.add(item3);
menu1.add(item4);
menu1.add(item5);
menu2.add(item6);
menu2.add(item7);
jf.add(mr);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.7JTextField文本框
用来设置单行文字框
public class SwingDemo6 {
public static void main(String[] args) {
JFrame jf=new JFrame("文本");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setBounds(400,300,350,200);
jf.setResizable(false); //窗口大小不可变
JLabel jl1=new JLabel("账号:");
JTextField textField1=new JTextField("请输入账号",22);
JLabel jl2=new JLabel("密码:");
JPasswordField passwordField=new JPasswordField(22);
jf.add(jl1);
jf.add(textField1);
jf.add(jl2);
jf.add(passwordField);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.8JTextArea文本域
多行文本框
①public JTextArea(int rows, int columns) 中rows代表行,columns代表列
②setLineWrap(true) true代表自动换行,如果设置不设置的话默认为false,代表不自动换行,如果长度超过列数文本框将继续在同一行输出,文本框长度增大
public class SwingDemo7 {
public static void main(String[] args) {
JFrame jf=new JFrame("文本域");
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
jf.setBounds(400,300,400,200);
JTextArea textArea=new JTextArea(20,5);
textArea.setLineWrap(true); //自动换行
jf.add(textArea);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.9addActionListener事件
事件,设置发送消息按钮触发事件,单机一次将在文本域中追加输出一行文字
public class SwingDemo8 {
public static void main(String[] args) {
JFrame jf=new JFrame("事件");
jf.setBounds(400,300,600,400);
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
JTextArea ta=new JTextArea(20,20);
ta.setLineWrap(true);
JButton jb=new JButton();
jb.setText("发送消息");
jb.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
ta.append("你好啊,年轻人\n");
}
});
jf.add(ta);
jf.add(jb);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下:
1.10连接数据库
在登录按钮中添加事件,查询数据库
//查询数据库登录
public class SwingDemo9 {
public static void main(String[] args) {
JFrame jf=new JFrame("登录");
jf.setBounds(400,300,300,250);
jf.setResizable(false);
jf.setLayout(new FlowLayout(FlowLayout.LEFT));
JLabel jLabel1=new JLabel("账号:");
JTextField un=new JTextField("",20);
JLabel jLabel2=new JLabel("密码:");
JPasswordField pwd=new JPasswordField("",20);
pwd.setEchoChar('*');
JLabel state=new JLabel("登录状态");
JButton jb=new JButton("登录");
jb.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
Connection connection = null;
Statement statement = null;
ResultSet rs=null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/testdb";
String username="root";
String password="root";
connection= DriverManager.getConnection(url,username,password);
statement=connection.createStatement();
String sql="SELECT name,password From user";
rs=statement.executeQuery(sql);
boolean flag=false;
while(rs.next()){
if(rs.getString(1).equals(un.getText())&&rs.getString(2).equals(pwd.getText())){
flag=true;
state.setText("登录成功");
break;
}
}
if(flag==false){
state.setText("登录失败");
}
} catch (Exception ex) {
ex.printStackTrace();
}finally {
if(rs!=null){
try {
rs.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
}
});
jf.add(jLabel1);
jf.add(un);
jf.add(jLabel2);
jf.add(pwd);
jf.add(state);
jf.add(jb);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
截图如下: