GUI

GUI

Frame

public class TestFrame {
    public static void main(String[] args) {
        Frame frame = new Frame("java图形界面");
//        设置可见性
        frame.setVisible(true);
//        设置窗口大小
        frame.setSize(400,400);
        frame.setBackground(Color.PINK);
//        弹出的初始位置
        frame.setLocation(200,200);
//        设置大小固定
        frame.setResizable(false);
    }
}

Panel

//面板 可以看成一个空间 但是不能单独存在
public class TestPanel {
    public static void main(String[] args) {
        Frame frame = new Frame();
//        布局的概念
        Panel panel = new Panel();

//        设置布局
        frame.setLayout(null);//不设置 默认置顶 所以给它个空
        frame.setBounds(300,300,300,300);
        frame.setBackground(Color.pink);

//        panel设置坐标 相对于frame
        panel.setBounds(50,50,200,200);
        panel.setBackground(Color.gray);

//        面板放入窗口中
        frame.add(panel);
        frame.setVisible(true);

//        监听事件 窗口关闭事件
//        适配器模式
        frame.addWindowListener(new WindowAdapter() {
//            窗口点击关闭的时候做的事情
            @Override
            public void windowClosing(WindowEvent e) {
//                结束程序
                System.exit(0);
            }
        });
    }
}

GridLayout

//表格布局
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");

        frame.setLayout(new GridLayout(3, 2));

        frame.add(btn1);
        frame.add(btn2);
        frame.add(btn3);
        frame.add(btn4);
        frame.add(btn5);
        frame.add(btn6);

        frame.pack();
        frame.setBounds(200, 200, 200, 200);
        frame.setVisible(true);

    }
}

FlowLayout

public class TestFlowLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();
        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");

//        设置为流式布局
        frame.setLayout(new FlowLayout(FlowLayout.RIGHT));
//        frame.setLayout(new FlowLayout(FlowLayout.LEFT));

        frame.setSize(200,200);
        frame.setVisible(true);

        frame.add(button1);
        frame.add(button2);
        frame.add(button3);
    }

BorderLayout

//东西南北中布局
public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame();

        Button east = new Button("east");
        Button west = new Button("west");
        Button south = new Button("south");
        Button north = new Button("north");
        Button center = new Button("center");

        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(north,BorderLayout.NORTH);
        frame.add(center,BorderLayout.CENTER);

        frame.setBounds(200,200,200,200);
        frame.setVisible(true);


    }
}

练习

public class Think1 {
    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");
        Button btn7 = new Button("btn7");
        Button btn8 = new Button("btn8");
        Button btn9 = new Button("btn9");
        Button btn10 = new Button("btn10");

        Panel panel1 = new Panel();
//        panel1.setLayout(new BorderLayout());
        Panel panel = new Panel();
        panel.setLayout(new GridLayout(2,1));
        panel.add(btn2);
        panel.add(btn3);
        panel1.setLayout(new GridLayout(1,3));
//        panel1.add(btn1,BorderLayout.EAST);
//        panel1.add(panel,BorderLayout.CENTER);
//        panel1.add(btn4,BorderLayout.WEST);
        panel1.add(btn1);
        panel1.add(panel);
        panel1.add(btn4);

        Panel panel2 = new Panel();
        Panel panel3 = new Panel();
        panel3.setLayout(new GridLayout(2,2));
        panel3.add(btn6);
        panel3.add(btn7);
        panel3.add(btn8);
        panel3.add(btn9);
        panel2.setLayout(new GridLayout(1,3));
        panel2.add(btn5,BorderLayout.EAST);
        panel2.add(panel3,BorderLayout.CENTER);
        panel2.add(btn10,BorderLayout.WEST);

        frame.setLayout(new GridLayout(2,1));

        frame.add(panel1);
        frame.add(panel2);
        frame.setBounds(200, 200, 400, 400);
        frame.setVisible(true);
    }
}

WindowListener

