栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

GUI编程 入门 (01)下一部分 02 贪吃蛇游戏设计

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GUI编程 入门 (01)下一部分 02 贪吃蛇游戏设计

什么是GUI

用来设计游戏

需要的组件

窗口
弹窗
面板
文本框
列表框
按钮
图片
交互
监听时间
鼠标
键盘事件

小tip

外挂习惯用Java写
破解工具
class文件 - 可阅读

简介 GUI核心开发技术: Swing 和 AWT

快要被淘汰了,为什么不留行呢?
1因为界面不美观
2需要jre环境
eg: 为了1个5兆游戏,需要下载100-200兆环境。

为什么学习

写出自己的小工具
工作时候,可能会设计到 维护swing界面(概率小)
了解MVC建构,了解监听!!

AWT

底层实现

AWT介绍

抽象窗口工具 abstract window tool
new 类
GUI编程: 图形用户界面编程

元素: 窗口, 按钮, 文本框。

java.awt包

两个核心类:Frame 和 Dialog

图解AWT架构 核心: 组件 和 容器 Frame

下面是编写一个弹窗

package Gui;

import java.awt.*;

public class TestFrame {
  public static void main(String[] args) {
    // Frame, JDK, 看源码
    Frame frame = new Frame("我的第一个java图形界面窗口!");
    // 设置可见性
      frame.setVisible(true);
    //  w h 长 宽
      frame.setSize(400,400);
    // 设置背景颜色
    // 三个参数rgb(三原色,red green blue),四个参数 多一个透明度
//      new Color();
//      frame.setBackground(Color.BLACK);
      frame.setBackground(new Color(33, 169, 84));
    // 弹出的初始位置
      frame.setLocation(200,200);
    // 设置大小固定
      frame.setResizable(false);
  }
}

写多个窗口

package Gui;

import java.awt.*;

public class TestFrame2 {
  public static void main(String[] args) {
    //
    MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.blue);
    MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.red);
    MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.gray);
    MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.yellow);
  }
}

class MyFrame extends Frame {
  static int id = 0; // 可能存在多个窗口,设置一个计数器

  public MyFrame(int x, int y, int w, int h,Color color) {
    super("MyFrame+" + (++id));
    setBackground(color);
    setBounds(x, y, w, h);//设置初始位置 + 宽高
    setVisible(true);
  }
}

面板Pannel

解决 关闭事件!

package Gui;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

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

    // 设置布局
    frame.setLayout(null);
    // 设置坐标
    frame.setBounds(300, 300, 500, 500);
    frame.setBackground(new Color(33, 169, 84));

    // pannel设置坐标,相对与frame
    panel.setBounds(50, 50, 400, 400);
    panel.setBackground(new Color(239, 5, 5));

    // frame.add(pannel)
    frame.add(panel);

    frame.setVisible(true);

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

布局管理器 流式布局
package Gui;

import java.awt.*;

public class TestFlowLaout {
    public static void main(String[] args){
        Frame frame = new Frame();

        // 按钮-组件
        Button button1 = new Button("Button One");
        Button button2 = new Button("Button Two");
        Button button3 = new Button("Button Three");

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

        frame.setSize(200,200); // 设置窗口大小

        // 把按钮添加上去
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);

        frame.setVisible(true);
    }
}
东西南北中
package Gui;

import java.awt.*;

