【了解Java GUI编程】AWT和Swing的基本用法

GUI :Graphical User Interface,图形用户界面,指在计算机出现后,在屏幕上使用图形界面来帮助用户(User)与机器(Machine)打交道用的界面接口(Interface)。简单地理解,就是电脑打开的各个界面及弹窗,用户可进行鼠标、键盘等操作。

目录

一、AWT

1.1 组件和容器

1.1.1 AWT常用组件

1.1.2 常用的容器

1.2 布局管理器

1.3 事件监听

1.4 简易计算器的应用案例

 二、Swing

 2.1 JDialog弹窗

2.2 图标

2.2.1 Icon图标

2.2.2 ImageIcon图像图标

 2.4 Panel面板

 2.4 按钮

2.4.1 JButton图片按钮

2.4.2 JRadioButton单选框按钮

2.4.3 JCheckBox多选框按钮

2.5 列表

2.5.1 JComboBox下拉框

2.5.2 列表框

2.6 Scroll滚动条


一、AWT

AWT:抽象窗口工具包 (Abstract Windowing Toolkit),是Java平台独立的窗口系统,图形和用户界面器件的工具包。AWT是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。

java.awt包提供了基本的java程序的设计工具。主要包括下述三个概念:

  • 组件——Component

  • 容器——Container

  • 布局管理器——LayoutManager

1.1 组件和容器

1.1.1 AWT常用组件

组件名称

构造方法

使用说明

按钮(Button)

Button b=new Button("退出");

单击按钮产生ActionEvent事件,实现ActionListener接口并重写actionPerformed()方法监听和处理事件

复选框(Checkbox)

Checkbox ch=new Checkbox("one",true);

选中复选框产生ItemAction事件,实现ItemListener接口监听和处理事件

下拉菜单(Choice)

Choice colorChoose=new Choice();

实现ItemListener接口监听和处理事件;Add()方法可在下拉列表中添加选项

画布(Canvas)

public Canvas(GraphicsConfigurationconfig);

重写Canvas类的paint()方法实现完成图形处理;实现MouseListener和KeyListener接口监听Canvas组件的鼠标和键盘事件

文本框(TextField)

TextField ft=new TextField(16);

//宽度为16个字符

文本框只能显示一行,按Enter键时产生ActionEvent事件,通过ActionListener接口中的actionPerformed()方法处理事件

文本域(TextAera)

TextArea ta=new TextArea("Textarea",4,10);

//4行10列

可显示多行多列文本和滚动条

列表框(List)

List list=new List(4,false);

//4行,不允许多选

提供多个文本选项,支持滚动条,可以浏览多项

对话框(Dialog)

Window类的子类

文件对话框(FileDialog)

Filedialog fd=new Filedialog(frm,"fileddilog");

当用户想打开或存储文件时,可使用文件对话框进行操作

菜单栏(MenuBar)

MenuBar mb=new MenuBar();

通过frm.setMenuBar(mb)语句可将菜单mb设置为Frame对象frm的主菜单

下拉菜单(Menu)

Menu m=new Menu("Menu");

通过mb.add(m)可将m下拉列表添加到菜单栏中

菜单项(MenuItem)

MenuItem mi=new MenuItem("Openit");

通过mi.add(mi)将菜单项mi添加到下一个下拉列表m中。

颜色(Color)

//非构造方法,两种方法设置组件背景色

setBackground(Color.BLUE);

setBackground(newColor(100,100,100));

通过setForeground()方法设置组件前景色,通过setBackground()方法设置组件背景色。颜色值可使用Color类的颜色常量来设置,也可通过指定RGB颜色对象值设置

字体(Font)

Font font=new Font("宋体",Font.BOLD,10);

//宋体,10号,加粗

按顺序向Font()构造方法传递有关字体设置的参数

1.1.2 常用的容器

        主要有三类:Panel(面板), Frame(框架), Applet(小程序)

容器名称

构造方法

使用说明

面板(Panel)

Panel pnl = new Panel(); 面板是一种透明的容器,没有标题和边框,与Frame 不同,Panel不能作为最外层的容器单独存在,它首先必须作为一个组件放置在其他容器(一般为Frame)中。

框架(Frame)

Frame frm = new Frame("New Window"); 使用Window的子类Frame类进行窗口实例化,框架的外观就像平常Windows系统下的窗口,setSize()方法可以设置框架尺寸的大小,setVisibe()方法可以设置窗口的可见性。