package com.summer.demo1;

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() {
        setVisible(true);
        setBackground(Color.pink);
        setBounds(200, 200, 200, 200);
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
//                关闭窗口
                System.out.println("windowClosing");
                System.exit(0);
            }
            @Override
            public void windowActivated(WindowEvent e) {
//                窗口激活
                WindowFrame source =(WindowFrame) e.getSource();
                source.setTitle("被激活了");
                System.out.println("windowActivated");
            }
        });
    }
}

JFrame

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class JFrameDemo {
    public void init() {
        JFrame jFrame = new JFrame("JFrame");
        jFrame.setBounds(100, 100, 200, 200);
        jFrame.setVisible(true);

        JLabel jLabel = new JLabel("Summer");
        jFrame.add(jLabel);
//       居中
        jLabel.setHorizontalAlignment(SwingConstants.CENTER);
//      JFrame用容器设置背景颜色
        Container contentPane = jFrame.getContentPane();
        contentPane.setBackground(Color.pink);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new JFrameDemo().init();
    }
}

JDialog

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

//主窗口
public class TestDialog extends JFrame {
    public TestDialog() {
        setVisible(true);
        setSize(700, 500);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

//        JFrame 放东西 容器
        Container container = getContentPane();
//        绝对布局
        container.setLayout(null);

//        按钮
        JButton jButton = new JButton("点击弹出对话框");
        jButton.setBounds(30, 30, 200, 50);

//        点击按钮弹 弹窗
        container.add(jButton);
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
//                弹窗
                new MyDialog();
            }
        });

    }

    public static void main(String[] args) {
        new TestDialog();
    }
}

//弹窗的窗口
class MyDialog extends JDialog {
    public MyDialog() {
        this.setVisible(true);
        this.setBounds(100,100,500,500);
        Container container = this.getContentPane();
        container.setLayout(null);
        container.add(new JLabel("Summer搞得弹框"));
    }
}

JLabel/ImageIcon

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class TestImageIcon extends JFrame {
    public TestImageIcon(){
//获取图片地址

        URL resource = TestImageIcon.class.getResource("picture.png");
        ImageIcon imageIcon = new ImageIcon(resource);
        JLabel label = new JLabel("ImageIcon", imageIcon, SwingConstants.CENTER);
        Container container = this.getContentPane();
        container.add(label);
        this.setVisible(true);
        this.pack();
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestImageIcon();
    }


JPanel

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class TestJPanel extends JFrame {
    public TestJPanel()  {
        Container container = getContentPane();
//        后面两个参数代表间距
        container.setLayout(new GridLayout(2,1,10,10));
        JPanel jPanel1 = new JPanel(new GridLayout(1,1));
        JPanel jPanel2 = new JPanel(new GridLayout(1,1));
        JPanel jPanel3 = new JPanel(new GridLayout(2,1));
        JPanel jPanel4 = new JPanel(new GridLayout(3,2));
        jPanel1.add(new JButton("1"));
        jPanel1.add(new JButton("1"));
        jPanel1.add(new JButton("1"));
        jPanel2.add(new JButton("2"));
        jPanel2.add(new JButton("2"));
        jPanel3.add(new JButton("3"));
        jPanel3.add(new JButton("3"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        jPanel4.add(new JButton("4"));
        container.add(jPanel1);
        container.add(jPanel2);
        container.add(jPanel3);
        container.add(jPanel4);
        setVisible(true);
 setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500,500);
    }
    public static void main(String[] args) {
        new TestJPanel();
    }

JScrollPane 滑动面板

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class TestJScroll extends JFrame {
    public TestJScroll() {
        Container container = getContentPane();

        //文本域可以换行 JTextField文本框 不可以换行
        JTextArea jTextArea = new JTextArea(20,50);
        jTextArea.setText("Summer欢迎你~");
        //JScrollPane 面板
        JScrollPane jScrollPane = new JScrollPane(jTextArea);
//        jScrollPane.add(jTextArea);
        container.add(jScrollPane);

        setVisible(true);
        setBounds(100,100,300,350);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestJScroll();
    }
}

JButton按钮

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class TestJButton extends JFrame {
    public TestJButton() {
        Container container = getContentPane();
        URL resource = TestJButton.class.getResource("picture.png");
        JButton jButton = new JButton(new ImageIcon(resource));
        jButton.setToolTipText("图片按钮");
        jButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("Hello!");
            }
        });
        container.add(jButton);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        new TestJButton();
    }
}