public class TestBorderLayout {
  public static void main(String[] args) {
    Frame frame = new Frame("TestBorderLayout");

    Button east = new Button("East");
    Button wast = new Button("Wast");
    Button south = new Button("South");
    Button north = new Button("North");
    Button center = new Button("Center");

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

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

表格布局Grid
package Gui;

import java.awt.*;

public class TestGridLayout {

  public static void main(String[] args) {
    //
      Frame frame = new Frame("TestGridLayout");

      Button button1 = new Button("btn1");
      Button button2 = new Button("btn2");
      Button button3 = new Button("btn3");
      Button button4 = new Button("btn4");
      Button button5 = new Button("btn5");
      Button button6 = new Button("btn6");

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

      frame.add(button1);
      frame.add(button2);
      frame.add(button3);
      frame.add(button4);
      frame.add(button5);
      frame.add(button6);

      frame.pack();// java函数,自动布局
      frame.setVisible(true);
  }
}

练习如何设置一个一个规定的布局


思路:

上下分为2部分

中间各放一个面板


左中右布局

小结:

1个frame框架
将frame分为上下两部分看,完成上部分,下部分复制就可。

光看上半部分
左: button
中: 面板
右:button

复制到下半部分
左: button
中: 面板
右:button

统计:
4个button
4个面板
frame分为 2 * 3的布局

上下 各放一个 面板
上面板 放三个: 左button 面板 右 button
下面板 放三个: 左button 面板 右 button

面板 上button 下button

package Gui;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class ExDemo {

  public static void main(String[] args) {
      // 总frame框
      Frame frame = new Frame();
      // 分为上下2层
      frame.setLayout(new GridLayout(2,1));

      frame.setSize(400,300);
      frame.setLocation(300,400);
      frame.setBackground(Color.BLACK);


      //4个面板
      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("East-1"),BorderLayout.EAST);
      panel1.add(new Button("West-1"),BorderLayout.WEST);

      panel2.add(new Button("p2-btn-1"));
      panel2.add(new Button("p2-btn-2"));

      panel1.add(panel2,BorderLayout.CENTER);

      panel3.add(new Button("East-1"),BorderLayout.EAST);
      panel3.add(new Button("West-1"),BorderLayout.WEST);

//      panel4.add(new Button("p2-btn-1"));
//      panel4.add(new Button("p2-btn-2"));
//      panel4.add(new Button("p2-btn-3"));
//      panel4.add(new Button("p2-btn-4"));
      for (int i = 0; i < 4; i ++){
          panel4.add(new Button("for-" + i));
      }

      panel3.add(panel4,BorderLayout.CENTER);


      frame.add(panel1);
      frame.add(panel3);

      frame.addWindowListener(new WindowAdapter() {
          @Override
          public void windowClosing(WindowEvent e) {
              System.exit(0);
          }
      });

      frame.setVisible(true);
  }
}


总结:
1.Frame 是一个顶级窗口
2.Panel无法单独显示,必须添加到某个容器中。
3.布局管理器
流式
grid

时间监听

定义: 当某个事情发生的时候,干什么?

package Gui;

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();

    // 因为 addActionListener()需要一个ActionListener,所以我们需要构造一个ActionListener
    MyActionListener myActionListener = new MyActionListener();
    button.addActionListener(myActionListener);

    frame.add(button,BorderLayout.CENTER);
    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("AAA");
  }
}

多个按钮共享一个事件

package Gui;

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

public class TestActionTwo {
  public static void main(String[] args) {
    // 两个按钮实现同一个 监听
    // 开始按钮 和 停止按钮
    Frame frame = new Frame("开始-停止");
    Button button1 = new Button("start");
    Button button2 = new Button("end");

    // 可以显示的定义 出发会返回的命令,如果不显示定义,则会走默认的值!
    // 可以多个按钮值写一个监听类
    
    button2.setActionCommand("button2-end");

    MyMonitor myMonitor = new MyMonitor();

    button1.addActionListener(myMonitor);
    button2.addActionListener(myMonitor);

    frame.add(button1,BorderLayout.NORTH);
    frame.add(button2,BorderLayout.SOUTH);

    frame.setVisible(true);
  }
}

class MyMonitor implements ActionListener{

  @Override
  public void actionPerformed(ActionEvent e) {
    System.out.println("the button is pressed! : " + e.getActionCommand());

//    if (e.getActionCommand() == "start"){}
  }
}

输入框TextField 监听
package Gui;

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

public class TestText01 {
  public static void main(String[] args) {
    // 启动!
    new MyFrame2();
  }
}

class MyFrame2 extends Frame {
  public MyFrame2() {
    TextField testField = new TextField();
    this.add(testField);
    // 监听这个文本框输入的文字
    MyActionListener2 myActionListener2 = new MyActionListener2();
    // 按下enter 就会触发这个输入框的事件
    testField.addActionListener(myActionListener2);

    // 设置替换编码
    testField.setEchoChar('*');
    setVisible(true);
    pack();
  }
}

class MyActionListener2 implements ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
    TextField field = (TextField) e.getSource(); // 获得一些资源