小程序(Applet)

Applet apt = new Applet(); Frame一般用作Java应用程序的窗口,而Applet是Java小程序的窗口。与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局。

        示例1:创建Frame窗口并设置属性

//创建一个AWT窗口

public class MyAWTDemo {
    public static void main(String[] args) {
        //创建一个frame框架
        Frame frame=new Frame();
        //设置Java窗体组件的名称
        frame.setTitle("JavaGUIComponent");
        //设置窗体的顶点位置及其大小
        frame.setBounds(20,30,300,280);
        //设置窗体是否可见
        frame.setVisible(true);
        //设置窗体背景颜色
        frame.setBackground(Color.gray);
        frame.add(new List());
        /*给窗体添加监听器的方法改变窗体状态,监听器的参数是一个内部类,
         *     内部类定义了窗体关闭的处理方法
         */
        frame.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });
         
        //创建一个panel面板
        Panel panel=new Panel();
        //给panel面板添加文本框、文本域、列表、单选按钮、复选按钮、画布、标签、字体大小、事件、滚动条
        panel.add(new TextField(20));
        panel.add(new Button("Click me!"));
         
        frame.add(panel);
    }
}

        示例2:创建自己的Frame窗口类(继承extends

public class MyFrameDemo {

	public static void main(String[] args) {
		// 展示多个窗口
		MyFrame myFrame1 = new MyFrame(100,100,200,200,Color.red);
		MyFrame myFrame2 = new MyFrame(300,100,200,200,Color.yellow);
		MyFrame myFrame3 = new MyFrame(100,300,200,200,Color.green);
		MyFrame myFrame4 = new MyFrame(300,300,200,200,Color.blue);

	}

}

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

 1.2 布局管理器

        常见分类:

布局管理器类型

构造方法

使用说明

流布局管理器(FlowLayout) 

new FlowLayout();//默认构造方法,居中对齐,横向和纵向间隔均默认为5像素

new FlowLayout(FlowLayout.RIGHT,20,40);//右对齐,横向间隔20像素,纵向间隔40像素

FlowLayout是Panel 和 Applet 的默认布局管理器。在该布局管理器中,组件在容器中按照从上到下,从左到右的顺序进行排列,行满后则换行。
边界布局管理器(BorderLayout) frame.add(button1,BorderLayout.EAST);//将按钮button1放置在最右侧 将容器分成North、South、East、West和Center 5个区域,每个区域只能放置一个组件,使用add()方法添加组件到容器指定区域。若容器大小发生变换,组件的相对位置不变。
网格布局管理器(GridLayout) GridLayout gl = new GridLayout(3,5); //3行5列网格式布局 GridLayout 可使容器中的各个组件按照从上到下,从左到右的规律呈网格状布局,每个组件始终平均占据容器的空间。

         示例1:东西南北中的边界式布局按钮组件

package GUI;

import java.awt.*;

public class MyBorderLayout {

	public static void main(String[] args) {
		Frame frame = new Frame("MyBorderLayout");
		
		//组件-按钮
		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.setSize(200, 200);
		frame.setVisible(true);

	}

}

        运行结果出现如下界面:

         示例2:表格式布局组件

package GUI;

import java.awt.*;

public class MyGridLayout {

	public static void main(String[] args) {
		Frame frame = new Frame("MyGridLayout");
		
		//组件-按钮
		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");
		
		//设置为表格式布局:3行2列
		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();//Java的一个函数,自动最优布局(可以不写)
		frame.setVisible(true);

	}

}

        运行结果如下:

 1.3 事件监听

        通过ActionListener动作监听器接口实现组件的动作发生之后的事件处理。

        定义一个事件监听的类:

class  自定义监听类  implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent e) {       //重写动作执行函数
        ......;
    }
}

         示例1:事件监听,实现按钮点击时可输出文字

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 TestActionEvent01 {

	public static void main(String[] args) {
		// 按下按钮,触发一些事件
		Frame frame = new Frame();
		Button button = new Button("button1");

		//因为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("按下按钮了");
		
	}
	
}

        示例2:输入框(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 textField = new TextField();
		add(textField);//在frame中添加文本框对象
		
		//监听这个文本框输入文字(密码)
		MyActionListener2 myActionListener2  =new MyActionListener2();
		//按下enter键,就会触发这个输入框的事件
		textField.addActionListener(myActionListener2);
		
		//设置替换编码(在输入框中输入的都以*来展示,而按下回车键后在控制台可以得到输入的内容)
		textField.setEchoChar('*');
		
		setVisible(true);
		pack();
	}
}

