跟着明日科技学Swing
窗体JFrame
import java.awt.Color;
import java.awt.Container;
import javax.swing.*;
public class Demo_Swing extends JFrame {// 一般让此类也成为窗体
public Demo_Swing() {// 构造方法
setTitle("窗体标题");// 设置窗体标题
// JFrame f = new JFrame("窗体标题");//创建窗体对象
setVisible(true);// 设置窗体可见
/*
* 窗体关闭规则:
* EXIT_ON_CLOSE:隐藏窗体,并停止程序
* DO_NOTHING_ON_CLOSE:无任何操作
* HIDE_ON_CLOSE:隐藏窗体但不停止程序
* DISPOSE_ON_CLOSE:释放窗体资源
*/
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// f.setSize(300, 200);//设置窗体的大小 像素是像素
// f.setLocation(200,200);//设置坐标 像素是像素
setBounds(200, 200, 300, 200);// 设置窗体坐标和大小 像素是像素
Container c = getContentPane();// 获取窗体容器
c.setBackground(Color.WHITE);// 设置背景颜色
JLabel l = new JLabel("俺是窗体QAQ");
c.add(l);// 添加组件
// c.remove(l);//删除组件
c.validate();// 验证容器中的组件 相当于刷新操作
// f.setContentPane(c);//重新载入容器
setResizable(true);// false禁用窗体拖拽改变大小
System.out.println("x=" + getX());// 获取横坐标
System.out.println("x=" + getY());// 获取纵坐标
}
public static void main(String[] args) {
new Demo_Swing();// 直接调用构造方法
}
}
运行截图
对话框窗体JDialog
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Demo_JDialog extends JDialog {
public Demo_JDialog(JFrame frame) {
/*
* 第一个参数 父窗体
* 第二个参数 对话框标题
* 第三个参数 是否阻塞父窗体
*/
super(frame, "对话框标题", true);// 设置对话框是否覆盖窗体 (true 阻塞)
Container c = getContentPane();// 获取窗体容器
c.setBackground(Color.WHITE);// 设置背景颜色
c.add(new JLabel("俺是对话框"));
// setVisible(true);//设置窗体可见
setBounds(100, 100, 200, 100);// 设置坐标和大小
}
public static void main(String[] args) {
JFrame f = new JFrame("窗体标题");// 创建窗体对象
f.setBounds(200, 200, 300, 200);// 设置窗体坐标和大小 像素是像素
Container c = f.getContentPane();// 获取容器
JButton btn = new JButton("你敢按一下试试");// 设置按钮
c.setLayout(new FlowLayout());// 设置布局 流布局(按钮清晰可见)
c.add(btn);// 将按钮装入容器
f.setVisible(true);// 设置窗体可见
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭
btn.addActionListener(new ActionListener() {// 由按钮引出对话框
public void actionPerformed(ActionEvent e) {
Demo_JDialog d = new Demo_JDialog(f);
d.setVisible(true);// 设置窗体可见
}
});// 添加动作监听
}
}
运行截图
标签JLable
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Demo_JLabel extends JFrame {
public Demo_JLabel() {
setBounds(100, 100, 300, 200);// 设置坐标和大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭规则
Container c = getContentPane();// 获取容器
setVisible(true);// 设置可见
JLabel l = new JLabel("俺是标题");// 设置标题
l.setText("假装没有更改标题");// 修改标签
System.out.println("打印标题:" + l.getText());
l.setFont(new Font("楷体", Font.BOLD, 15));// 设置字体
l.setForeground(Color.GREEN);//设置字体颜色
c.add(l);
}
public static void main(String[] args) {
new Demo_JLabel();
}
}
运行截图
图片的使用
import java.awt.Container;
import java.awt.Image;
import java.net.URL;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Demo_picture extends JFrame {
public Demo_picture() {
setTitle("皮卡丘");// 设置窗体标题
setBounds(100, 100, 800, 500);// 设置坐标和大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭规则
Container c = getContentPane();// 获取容器
JLabel l = new JLabel("站住!你是干啥滴!");// 使用标签展示图片
// URL url=Demo_picture.getResource("");//获取文件UML路径
// System.out.println(url);//输出路径
Icon icon = new ImageIcon("C:\\Users\\联想\\Pictures\\Saved Pictures\\2edb00006cb08accfed0.png");// 文件路径
l.setIcon(icon);// 添加图片
//等比缩小
int width = 200; //假设要缩小到500点像素
int height = icon.getIconHeight()*width/icon.getIconWidth();//按比例,将高度缩减
((ImageIcon) icon).setImage(((ImageIcon) icon).getImage().getScaledInstance(width, height,Image.SCALE_DEFAULT ));//设置图片大小
l.setSize(20, 20);// 设置标签大小,并不能改变图片的大小
c.add(l);
setVisible(true);// 设置可见
}
private static URL getResource(String string) {
// TODO 自动生成的方法存根
return null;
}
public static void main(String[] args) {
new Demo_picture();
}
}
运行截图
绝对布局
流布局
边界布局
网格布局
布局代码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.*;
public class Demo_layout extends JFrame {
public Demo_layout() {
setBounds(200, 200, 500, 300);// 设置窗体坐标和大小
setVisible(true);// 设置窗体可见
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭方法
Container c = getContentPane();// 设置容器
// 绝对布局null
// JButton b1=new JButton("这不是按钮1"),
// b2=new JButton("这不是按钮2"),
// b3=new JButton("这不是按钮3");//创建三个按钮
// c.setLayout(null);//将容器布局设置为绝对布局
// b1.setBounds(10,30,80,30);//设置按钮在容器中的坐标和大小
// b2.setBounds(60,70,100,20);
// b3.setBounds(100,90,80,30);
// c.add(b1);
// c.add(b2);
// c.add(b3);//添加三个按钮
// //流布局 FlowLayout 从左到右排列,默认居中对齐
// //c.setLayout(new FlowLayout());
// c.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));//可添加具体要求
// FlowLayout.CENTER 来设置布局 20,20 分别为水平间距和垂直间距
// for(int i=0;i<12;i++)
// {
// c.add(new JButton("这不是按钮"+i));
// }
// 边界布局 BorderLayout 将窗体划分成五个区域 东南西北中
// 添加组件时指定区域,否则默认中间区域 同一区域组件会相互覆盖
// c.setLayout(new BorderLayout());// 设置为边界布局
// JButton b1 = new JButton("中"),
// b2 = new JButton("东"),
// b3 = new JButton("南"),
// b4 = new JButton("西"),
// b5 = new JButton("北");
// c.add(b1, BorderLayout.CENTER);// 中部添加按钮
// c.add(b2, BorderLayout.EAST);// 东部
// c.add(b3, BorderLayout.SOUTH);// 南部
// c.add(b4, BorderLayout.WEST);// 西部
// c.add(b5, BorderLayout.NORTH);// 北部
// c.add(new JButton("无情被覆盖"),BorderLayout.CENTER);
//
// //网格布局 改变窗体大小组件不会改变与流布局不同之处 会扩大行
// c.setLayout(new GridLayout(7, 5,5,5));//设置网格布局7行5列,水平间距5,垂直间距5
// for(int i=0;i<35;i++)
// {
// c.add(new JButton("俺不是按钮"+i));
// }
//
// //********************************************************************
// //面板 只能在窗体中使用
// //添加组件 设置布局 更改属性
// c.setLayout(new GridLayout(2,2,10,10));
//
// JPanel p1=new JPanel();
// p1.setLayout(new GridLayout(1,3,10,10));
//
// JPanel p2=new JPanel(new BorderLayout());
// JPanel p3=new JPanel(new GridLayout(1,2,10,10));
// JPanel p4=new JPanel(new GridLayout(2,1,10,10));
//
// /*
// * 添加边框
// */
// p1.setBorder(BorderFactory.createTitledBorder("面板1"));//添加标题边框
// p2.setBorder(BorderFactory.createTitledBorder("面板2"));//添加标题边框
// p3.setBorder(BorderFactory.createTitledBorder("面板3"));//添加标题边框
// p4.setBorder(BorderFactory.createTitledBorder("面板4"));//添加标题边框
// //为面板一添加按钮
// for(int i=0;i<4;i++)
// {
// p1.add(new JButton("俺不是按钮"+i));
// }
// //为面板二添加按钮
// p2.add(new JButton("俺不是按钮1"), BorderLayout.CENTER);// 中部添加按钮
// p2.add(new JButton("俺不是按钮2"), BorderLayout.EAST);// 东部
// p2.add(new JButton("俺不是按钮3"), BorderLayout.SOUTH);// 南部
// p2.add(new JButton("俺不是按钮4"), BorderLayout.WEST);// 西部
// p2.add(new JButton("俺不是按钮5"), BorderLayout.NORTH);// 北部
// //为面板三添加按钮
// for(int i=0;i<3;i++)
// {
// p3.add(new JButton("俺不是按钮"+i));
// }
// //为面板四添加按钮
// p4.setBackground(Color.BLACK);//添加颜色
// for(int i=0;i<3;i++)
// {
// p4.add(new JButton("俺不是按钮"+i));
// }
//
// c.add(p1);//分别添加至容器
// c.add(p2);
// c.add(p3);
// c.add(p4);
// //************************************************************************
//滚动面板
JTextArea area=new JTextArea();//文本域
area.setFont(new Font("楷体", Font.BOLD, 15));//设置字体
JScrollPane sp=new JScrollPane(area);//创建滚动面板,给文本文件添加滚动条
c.add(sp);
}
public static void main(String[] args) {
new Demo_layout();
}
}
面板
滚动面板
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Demo_JTextArea extends JFrame {
public Demo_JTextArea() {
setTitle("文本域");
setBounds(200, 200, 800, 500);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
Container c = getContentPane();
c.setLayout(new FlowLayout());// 流布局
JLabel l = new JLabel("你想干啥!");// 使用标签
c.add(l);
// 文本域 JTextArea
JTextArea area = new JTextArea();// 创建一个文本域
area.setText("文本域");// 可直接添加
area.setRows(12);// 设置行
area.setColumns(50);// 设置列
area.append("添加内容");// 添加文本内容
area.insert("插入", 2);// 第二个字符后插入
area.setFont(new Font("楷体", Font.BOLD, 20));// 设置字体
JScrollPane js = new JScrollPane(area);// 设置成滚动面板
c.add(js);
// ****************************************************************
// 动作事件监听 ActionListener
JButton jb = new JButton("按钮");
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
area.setText("按钮被点击!");
}
});
c.add(jb);
// 文本条 JTextField
JTextField jt = new JTextField(20);// 设置文本大小
c.add(jt);
// 动作的事件监听
jt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 按回车键输出
Object obj = e.getSource();
JTextField jtTmp = (JTextField) obj;
System.out.println(jtTmp.getText());
l.setText("文本框中点击了回车");
}
});
// 多选框 JCheckBox
JCheckBox jc = new JCheckBox("多选框");
c.add(jc);
// 动作的事件监听
jc.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
l.setText("多选框被点击");
}
});
// 单选框 JRadioButton
JRadioButton jr = new JRadioButton("单选框");
c.add(jr);
// 动作的事件监听
jr.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
l.setText("单选框被点击");
}
});
// 下拉框 JComboBox
String str[] = { "银酱", "神乐", "新八" };
JComboBox<String> jb1 = new JComboBox(str);
c.add(jb1);
// 动作的事件监听
jb1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
l.setText("下拉框被点击");
}
});
// 文本条 JTextField
JTextField jt1 = new JTextField(20);// 设置文本大小
JLabel l1 = new JLabel("未获得焦点1");// 使用标签
c.add(l1);
c.add(jt1);
JTextField jt2 = new JTextField(20);// 设置文本大小
JLabel l2 = new JLabel("未获得焦点2");// 使用标签
c.add(l2);
c.add(jt2);
JTextField jt3 = new JTextField(20);// 设置文本大小
JLabel l3 = new JLabel("未获得焦点3");// 使用标签
c.add(l3);
c.add(jt3);
JTextField jt4 = new JTextField(20);// 设置文本大小
JLabel l4 = new JLabel("未获得焦点4");// 使用标签
c.add(l4);
c.add(jt4);
// 焦点监听器 FocusListener
jt1.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {// 失去焦点
l1.setText("失去焦点");
l1.setForeground(Color.red);
}
public void focusGained(FocusEvent e) {// 获得焦点
l1.setText("获得焦点");
l1.setForeground(Color.blue);
}
});
// 焦点监听器 FocusListener
jt2.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {// 失去焦点
l2.setText("失去焦点");
l2.setForeground(Color.red);
}
public void focusGained(FocusEvent e) {// 获得焦点
l2.setText("获得焦点");
l2.setForeground(Color.blue);
}
});
// 焦点监听器 FocusListener
jt3.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {// 失去焦点
l3.setText("失去焦点");
l3.setForeground(Color.red);
}
public void focusGained(FocusEvent e) {// 获得焦点
l3.setText("获得焦点");
l3.setForeground(Color.blue);
}
});
// 焦点监听器 FocusListener
jt4.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {// 失去焦点
l4.setText("失去焦点");
l4.setForeground(Color.red);
}
public void focusGained(FocusEvent e) {// 获得焦点
l4.setText("获得焦点");
l4.setForeground(Color.blue);
}
});
jt1.addFocusListener(new MyFocusListenter());// 使用自定义类实现
jt2.addFocusListener(new MyFocusListenter());
jt3.addFocusListener(new MyFocusListenter());
jt4.addFocusListener(new MyFocusListenter());
c.validate();
}
// 内部类
// 自定义的焦点监听
class MyFocusListenter implements FocusListener {
public void focusGained(FocusEvent e) {
JTextField tmp = (JTextField) e.getSource();// 获取触发事件的组件
tmp.setBorder(BorderFactory.createLineBorder(Color.blue));// 获取焦点设置边框颜色
}
public void focusLost(FocusEvent e) {
JTextField tmp = (JTextField) e.getSource();
tmp.setBorder(BorderFactory.createLineBorder(Color.red));
}
}
// 键盘监听KeyListener
public static void main(String[] args) {
new Demo_JTextArea();
}
}