//    field.getText(); // 获得输入框中的文本
    System.out.println(field.getText());
    field.setText(""); // 回车完就清空
  }
}

小tips(题外话):组合原则

经典案例: 计算器求和

package Gui;

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

public class TestCalc {
  public static void main(String[] args) {
    //
    new Calculator();
  }
}

// 计算器类
class Calculator extends Frame {
  public Calculator() {

    // 三个文本框
    TextField textField1 = new TextField(10); // 字符数
    TextField textField2 = new TextField(10); // 字符数
    TextField textField3 = new TextField(20); // 字符数
    // 一个按钮
    Button button = new Button("=");

    button.addActionListener(new MyCalculatorListener(textField1, textField2, textField3));
    // 一个标签
    Label label = new Label("+");

    // 布局
    setLayout(new FlowLayout());

    add(textField1);
    add(label);
    add(textField2);
    add(button);
    add(textField3);

    pack();
    setVisible(true);
  }
}

// 监听器类
class MyCalculatorListener implements ActionListener {
  // 获取三个变量
  private TextField num1, num2, num3;

  public MyCalculatorListener(TextField num1, TextField num2, TextField num3) {
    this.num1 = num1;
    this.num2 = num2;
    this.num3 = num3;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // 获得 两数
    int n1 = Integer.parseInt(num1.getText());
    int n2 = Integer.parseInt(num2.getText());
    // 计算运算结果
    num3.setText("" + (n1 + n2));
    // 清除前两个框
    num1.setText("");
    num2.setText("");
  }
}

写法升级,改为面向对象方法

package Gui;

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

public class TestCalc {
  public static void main(String[] args) {
    //
    new Calculator().loadFraome();
  }
}

// 计算器类
class Calculator extends Frame {
  TextField num1, num2, num3;
  public void loadFraome(){
    // 属性

    // 三个文本框
    num1 = new TextField(10); // 字符数
    num2 = new TextField(10); // 字符数
    num3 = new TextField(20); // 字符数
    // 一个按钮
    Button button = new Button("=");
    // 一个标签
    Label label = new Label("+");

    // 设置监听
    button.addActionListener(new MyCalculatorListener(this));

    // 布局
    setLayout(new FlowLayout());
    add(num1);
    add(label);
    add(num2);
    add(button);
    add(num3);

    pack();
    setVisible(true);
  }
}

// 监听器类
class MyCalculatorListener implements ActionListener {


  // 获取计算器这个对象,在一个类中组合另外一个类
  Calculator calculator = null;

  public MyCalculatorListener(Calculator calculator) {
    this.calculator = calculator;
  }

  @Override
  public void actionPerformed(ActionEvent e) {
    // 获得 两数
    int n1 = Integer.parseInt(calculator.num1.getText());
    int n2 = Integer.parseInt(calculator.num2.getText());
    // 计算运算结果
    calculator.num3.setText("" + (n1 + n2));
    // 清除前两个框
    calculator.num1.setText("");
    calculator.num2.setText("");
  }
}


内部类
进一步升级包装

package Gui;

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

public class TestCalc {
  public static void main(String[] args) {
    //
    new Calculator().loadFraome();
  }
}

// 计算器类
class Calculator extends Frame {
  // 属性
  TextField num1, num2, num3;
  // 方法
  public void loadFraome(){
    // 属性

    // 三个文本框
    num1 = new TextField(10); // 字符数
    num2 = new TextField(10); // 字符数
    num3 = new TextField(20); // 字符数
    // 一个按钮
    Button button = new Button("=");
    // 一个标签
    Label label = new Label("+");

    // 设置监听
    button.addActionListener(new MyCalculatorListener(this));

    // 布局
    setLayout(new FlowLayout());
    add(num1);
    add(label);
    add(num2);
    add(button);
    add(num3);

    pack();
    setVisible(true);
  }

  // 监听器类
  // 内部类最大的好处:畅通无阻的访问外部属性和方法
  private class MyCalculatorListener implements ActionListener {

    // 获取计算器这个对象,在一个类中组合另外一个类
    Calculator calculator = null;