class MyActionListener2 implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		//获得一些资源,返回的对象
		TextField field = (TextField) e.getSource();
		//获得输入框中的文本
		System.out.println(field.getText());
		//点击回车后,输出文本框的内容后,清空文本框
		field.setText("");//null:空;  "":空白字符串
	}
	
}

        运行结果:

        示例3 :鼠标监听事件,用鼠标画画

package GUI_2;
//鼠标监听事件:用鼠标画画

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

public class MouseListenerTest {

	public static void main(String[] args) {
		new MyFrame("画图");

	}

}

class MyFrame extends Frame{
	
	ArrayList points;
	
	//需要画笔,并监听鼠标当前的位置,需要集合来存储这个点
	public MyFrame(String title) {
		super(title);
		setBounds(200,200,400,300);
		
		//存鼠标点击的点
		points = new ArrayList<>();
		
		setVisible(true);
		
		//鼠标监听器,针对这个窗口
		this.addMouseListener((MouseListener) new MyMouseListener());
	}
	
	@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);
	}
	
	
	
	//适配器模式,否则需要重写MouseListener类的所有内置函数
	private class MyMouseListener extends MouseAdapter{
		//鼠标  按下,弹起,按住不放
		public void mousePressed(MouseEvent e) {//e为当前鼠标
			MyFrame myFrame = (MyFrame) e.getSource();
			//点击时,界面上会产生一个点,这个点就是鼠标的点
			myFrame.addPaint(new Point(e.getX(),e.getY()));
			new Point(e.getX(),e.getY());
			
			//每次点击鼠标都需要重新画一遍,刷新
			myFrame.repaint();
		}

	}
}

         示例4:窗口监听事件,关闭窗口

package GUI_2;

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

public class WindowTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new WindowFrame();
	}

}

class WindowFrame extends Frame{
	public WindowFrame() {

		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);//正常退出;exit(1)为非正常退出
					}
					
					@Override
					public void windowActivated(WindowEvent e) {//激活窗口
						System.out.println("windowActivated");
					}
				}
				);
	}
	
	class MyWindowListener extends WindowAdapter{
		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);//正常退出;exit(1)为非正常退出
		}
	}
}

1.4 简易计算器的应用案例

        案例1 :通过设计构造器(Calculator()),制作一个简易计算器

package GUI;

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

//制作一个简易计算器

public class MyCalculation {

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

	}

}

//计算器类
class Calculator extends Frame{
	//构造器,重写类的初始化
	public Calculator(){
		//3个文本框
		TextField num1 = new TextField(10);//字符数
		TextField num2 = new TextField(10);//字符数
		TextField num3 = new TextField(20);//字符数
		//1个按钮
		Button button = new Button("=");
		
		button.addActionListener(new MyCalculatorListener(num1,num2,num3));
		//1个标签
		Label label = new Label("+");
		
		//流式布局
		setLayout(new FlowLayout());
		
		//按照排列的顺序添加控件
		add(num1);
		add(label);
		add(num2);
		add(button);
		add(num3);
		
		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) {
		//1.获得加数和被加数
		int n1 = Integer.parseInt(num1.getText());
		int n2 = Integer.parseInt(num2.getText());
		
		//2.将这个值加法运算后,放到第三个(运算结果)框
		num3.setText(""+(n1+n2));
		
		//3.清除前两个框
		num1.setText("");
		num2.setText("");
	}
	
}

         运行结果:在前两个文本框输入两个数(如左图),点击“=”,得到加法运算结果(如右图)

        上述MyCalculation.java是通过设计构造器的一种面向过程的编程;对代码进行面向对象设计的优化,在主函数中直接调用方法来运行:

        案例2:简易计算器的优化设计

package GUI;

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

//简易计算器MyCalculation的优化设计:改造为面向对象的方法设计

public class MyCalculation02 {

	public static void main(String[] args) {
		new Calculator02().loadFrame();//调用loadFrame()方法直接运行

	}

}