JRadioButton/ButtonGroup单选框

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class TestJRadioButton extends JFrame {
    public TestJRadioButton() {
        Container container = getContentPane();
        URL resource = TestJButton.class.getResource("picture.png");

        JRadioButton jRadioButton1 = new JRadioButton("jRadioButton1");
        JRadioButton jRadioButton2 = new JRadioButton("jRadioButton2");
        JRadioButton jRadioButton3 = new JRadioButton("jRadioButton3");

//        分组概念
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(jRadioButton1);
        buttonGroup.add(jRadioButton2);
        buttonGroup.add(jRadioButton3);

        container.add(jRadioButton1,BorderLayout.NORTH);
        container.add(jRadioButton2,BorderLayout.CENTER);
        container.add(jRadioButton3,BorderLayout.SOUTH);

        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        new TestJRadioButton();
    }
}

JCheckBox多选框

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class TestJButton extends JFrame {
    public TestJButton() {
        Container container = getContentPane();
        URL resource = TestJButton.class.getResource("picture.png");

        JCheckBox jCheckBox1 = new JCheckBox("jCheckBox1");
        JCheckBox jCheckBox2 = new JCheckBox("jCheckBox2");
        JCheckBox jCheckBox3 = new JCheckBox("jCheckBox3");
        JCheckBox jCheckBox4 = new JCheckBox("jCheckBox4");

        container.setLayout(new FlowLayout());
        container.add(jCheckBox1);
        container.add(jCheckBox2);
        container.add(jCheckBox3);
        container.add(jCheckBox4);

        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
    }

    public static void main(String[] args) {
        new TestJButton();
    }
}

JCombobox下拉框

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TestJCombobox extends JFrame {

    public TestJCombobox() {
        Container container = getContentPane();

        JComboBox status = new JComboBox();
        status.addItem(null);
        status.addItem("正在上映");
        status.addItem("即将上映");
        status.addItem("已下架");
        container.add(status);

//        获取下拉框选中的值
        status.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox source = (JComboBox) e.getSource();
                System.out.println("选中了===》"+source.getSelectedItem());
            }
        });
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 400);
    }

    public static void main(String[] args) {
        new TestJCombobox();
    }
}

JList列表

  • 展示信息,一般动态扩容
package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class TestJList extends JFrame {
    public TestJList() {
        Container container = getContentPane();

        String[] contens = {"qwe", "wer", "df"};
        JList jList = new JList(contens);

        container.add(jList);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 400);
    }

    public static void main(String[] args) {
        new TestJList();
    }
}

JTextField文本框

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class TestText extends JFrame{
    public TestText() {
        Container container = getContentPane();

        JTextField jTextField1 = new JTextField("Hello");
        JTextField jTextField2 = new JTextField("World",20);

        container.add(jTextField1,BorderLayout.EAST);
        container.add(jTextField2,BorderLayout.WEST);

        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 400);
    }

    public static void main(String[] args) {
        new TestText();
    }
}

JPasswordField密码框

package com.summer.demo1;

import javax.swing.*;
import java.awt.*;

public class TestText extends JFrame{
    public TestText() {
        Container container = getContentPane();
        JPasswordField jPasswordField = new JPasswordField();
        jPasswordField.setEchoChar('*');
        container.add(jPasswordField);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 400);
    }

    public static void main(String[] args) {
        new TestText();
    }
}

JTextArea

[注:]container中add面板来布局

贪吃蛇

Data.class

package snake;

import javax.swing.*;
import java.net.URL;