    public MyCalculatorListener(Calculator calculator) {
      this.calculator = calculator;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
      // 获得 两数
      int n1 = Integer.parseInt(num1.getText());
      int n2 = Integer.parseInt(num2.getText());
      // 计算运算结果
      num3.setText("" + (n1 + n2));
      // 清除前两个框
      num1.setText("");
      num2.setText("");
    }
  }
}



画笔
package Gui;

import java.awt.*;

public class TestPaint {
  public static void main(String[] args) {
    //
      new MyPaint().loadFrame();
  }
}

class MyPaint extends Frame{

    public void loadFrame(){
        setBounds(200,200,600,500);
        setVisible(true);
    }

    // 画笔
    @Override
    public void paint(Graphics g){
//        super.paint(g);
        // 画笔需要有颜色,画笔需要画画
        g.setColor(Color.red);
        // 画一个圆
//        g.drawOval(100,100,100,100); // 空心
        g.fillOval(100,100,100,100); // 实心圆

        g.setColor(Color.GREEN); // 换画笔颜色
        g.fillRect(200,200,200,200); // 实心矩形

        // 养成习惯,画笔用完,要还原最初颜色
        g.setColor(Color.BLACK);
    }
}

鼠标监听

思路
1 创建鼠标监听器类,得到鼠标当前位置,并形成一个点
2 把这个点传到容器中
3 画笔依次从这个容器中取点,然后画出来

package Gui;

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;

public class TestMouseListener {
  public static void main(String[] args) {
    //
    new MyFrame2("画图");
  }
}

// 自己的类
class MyFrame2 extends Frame {
  // 画画需要 1 画笔,需要 2监听鼠标当前的位置,需要 3集合来存储当前这个点
  ArrayList points;

  public MyFrame2(String title) {
    super(title);
    setBounds(200, 200, 400, 300); // 设置画板大小
    // 存鼠标点击的点
    points = new ArrayList<>();

    // 鼠标监听器,正对这个窗口
    this.addMouseListener(new MyMouseListener());

    setVisible(true);
  }
  

  @Override
  public void paint(Graphics g) {
    
    // 画画,监听鼠标事件
    Iterator iterator = points.iterator(); // 通过迭代器,存储点击产生的点

    // 如果指针存在点,就指向下一个
    while (iterator.hasNext()) {
      Point point = (Point) iterator.next();
      g.setColor(Color.BLUE);
      g.fillOval(point.x, point.y, 10, 10);
    }
  }

  
  // 添加一个点到界面上
  public void addPaint(Point point) {
    points.add(point);
  }

  // 适配器模式
  private class MyMouseListener extends MouseAdapter {
    // 鼠标 按下,谈起
    @Override
    public void mousePressed(MouseEvent e) {
//      super.mousePressed(e);
      // 鼠标 按下, 弹起,按住不放
      MyFrame2 myFrame2 = (MyFrame2) e.getSource(); // e.getSource()返回当前对象
      // 点击的时候就会在界面上,产生 一个点!
      // 这个点就是鼠标的点

      myFrame2.addPaint(new Point(e.getX(), e.getY()));
      // 每次点击鼠标都需要重新画一遍
      myFrame2.repaint(); // 刷新桌布
    }
  }
}

窗口监听
package Gui;

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.BLUE);
        setBounds(100,100,200,200);
        setVisible(true);
//        addWindowListener(new MyWindowListener());

        this.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("被激活了!");
                    }
                }

        );

    }

//    class MyWindowListener extends WindowAdapter{
//        @Override
//        public void windowClosing(WindowEvent e) {
//            setVisible(false);//隐藏窗口, 可以改成通过按钮隐藏窗口
//            System.exit(0);// 正常退出
//        }
//    }
}


键盘监听
package Gui;

import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

// 键
public class TestKeyListener {
  public static void main(String[] args) {
    //
    new KeyFrame();
  }
}

class KeyFrame extends Frame {
  public KeyFrame() {
    setBounds(1, 2, 300, 400);
    setVisible(true);

    this.addKeyListener(
        new KeyAdapter() {
          @Override
          public void keyPressed(KeyEvent e) {
            // 获得按下键盘的是哪一个键
            int keyCode = e.getKeyCode(); // 获取 当前键盘的码
            // 不需要 记住 这个值, 直接使用 静态属性 VK_XXX
            System.out.println(keyCode);
            if (keyCode == KeyEvent.VK_UP) {
              System.out.println("你按下了上键!");
            }
            // 根据不同的操作,产生不同的结果
          }
        });
  }
}