//计算器类
class Calculator02 extends Frame{
	//属性
	TextField num1,num2,num3;
	//方法
	public void loadFrame() {  //定义类的方法
		//3个文本框
		num1 = new TextField(10);//字符数
		num2 = new TextField(10);//字符数
		num3 = new TextField(20);//字符数
		//1个按钮
		Button button = new Button("=");
		
		button.addActionListener(new MyCalculatorListener02(this));
		//1个标签
		Label label = new Label("+");
		
		//流式布局
		setLayout(new FlowLayout());
		
		//按照排列的顺序添加控件
		add(num1);
		add(label);
		add(num2);
		add(button);
		add(num3);
		
		pack();
		setVisible(true);
	}

}

//监听器类
class MyCalculatorListener02 implements ActionListener{

	//获取计算器这个对象,在一个类中组合另一个类
	Calculator02 calculator = null;
	
	public MyCalculatorListener02(Calculator02 calculator) {
		this.calculator = calculator;
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		//1.获得加数和被加数
		//2.将这个值加法运算后,放到第三个(运算结果)框
		//3.清除前两个框
		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("");
	}
	
}

 二、Swing

        Swing 同样是一个为 Java 设计的 GUI 工具包,提供许多比 AWT 更好的屏幕显示元素,它们用纯 Java 写成,故同 Java 一样可以跨平台运行。与AWT相比,最直观的优点在于,Swing窗口可以通过一行命令直接关闭窗口。

        建立Swing窗口的格式

public  class  Swing窗口类  extends  JFrame{

    public Swing窗口类() {
        Container container = this.getContentPane();   //创建容器
        
        //新建需要的组件和面板元素变量
        ......;


        container.add( 组件 / 面板 );    //将组件或面板添加到容器中
        
        //JFrame 的基础设置:设置窗口大小、可见、可关闭
        this.setVisible(true);
        this.setBounds(100,100,300,400);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭窗口
    }
    public static void main(String[] args) {
        new Swing窗口类()

    }

}

 2.1 JDialog弹窗

        示例:点击按钮,出现弹窗

package GUI_3;
//JDialog弹窗

import java.awt.Container;
import java.awt.Dialog;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

//主窗口
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.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {//监听器
				//弹窗
				new MyDialogDemo();//用事件去绑定弹窗
			}
			
		});
		
		container.add(button);
	}
	
	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);
		
		Label label = new Label("欢迎学习Java");
		label.setBounds(100, 100, 200, 200);
		container.add(label);
		
	}
}

2.2 图标

2.2.1 Icon图标

package GUI_3;

import java.awt.*;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

//图标:需要实现类,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 jlabel = new JLabel("icontest",iconDemo,SwingConstants.CENTER);
		
		Container container = getContentPane();
		container.add(jlabel);
		
		//设置窗口可见及可关闭
		this.setVisible(true);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new IconDemo().init();

	}

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

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

	@Override
	public void paintIcon(Component c, Graphics g, int x, int y) {
		// TODO Auto-generated method stub
		g.fillOval(x, y, width, height);
	}

}

        运行结果,得到如下界面:

 2.2.2 ImageIcon图像图标

        注意:在使用前应将图片(这里的图片命名为“down.png”)放在该工作空间的地址下

package GUI_3;
//图像图标的使用

import java.awt.Container;
import java.net.URL;

import javax.swing.*;

public class ImageIconDemo extends JFrame{
	
	public ImageIconDemo() {
		
		JLabel label = new JLabel("ImageIcon");//界面中每一个图片都是一个带有地址的label
		//获取图片的地址
		URL url = ImageIconDemo.class.getResource("down.png");//通过类获得当前类下的地址
		
		ImageIcon imageIcon = new ImageIcon(url);
		label.setIcon(imageIcon);//居中放置图片
		label.setHorizontalAlignment(SwingConstants.CENTER);
		
		Container container = getContentPane();
		container.add(label);
		
		setBounds(100,100,200,200);
		setVisible(true);
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

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

	}
}

        运行结果如下:

 2.4 Panel面板

package GUI_3;

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.*;

public class JPanelDemo extends JFrame{

	public JPanelDemo() {
		Container container = this.getContentPane();
		container.setLayout(new GridLayout(2,1,10,10));//设置为2行1列的表格式排版,后面两个参数的意思是间距
		
		JPanel panel1 = new JPanel(new GridLayout(1,3));
		
		panel1.add(new JButton("1"));
		panel1.add(new JButton("2"));
		panel1.add(new JButton("3"));
		
		container.add(panel1);
		
		this.setVisible(true);
		this.setSize(500, 500);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	public static void main(String[] args) {
		new JPanelDemo();

	}

}

