【了解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弹窗

扫描二维码关注公众号,回复: 14670532 查看本文章

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