SWing

AWT是基础
SWing是封装

绘制界面

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

// 主窗口
public class DialogDemo extends JFrame{

    public DialogDemo(){
        this.setVisible(true);
        this.setSize(700,500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //Jframe 放东西,容器
        Container container = this.getContentPane();

        //绝对布局
        container.setLayout(null);

        //按钮
        JButton button = new JButton("点击弹出一个对话框"); // 创建
        button.setBounds(30,30,200,50); //固定button位置,大小

        //加入容器
        container.add(button);//按钮加入容器

        //点击按钮的时候,弹出弹窗
        button.addActionListener(new ActionListener() { //监听器
            @Override
            public void actionPerformed(ActionEvent e) {
                //弹窗
                new MyDialogDemo();
            }
        });
    }

    public void init(){
    }

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

    }
}

// 弹窗的窗口
class MyDialogDemo extends JDialog{
    public MyDialogDemo(){
        this.setVisible(true); //可视化
        this.setBounds(100,100,500,500);// 窗口位置,大小
//        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// 设置退出

        Container container = this.getContentPane(); //设置容器
        container.setLayout(null); //设置绝对布局

        container.add(new Label("这是一个容器!"));
    }
}

Icon图标
import javax.swing.*;
import java.awt.*;

//图表,需要实现类,Frame继承
public class IconDemo extends JFrame implements Icon {
    private int width;
    private int height;

    public IconDemo(){}

    public IconDemo(int width,int height){
        this.width = width;
        this.height = height;
    }

    public void init(){
        //产生一个图表
        IconDemo iconDemo = new IconDemo(15,15);
        //可以放标签上,也可以放在按钮上
        JLabel label =  new JLabel("",iconDemo,SwingConstants.CENTER);
        Container container = getContentPane();
        container.add(label);

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

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


    @Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        g.fillOval(x,y,width,height);
    }

    @Override
    public int getIconWidth() {
        return this.width;
    }

    @Override
    public int getIconHeight() {
        return this.height;
    }
}

图片图标


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

class ImageIconDemo extends JFrame{