 2.4 按钮

2.4.1 JButton图片按钮

package GUI_3;
//图片按钮
import java.awt.*;
import java.net.URL;
import javax.swing.*;

public class JButtonDemo01 extends JFrame{
	
	public JButtonDemo01() {
		Container container = this.getContentPane();
		//将一个图片变为图标
		URL resource = JButtonDemo01.class.getResource("down.png");
		Icon icon  = new ImageIcon(resource);
		
		//把这个图标放按钮上
		JButton button = new JButton();
		button.setIcon(icon);
		button.setToolTipText("图片按钮");
		
		//add
		container.add(button);
		
		this.setVisible(true);
		this.setSize(500, 300);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

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

	}

}

 2.4.2 JRadioButton单选框按钮

package GUI_3;
//单选框按钮
import java.awt.*;
import java.net.URL;
import javax.swing.*;

public class JButtonDemo02 extends JFrame{
	
	public JButtonDemo02() {
		Container container = this.getContentPane();
		//将一个图片变为图标
		URL resource = JButtonDemo01.class.getResource("down.png");
		Icon icon  = new ImageIcon(resource);
		
		//单选框
		JRadioButton radioButton1 = new JRadioButton("JRadioButton01");
		JRadioButton radioButton2 = new JRadioButton("JRadioButton02");
		JRadioButton radioButton3 = new JRadioButton("JRadioButton03");
		
		//由于单选框只能选择一个,分组,一个组中只能选择一个
		ButtonGroup group = new ButtonGroup();
		group.add(radioButton1);
		group.add(radioButton2);
		group.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();

	}

}

2.4.3 JCheckBox多选框按钮

package GUI_3;
//多选框按钮
import java.awt.*;
import java.net.URL;
import javax.swing.*;

public class JButtonDemo03 extends JFrame{
	
	public JButtonDemo03() {
		Container container = this.getContentPane();
		//将一个图片变为图标
		URL resource = JButtonDemo01.class.getResource("down.png");
		Icon icon  = new ImageIcon(resource);
		
		//多选框
		JCheckBox checkBox01  = new JCheckBox("checkBox01");
		JCheckBox checkBox02  = new JCheckBox("checkBox02");
		
		container.add(checkBox01,BorderLayout.NORTH);
		container.add(checkBox02,BorderLayout.SOUTH);
		
		this.setVisible(true);
		this.setSize(500, 300);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

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

	}

}

2.5 列表

2.5.1 JComboBox下拉框

package GUI_3;
//下拉框

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

public class ComboboxDemo01 extends JFrame{
	
	public ComboboxDemo01() {
		
		Container container = this.getContentPane();
		
		JComboBox status = new JComboBox();
		status.addItem(null);
		status.addItem("即将上映");
		status.addItem("正在热映");
		status.addItem("已下架");
		
		container.add(status);
		
		this.setVisible(true);
		this.setSize(500,300);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

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

	}

}

        运行结果:

 2.5.2 列表框

        注意:有静态列表和动态列表两种建立方式,一般选择通过定义向量变量,动态初始化列表

package GUI_3;
//列表框

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

import javax.swing.*;

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

		//生成列表的内容  
		String[] contents = {"1","2","3"};//静态初始化
		
		Vector contents2 = new Vector();//动态初始化
		//列表中需要放入内容
		//JList list = new JList(contents);//静态列表
		
		JList list = new JList(contents2);//动态列表,,一般选择动态扩容!!
		contents2.add("zhangsan");
		contents2.add("lisi");
		contents2.add("wangwu");
		
		
		container.add(list);
		
		this.setVisible(true);
		this.setSize(500,300);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}

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

}

2.6 Scroll滚动条

package GUI_3;

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

public class JScrollDemo extends JFrame{

	public JScrollDemo() {
		Container container = this.getContentPane();
		
		//文本域
		JTextArea textArea = new JTextArea(20,50);
		textArea.setText("欢迎学习Java");
		
		//Scroll面板
		JScrollPane scrollPane = new JScrollPane(textArea);//创建一个带有文本域的Scroll面板
		container.add(scrollPane);//将面板添加到容器中
		
		//JFrame 的基础设置:设置窗口大小、可见、可关闭
		this.setVisible(true);
		this.setBounds(100,100,300,400);
		this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new JScrollDemo();

	}

}

        运行结果:文本框出现了滚动条。

猜你喜欢

转载自blog.csdn.net/m0_46427461/article/details/126622501