//数据中心
public class Data {
//    相对路径 picture.png
//    绝对路径 / 相当于当前的项目
    private static URL bodyURL = Data.class.getResource("statics/body.png");
    public static ImageIcon body = new ImageIcon(bodyURL);
    private static URL headURL = Data.class.getResource("statics/head.png");
    public static ImageIcon head = new ImageIcon(headURL);
    private static URL foodURL = Data.class.getResource("statics/food.png");
    public static ImageIcon food = new ImageIcon(foodURL);

    private static URL upURL = Data.class.getResource("statics/up.png");
    private static URL downURL = Data.class.getResource("statics/down.png");
    private static URL rightURL = Data.class.getResource("statics/right.png");
    private static URL leftURL = Data.class.getResource("statics/left.png");
    public static ImageIcon up = new ImageIcon(upURL);
    public static ImageIcon down = new ImageIcon(downURL);
    public static ImageIcon right = new ImageIcon(rightURL);
    public static ImageIcon left = new ImageIcon(leftURL);

}

GamePanel.class

package snake;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

//游戏的面板
public class GamePanel extends JPanel implements KeyListener, ActionListener {

    //    定义蛇的数据结构
    int length; //蛇的长度
    int[] snakeX = new int[600];
    int[] snakeY = new int[500];
    String direction;
    boolean isStart = false;//默认不开始
    Timer timer = new Timer(100, this);//100毫秒执行一次 ms单位

    //    初始化方法
    public void init() {
        length = 3;
        snakeX[0] = 100;
        snakeY[0] = 100;//蛇的头
        snakeX[1] = 75;
        snakeY[1] = 100;//蛇的身子
        snakeX[2] = 50;
        snakeY[2] = 100;//蛇的身子
        direction = "R";
    }

    //构造器
    public GamePanel() {
        init();
//        获得焦点 和 键盘事件
        this.setFocusable(true);//获得焦点事件
//        获取键盘事件
        this.addKeyListener(this);

//        游戏一开始定时器就启动
        timer.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);//清屏
//        绘制静态的面板
        this.setBackground(Color.PINK);
        Data.head.paintIcon(this, g, 25, 11);
        g.fillRect(25, 75, 850, 600);
//      初始化朝右边
        if (direction.equals("R")) {
            Data.right.paintIcon(this, g, snakeX[0], snakeY[0]);
        } else if (direction.equals("L")) {
            Data.left.paintIcon(this, g, snakeX[0], snakeY[0]);
        } else if (direction.equals("U")) {
            Data.up.paintIcon(this, g, snakeX[0], snakeY[0]);
        } else if (direction.equals("D")) {
            Data.down.paintIcon(this, g, snakeX[0], snakeY[0]);
        }
        for (int i = 1; i < length; i++) {
            Data.body.paintIcon(this, g, snakeX[i], snakeY[i]);
        }
        if (!isStart) {
            g.setColor(Color.white);
            g.setFont(new Font("微软雅黑", Font.BOLD, 30));
            g.drawString("按下空格开始游戏~", 300, 300);
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        if (keyCode == KeyEvent.VK_SPACE) {
            isStart = !isStart;
            repaint();
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {

    }

    //  事件监听--需要通过固定事件来刷新 1s 10次
    @Override
    public void actionPerformed(ActionEvent e) {
        if (isStart) {//游戏是开始状态 小蛇动起来
            //右移
            for (int i = length - 1; i > 0; i--) {
                snakeX[i] = snakeX[i - 1];//后一节移动到前一节
                snakeY[i] = snakeY[i - 1];
            }
            snakeX[0] = snakeX[0] + 25;
            if (snakeX[0] > 850) {
                snakeX[0] = 25;
            }
            repaint();
        }
        timer.start();
    }
}
//键盘监听器 可以新写一个类 也可以内部类

StartGame.class

package snake;

import javax.swing.*;
import java.awt.*;

public class StartGame {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.setBounds(10, 10, 900, 720);
        Container container = jFrame.getContentPane();
        container.add(new GamePanel());
        jFrame.setVisible(true);
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jFrame.setResizable(false);//窗口大小不可变
    }
}

posted @ 2021-07-09 01:05  学点东西真不容易  阅读(31)  评论(0编辑  收藏  举报