告诉大家该怎么学?
-
这是什么?
-
它怎么玩?
-
该如何在我们平时运用?
组件
-
窗口
-
弹窗
-
面板
-
文本框
-
列表框
-
按钮
-
图片
-
监听事件
-
鼠标
-
键盘事件
1、简介
Gui的核心技术:Swing AWT。
缺点:
-
界面不美观。
-
需要jre环境!
为什么我们要学习
-
可以写出自己心中想要的一些小工具
-
工作时候,也可能需要维护到swing界面
-
了解MVC架构,了解监听!
2、AWT
2.1、Awt介绍
-
包含了很多类和接口!GUI:图形用户界面
-
元素:窗口,按钮,文本框
-
java.awt
2.2、组件和容器
1、Frame
package com.jj.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestFrame {
public static void main(String[] args) {
Frame frame = new Frame("第一个窗口");
//设置弹出的初始位置和窗口大小
frame.setBounds(200,200,400,300);
//设置背景颜色 color
frame.setBackground(new Color(197, 103, 106));
//设置可见性
frame.setVisible(true);
//监听器,关闭页面
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
尝试回顾封装:
package com.jj.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestFrame1 {
public static void main(String[] args) {
MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.black);
MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.blue);
MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.yellow);
MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.red);
myFrame1.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
myFrame2.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
myFrame3.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
myFrame4.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyFrame extends Frame{
static int id=0;
public MyFrame(int x,int y,int w,int h,Color color){
super("MyFrame+"+(++id));
setBounds(x,y,w,h);
setVisible(true);
setBackground(color);
}
}
2、Panel
package com.jj.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//可以看成一个空间,但是不能单独存在
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
//布局的概念
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
//坐标
frame.setBounds(300,300,400,400);
frame.setBackground(new Color(0xC03356));
//panel设置坐标,相对于frame
panel.setBounds(50,50,300,300);
panel.setBackground(new Color(0x3FCBA5));
frame.add(panel);
frame.setVisible(true);
//监听事件,监听窗口关闭事件
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
2.3、布局管理器
-
流式布局
package com.jj.lesson01;
import java.awt.*;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Panel panel = new Panel();
//组件-按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
Button button4 = new Button("button4");
//设置为流式布局
frame.setLayout(new FlowLayout(FlowLayout.LEFT));
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.setBackground(Color.cyan);
frame.setBounds(300,300,400,400);
frame.setVisible(true);
}
}
-
东南西北中
package com.jj.lesson01;
import java.awt.*;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button east = new Button("East");
Button wast = new Button("Wast");
Button north = new Button("North");
Button south = new Button("South");
Button center = new Button("Center");
frame.add(east,BorderLayout.EAST);
frame.add(wast,BorderLayout.WEST);
frame.add(north,BorderLayout.NORTH);
frame.add(south,BorderLayout.SOUTH);
frame.add(center,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
}
}
-
表格布局
package com.jj.lesson01;
import java.awt.*;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame();
Button btn1 = new Button("btn1");
Button btn2 = new Button("btn2");
Button btn3 = new Button("btn3");
Button btn4 = new Button("btn4");
Button btn5 = new Button("btn5");
Button btn6 = new Button("btn6");
Panel panel = new Panel();
frame.setLayout(new GridLayout(2,3));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6);
frame.pack();//java函数!
frame.setVisible(true);
}
}
-
练习
package com.jj.lesson01;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test {
public static void main(String[] args) {
Frame frame = new Frame();
frame.setBounds(300,300,400,400);
frame.setBackground(Color.cyan);
frame.setVisible(true);
frame.setLayout(new GridLayout(2,1));
Panel panel1 = new Panel(new BorderLayout());
Panel panel2 = new Panel(new GridLayout(2,1));
Panel panel3 = new Panel(new BorderLayout());
Panel panel4 = new Panel(new GridLayout(2,2));
//上
panel1.add(new Button("West-1"),BorderLayout.WEST);
panel1.add(new Button("East-1"),BorderLayout.EAST);
panel2.add(new Button("p2-btn-1"));
panel2.add(new Button("p2-btn-2"));
panel1.add(panel2);
//下
panel3.add(new Button("West-2"),BorderLayout.WEST);
panel3.add(new Button("East-2"),BorderLayout.EAST);
for (int i = 0; i <4 ; i++) {
panel4.add(new Button("p4-btn"+i));
}
panel3.add(panel4);
frame.add(panel1);
frame.add(panel3);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
总结:
-
Frame是一个顶级窗口
-
Panel无法单独显示,必须添加到某个容器中
-
布局管理器
1. 流式 2. 东南西北中 3. 表格
-
大小、定位、背景颜色、可见性、监听!
2.4、事件监听
事件监听:当某个事情发生的时候,干什么?
package com.jj.lesson02;
import com.sun.org.apache.bcel.internal.generic.NEW;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionEvent {
public static void main(String[] args) {
//按下按钮,触发一些事件
Frame frame = new Frame();
Button button = new Button("start");
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
frame.add(button);
frame.pack();
windowClose(frame);//关闭窗口
frame.setVisible(true);
//网络编程
}
//关闭窗体的事件
private static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("=====");
}
}
多个按钮,共享一个事件
package com.jj.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionEvent2 {
public static void main(String[] args) {
//按下按钮,触发一些事件
//两个按钮,实现同一个监听
Frame frame = new Frame();
Button start = new Button("start");
Button stop = new Button("stop");
//可以显示定义触发会返回的命令,如果不显式定义,则会走默认的值
//可以多个按钮只写一个监听类
stop.setActionCommand("万牛逼");//其实就是label的值
MyAction myAction = new MyAction();
start.addActionListener(myAction);
stop.addActionListener(myAction);
frame.add(start,BorderLayout.NORTH);
frame.add(stop,BorderLayout.SOUTH);
frame.add(stop);
frame.pack();
windowClose(frame);//关闭窗口
frame.setVisible(true);
//网络编程
}
//关闭窗体的事件
private static void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyAction implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("万鬼==="+e.getActionCommand());//其实就是label的值
}
}
2.5、输入框TextField监听
package com.jj.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestField01 {
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
myFrame.WindowClose(myFrame);
}
}
class MyFrame extends Frame{
public MyFrame(){
TextField textField = new TextField();
add(textField);
//监听这个文本框输入的文字
MyActionListener1 myActionListener1 = new MyActionListener1();
//按下enter,就会触发这个输入框的事件
textField.addActionListener(myActionListener1);
//设置替换编码
textField.setEchoChar('*');
pack();
setVisible(true);
}
public void WindowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener1 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField source =(TextField) e.getSource();//获得一些资源,返回一个对象
System.out.println(source.getText());//获得输入框的文本
source.setText("");//每次回车过后,将输入框内容清空
}
}
2.6、简易计算器,组合+内部类回顾复习
oop原则:组合,大于继承!
class A extends B{
}
class A{
public B b;
}
目前代码:
package com.jj.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalc {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.WindowClose(calculator);
}
}
//计算器类
class Calculator extends Frame{
public Calculator(){
//三个文本框
TextField num1 = new TextField(10);//字符数
TextField num2 = new TextField(10);//字符数
TextField num3 = new TextField(20);//字符数
//一个按钮
Button button = new Button("=");
MyActionListener2 myActionListener2 = new MyActionListener2(num1,num2,num3);
button.addActionListener(myActionListener2);
//一个标签
Label label = new Label("+");
//布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
public void WindowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyActionListener2 implements ActionListener{
//获取三个变量
private TextField num1;
private TextField num2;
private TextField num3;
public MyActionListener2(TextField num1, TextField num2, TextField num3) {
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数和被加数
int i1 = Integer.parseInt(num1.getText());
int i2 = Integer.parseInt(num2.getText());
//2.将这个值 + 法运算后,放到第三个框
num3.setText(""+(i1+i2));
//3.清除前两个框
num1.setText("");
num2.setText("");
}
}
完全改造为面向对象:
package com.jj.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalc {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.Loader();
calculator.WindowClose(calculator);
}
}
//计算器类
class Calculator extends Frame{
TextField num1;
TextField num2;
TextField num3;
public void Loader(){
//三个文本框
num1 = new TextField(10);//字符数
num2 = new TextField(10);//字符数
num3 = new TextField(20);//字符数
//一个按钮
Button button = new Button("=");
MyActionListener2 myActionListener2 = new MyActionListener2(this);
button.addActionListener(myActionListener2);
//一个标签
Label label = new Label("+");
//布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
public void WindowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyActionListener2 implements ActionListener{
//获取计算机对象
//在一个类里面组合另外一个类
Calculator calculator;
public MyActionListener2(Calculator calculator) {
this.calculator=calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数和被加数
int i1 = Integer.parseInt(calculator.num1.getText());
int i2 = Integer.parseInt(calculator.num2.getText());
//2.将这个值 + 法运算后,放到第三个框
calculator.num3.setText(""+(i1+i2));
//3.清除前两个框
calculator.num1.setText("");
calculator.num2.setText("");
}
}
内部类:
-
更好的包装
package com.jj.lesson02;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalc {
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.Loader();
calculator.WindowClose(calculator);
}
}
//计算器类
class Calculator extends Frame{
TextField num1;
TextField num2;
TextField num3;
public void Loader(){
//三个文本框
num1 = new TextField(10);//字符数
num2 = new TextField(10);//字符数
num3 = new TextField(20);//字符数
//一个按钮
Button button = new Button("=");
MyActionListener2 myActionListener2 = new MyActionListener2();
button.addActionListener(myActionListener2);
//一个标签
Label label = new Label("+");
//布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
}
//监听器类
//内部类,最大的好处就是可以畅通无阻的访问外部的属性和方法
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//1.获得加数和被加数
int i1 = Integer.parseInt(num1.getText());
int i2 = Integer.parseInt(num2.getText());
//2.将这个值 + 法运算后,放到第三个框
num3.setText(""+(i1+i2));
//3.清除前两个框
num1.setText("");
num2.setText("");
}
}
public void WindowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
2.7、画笔
package com.jj.lesson03;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestPaint {
public static void main(String[] args) {
MyPaint myPaint = new MyPaint();
myPaint.loader();
myPaint.windowClose(myPaint);
}
}
class MyPaint extends Frame{
public void loader(){
setBounds(200,200,600,600);
setVisible(true);
}
//画笔
@Override
public void paint(Graphics g) {
//画笔,需要有颜色,画笔可以画画
g.setColor(Color.cyan);
g.draw3DRect(100,100,100,100,true);
g.fill3DRect(300,300,100,100,true);
g.setColor(new Color(0xDF48EC));
g.drawOval(200,200,100,100);
//养成习惯,画笔用完,将他还原到最初的颜色
}
public void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
2.8、鼠标监听
目的:想要实现鼠标画画
package com.jj.lesson03;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Iterator;
//鼠标监听事件
public class TestMouseListener {
public static void main(String[] args) {
MyMouse myMouse = new MyMouse("画图");
myMouse.windowClose(myMouse);
}
}
//鼠标类
class MyMouse extends Frame{
//画画需要画笔,需要监听鼠标当前的位置,需要集合来存储这个点
ArrayList points;
public MyMouse(String title){
super(title);
setBounds(200,200,400,400);
setVisible(true);
points=new ArrayList<>();
//鼠标监听器,正对这个窗口
MyMouthListener myMouthListener = new MyMouthListener();
this.addMouseListener(myMouthListener);
}
@Override
public void paint(Graphics g) {
//画画,监听鼠标的事件
Iterator iterator = points.iterator();//迭代器
while (iterator.hasNext()){
Point point = (Point) iterator.next();
g.setColor(Color.cyan);
g.fillOval(point.x,point.y,10,10);
}
}
//添加一个点到界面上
public void addPaint(Point point){
points.add(point);
}
//适配器模式
private class MyMouthListener extends MouseAdapter{
//鼠标,按下,弹起,按住不放
@Override
public void mousePressed(MouseEvent e) {
MyMouse myMouse = (MyMouse) e.getSource();
//这个我们点击的时候,就会在界面上产生一个点!
//这个就是我们的点
myMouse.addPaint(new Point(e.getX(),e.getY()));
//每次点击鼠标都需要重画一次
myMouse.repaint();//刷新
}
}
public void windowClose(Frame frame){
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
2.9、窗口监听
package com.jj.lesson03;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindow {
public static void main(String[] args) {
new WindowFrame();
}
}
class WindowFrame extends Frame{
public WindowFrame(){
setBackground(Color.cyan);
setVisible(true);
setBounds(200,200,200,200);
//addWindowListener(new MyWindowListener());
addWindowListener(
//匿名内部类
new WindowAdapter() {
//关闭窗口
@Override
public void windowClosing(WindowEvent e) {
System.out.println("窗口已关闭!");
System.exit(0);
}
//激活窗口
@Override
public void windowActivated(WindowEvent e) {
WindowFrame source = (WindowFrame) e.getSource();
source.setTitle("万鬼的java世界");
System.out.println("windowActivated!");
}
}
);
}
}
2.10、键盘监听
package com.jj.lesson03;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestKeyListener {
public static void main(String[] args) {
new MyKey();
}
}
class MyKey extends Frame{
public MyKey() {
setBackground(Color.cyan);
setBounds(200,200,400,400);
setVisible(true);
addKeyListener(new KeyAdapter() {
//键盘按下
@Override
public void keyPressed(KeyEvent e) {
//键盘按下的键是哪个 获取当前键的码
int keyCode = e.getKeyCode();
System.out.println(keyCode);
if (keyCode==KeyEvent.VK_UP){
System.out.println("你按下了上键");
}
}
});
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
3、Swing
3.1、窗口、面板
package com.jj.lesson04;
import javax.swing.*;
import java.awt.*;
public class JFrameDemo {
//init();初始化
public void init(){
JFrame jFrame = new JFrame("这是一个JFrame窗口");
jFrame.setVisible(true);
jFrame.setBounds(200,200,400,400);
jFrame.setBackground(Color.cyan);
//设置文字 JLabel
JLabel jLabel = new JLabel("万鬼");
jFrame.add(jLabel);
//关闭事件
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
//建立一个窗口
new JFrameDemo().init();
}
}
标签居中
package com.jj.lesson04;
import javax.swing.*;
import java.awt.*;
public class JFrameDemo02 {
public static void main(String[] args) {
MyJFrame myJFrame = new MyJFrame();
myJFrame.init();
}
}
class MyJFrame extends JFrame{
public void init(){
//获取一个容器
Container contentPane = this.getContentPane();
contentPane.setBackground(Color.cyan);
this.setBounds(200,200,400,400);
this.setVisible(true);
JLabel jLabel = new JLabel("万鬼");
this.add(jLabel);
//让文本标签居中
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
3.2、弹窗
JDialog:用来被弹出,默认就有关闭事件
package com.jj.lesson04;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JDialogDemo {
public static void main(String[] args) {
new MyJFrame2();
}
}
//主窗口
class MyJFrame2 extends JFrame{
public MyJFrame2(){
this.setVisible(true);
this.setBounds(200,200,700,500);
//JFrame放东西,需要容器
Container contentPane = this.getContentPane();
contentPane.setBackground(Color.cyan);
//绝对布局
contentPane.setLayout(null);
//按钮
JButton jButton = new JButton("点击弹出对话框");
jButton.setBounds(30,30,200,50);
//点击这个按钮的时候,弹出一个弹窗
//监听器
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//弹窗
new MyJDialog();
}
});
contentPane.add(jButton);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
//弹窗的窗口
class MyJDialog extends JDialog{
public MyJDialog() {
this.setVisible(true);
this.setBounds(100,100,500,500);
Container contentPane = this.getContentPane();
contentPane.setLayout(null);
contentPane.add(new JLabel("万桑我学会了"));
}
}
3.3、标签
label
new JLabel("XXX");
图标Icon
package com.jj.lesson04;
import javax.swing.*;
import java.awt.*;
public class IconDemo{
public static void main(String[] args) {
MyFrame myFrame = new MyFrame();
myFrame.init();
}
}
class MyFrame extends JFrame implements Icon{
private int width;
private int height;
public MyFrame(){
}
public MyFrame(int width, int height) throws HeadlessException {
this.width = width;
this.height = height;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,height);
}
@Override
public int getIconWidth() {
return 0;
}
@Override
public int getIconHeight() {
return 0;
}
public void init(){
MyFrame myFrame = new MyFrame(15,15);
//图标可以放在标签,也可以放在按钮上!
JLabel jLabel = new JLabel("点击",myFrame,SwingConstants.CENTER);
Container contentPane = getContentPane();
contentPane.setBackground(Color.cyan);
contentPane.add(jLabel);
this.setBounds(200,200,500,300);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
图片Icon
package com.jj.lesson04;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class ImageIconDemo extends JFrame{
public ImageIconDemo() {
//获取图片的地址
URL url = ImageIconDemo.class.getResource("my.jpg");
ImageIcon imageIcon = new ImageIcon(url);
//标签设置图片
JLabel jLabel = new JLabel("ImageIcon");
jLabel.setIcon(imageIcon);
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
Container contentPane = getContentPane();
contentPane.setBackground(Color.cyan);
contentPane.add(jLabel);
setVisible(true);
setBounds(200,200,700,500);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ImageIconDemo();
}
}
3.4、面板
JPanel
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
public class JPanelDemo extends JFrame {
public JPanelDemo(){
Container contentPane = this.getContentPane();
contentPane.setLayout(new GridLayout(2,1,10,10));//后面的参数,间距
JPanel jPanel = new JPanel(new GridLayout(1,3));
JPanel jPanel2 = new JPanel(new GridLayout(1,2));
JPanel jPanel3 = new JPanel(new GridLayout(2,1));
JPanel jPanel4 = new JPanel(new GridLayout(2,3));
jPanel.add(new JButton("btn1"));
jPanel.add(new JButton("btn1"));
jPanel.add(new JButton("btn1"));
jPanel2.add(new JButton("btn2"));
jPanel2.add(new JButton("btn2"));
jPanel3.add(new JButton("btn3"));
jPanel3.add(new JButton("btn3"));
jPanel4.add(new JButton("btn4"));
jPanel4.add(new JButton("btn4"));
jPanel4.add(new JButton("btn4"));
jPanel4.add(new JButton("btn4"));
jPanel4.add(new JButton("btn4"));
jPanel4.add(new JButton("btn4"));
jPanel.setVisible(true);
jPanel.setBackground(new Color(0xE957B0));
jPanel.setBounds(300,300,200,200);
contentPane.add(jPanel);
contentPane.add(jPanel2);
contentPane.add(jPanel3);
contentPane.add(jPanel4);
contentPane.setBackground(Color.cyan);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JPanelDemo();
}
}
JScrollPane
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
public class JScrollPaneDemo extends JFrame {
public JScrollPaneDemo(){
Container contentPane = this.getContentPane();
contentPane.setBackground(Color.cyan);
//文本域
JTextArea jTextArea = new JTextArea(20, 50);
jTextArea.setText("万鬼我学会了!");
//Scroll面板
JScrollPane jScrollPane = new JScrollPane(jTextArea);
contentPane.add(jScrollPane);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JScrollPaneDemo();
}
}
3.5、按钮
-
图片按钮
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class JButtonDemo extends JFrame {
public JButtonDemo(){
Container contentPane = this.getContentPane();
contentPane.setBackground(Color.cyan);
//将一个图片变为图标
URL url = JButtonDemo.class.getResource("my.jpg");
Icon icon = new ImageIcon(url);
//把这个图标放在按钮上
JButton jButton = new JButton();
jButton.setIcon(icon);
jButton.setToolTipText("图片按钮");
contentPane.add(jButton);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonDemo();
}
}
-
单选按钮
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class JButtonDemo02 extends JFrame {
public JButtonDemo02(){
Container contentPane = this.getContentPane();
//contentPane.setBackground(Color.cyan);
//将一个图片变为图标
URL url = JButtonDemo02.class.getResource("my.jpg");
Icon icon = new ImageIcon(url);
//单选框
JRadioButton jRadioButton1 = new JRadioButton("jRadioButton01");
JRadioButton jRadioButton2 = new JRadioButton("jRadioButton02");
JRadioButton jRadioButton3 = new JRadioButton("jRadioButton03");
//由于单选框只能选择一个,分组
ButtonGroup group = new ButtonGroup();
group.add(jRadioButton1);
group.add(jRadioButton2);
group.add(jRadioButton3);
contentPane.add(jRadioButton1,BorderLayout.NORTH);
contentPane.add(jRadioButton2,BorderLayout.SOUTH);
contentPane.add(jRadioButton3,BorderLayout.WEST);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonDemo02();
}
}
-
复选按钮
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class JButtonDemo03 extends JFrame {
public JButtonDemo03(){
Container contentPane = this.getContentPane();
//contentPane.setBackground(Color.cyan);
//将一个图片变为图标
URL url = JButtonDemo03.class.getResource("my.jpg");
Icon icon = new ImageIcon(url);
//多选框
JCheckBox jCheckBox1 = new JCheckBox("jCheckBox01");
JCheckBox jCheckBox2 = new JCheckBox("jCheckBox02");
contentPane.add(jCheckBox1,BorderLayout.NORTH);
contentPane.add(jCheckBox2,BorderLayout.SOUTH);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JButtonDemo03();
}
}
3.6、列表
-
下拉框
package com.jj.lesson06;
import javax.swing.*;
import java.awt.*;
public class TestJComboBox extends JFrame {
public TestJComboBox(){
Container contentPane = this.getContentPane();
JPanel jPanel = new JPanel();
// jPanel.setBackground(new Color(1));
// jPanel.setBounds(200,200,300,300);
//下拉框
JComboBox status = new JComboBox();
status.addItem("万鬼");
status.addItem("正在热映");
status.addItem("已下架");
status.addItem("即将上映");
jPanel.add(status);
contentPane.add(jPanel);
contentPane.setBackground(Color.cyan);
this.setBounds(200,200,700,500);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJComboBox();
}
}
-
列表框
package com.jj.lesson06;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
public class TestJComboBoxDemo02 extends JFrame {
public TestJComboBoxDemo02(){
Container contentPane = this.getContentPane();
JPanel jPanel = new JPanel();
//生成列表的内容
//String[] contents={"1.万鬼","2.万桑","3.万sheir"};
Vector contents = new Vector();
//将内容放入
JList jList = new JList(contents);
contents.add("dada");
contents.add("dada");
contents.add("dada");
jPanel.add(jList,BorderLayout.WEST);
contentPane.add(jPanel,BorderLayout.WEST);
contentPane.setBackground(Color.cyan);
this.setBounds(200,200,700,500);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJComboBoxDemo02();
}
}
-
应用场景
-
下拉框:选择地区、产品等
-
列表:展示信息,一般是动态扩容!
-
3.7、文本框
-
文本框
package com.jj.lesson06;
import javax.swing.*;
import java.awt.*;
import java.util.Vector;
public class TestJTextFieldDemo extends JFrame {
public TestJTextFieldDemo(){
Container contentPane = this.getContentPane();
JTextField jTextField1 = new JTextField("hello");
JTextField jTextField2 = new JTextField("world");
contentPane.add(jTextField1,BorderLayout.NORTH);
contentPane.add(jTextField2,BorderLayout.CENTER);
// contentPane.setBackground(Color.cyan);
this.setBounds(200,200,500,100);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJTextFieldDemo();
}
}
-
密码框
package com.jj.lesson06;
import javax.swing.*;
import java.awt.*;
public class TestJTextFieldDemo02 extends JFrame {
public TestJTextFieldDemo02(){
Container contentPane = this.getContentPane();
//JPanel jPanel = new JPanel();
JPasswordField jPasswordField = new JPasswordField();
jPasswordField.setEchoChar('*');
contentPane.add(jPasswordField);
// contentPane.setBackground(Color.cyan);
this.setBounds(200,200,500,100);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new TestJTextFieldDemo02();
}
}
-
文本域
package com.jj.lesson05;
import javax.swing.*;
import java.awt.*;
public class JScrollPaneDemo extends JFrame {
public JScrollPaneDemo(){
Container contentPane = this.getContentPane();
contentPane.setBackground(Color.cyan);
//文本域
JTextArea jTextArea = new JTextArea(20, 50);
jTextArea.setText("万鬼我学会了!");
//Scroll面板
JScrollPane jScrollPane = new JScrollPane(jTextArea);
contentPane.add(jScrollPane);
this.setVisible(true);
this.setBounds(200,200,700,500);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JScrollPaneDemo();
}
}
贪吃蛇
帧:如果时间片足够小,就是动画。
键盘监听
定时器 Timer
百度网盘下载:https://pan.baidu.com/disk/home?_at_=1622527048338#/all?vmode=list&path=%2FSnake_Test