    public ImageIconDemo(){
        //获取图片的地址
        JLabel label = new JLabel("ImageIcon");

        //获取图片地址
        URL url = ImageIconDemo.class.getResource("test1.jpg");

        ImageIcon imageIcon = new ImageIcon(url); //命名不要冲突
        label.setIcon(imageIcon);

        label.setHorizontalAlignment(SwingConstants.CENTER);

        Container container = getContentPane();
        container.add(label);

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

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

窗口 面板

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

public class JPanelDemo extends JFrame {
    public JPanelDemo(){
        Container container = this.getContentPane();
        container.setLayout(new GridLayout(3,1,10,10));//2行1列10为间距
        JPanel jPanel1 = new JPanel(new GridLayout(1,3)); //1行3列面板布局
        JPanel jPanel2 = new JPanel(new GridLayout(2,3)); //1行3列面板布局
        JPanel jPanel3 = new JPanel(new GridLayout(1,3)); //1行3列面板布局


        jPanel1.add(new JButton("1"));
        jPanel1.add(new JButton("1"));
        jPanel1.add(new JButton("1"));

        jPanel2.add(new JButton("1"));
        jPanel2.add(new JButton("1"));
        jPanel2.add(new JButton("1"));
        jPanel2.add(new JButton("1"));
        jPanel2.add(new JButton("1"));
        jPanel2.add(new JButton("1"));


        jPanel3.add(new JButton("1"));
        jPanel3.add(new JButton("1"));
        jPanel3.add(new JButton("1"));

        container.add(jPanel1);
        container.add(jPanel2);
        container.add(jPanel3);

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

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


滚动条

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

public class JScrollDemo extends JFrame {
    public JScrollDemo(){
        Container container = this.getContentPane();

        //文本域
        JTextArea jTextArea = new JTextArea(20,50);
        jTextArea.setText("文本框文本框文本框文本框文本框");

        //scroll面板
        JScrollPane jScrollPane = new JScrollPane(jTextArea);
        container.add(jScrollPane);

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

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

图片按钮
import com.sun.org.apache.bcel.internal.generic.NEW;

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

public class JButtonDemo01 extends JFrame{

    public JButtonDemo01(){
        Container container = this.getContentPane();

        // 将一个图片变为图标
        URL resource = JButtonDemo01.class.getResource("test1.jpg");
        Icon icon = new ImageIcon(resource);

        // 把这个图表放在按钮上
        JButton jButton = new JButton();
        jButton.setIcon(icon);
        jButton.setToolTipText("图片按钮");

        //add
        container.add(jButton);

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

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

单选框和多选框

####单选框


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

public class JButtonDemo02 extends JFrame{
    public JButtonDemo02(){
        Container container = this.getContentPane();

        // 将一个图片变成图表
        URL resource = JButtonDemo01.class.getResource("test1.jpg");
        Icon icon = new ImageIcon(resource);

        //单选框
        JRadioButton radioButton1 = new JRadioButton("JradioButton01");
        JRadioButton radioButton2 = new JRadioButton("JradioButton02");
        JRadioButton radioButton3 = new JRadioButton("JradioButton03");
        // 由于单选框 只能选择1个,所以需要分组
        ButtonGroup buttonGroup = new ButtonGroup();
        buttonGroup.add(radioButton1);
        buttonGroup.add(radioButton2);
        buttonGroup.add(radioButton3);

        container.add(radioButton1,BorderLayout.CENTER);
        container.add(radioButton2,BorderLayout.NORTH);
        container.add(radioButton3,BorderLayout.SOUTH);

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

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

}

复选框按钮

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

public class JButtonDemo03 extends JFrame{
    public JButtonDemo03(){
        Container container = this.getContentPane();

        // 将一个图片变成图表
        URL resource = JButtonDemo01.class.getResource("test1.jpg");
        Icon icon = new ImageIcon(resource);

        // 多选框
        JCheckBox checkBox1 = new JCheckBox("eheckBox01");
        JCheckBox checkBox2 = new JCheckBox("eheckBox02");

        container.add(checkBox1,BorderLayout.NORTH);
        container.add(checkBox2,BorderLayout.SOUTH);

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

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

}

列表 下拉框

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

public class TestComboboDemo01 extends JFrame {

    public TestComboboDemo01(){

        Container container = this.getContentPane();

        JComboBox status = new JComboBox<>();

        status.addItem(null);
        status.addItem("正在热映");
        status.addItem("已经下架");
        status.addItem("即将上映");

        container.add(status);

        // 添加接听窗口
//        status.addActionListener();

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

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

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

public class TestComboboDemo02 extends JFrame {

    public TestComboboDemo02(){

        Container container = this.getContentPane();

        //生成列表内容
        String[] contents = {"1","2","3"};
        //列表中需要放入内容`
        JList jList = new JList<>(contents);

        container.add(jList);

        // 添加接听窗口
//        status.addActionListener();

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

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

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

public class TestComboboDemo02 extends JFrame {

    public TestComboboDemo02(){

        Container container = this.getContentPane();

        //生成列表内容
//        String[] contents = {"1","2","3"}; //静态添加 写死的

        //动态添加
        Vector contents = new Vector();
        contents.add("张三");
        contents.add("李四");
        contents.add("王五");


        //列表中需要放入内容`
        JList jList = new JList<>(contents);

        container.add(jList);

        // 添加接听窗口
//        status.addActionListener();

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

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


应用场景

选择地区,或者 一些单个选项。

列表: 展示信息,一般是动态扩容!

文本框

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

public class TestTextDemo01 extends JFrame {

    public  TestTextDemo01(){

        Container container = this.getContentPane();

        JTextField textField = new JTextField("Hello");
        JTextField textField2 = new JTextField("World");

        container.add(textField,BorderLayout.NORTH);
        container.add(textField2,BorderLayout.SOUTH);

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

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

密码框

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

public class TestTextDemo03 extends JFrame{

    public  TestTextDemo03(){

        Container container = this.getContentPane();

        //设置密码框
        JPasswordField jPasswordField= new JPasswordField();
        jPasswordField.setEchoChar('*');

        container.add(jPasswordField);

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

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

文本域

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/842475.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号