GUI :Graphical User Interface,图形用户界面,指在计算机出现后,在屏幕上使用图形界面来帮助用户(User)与机器(Machine)打交道用的界面接口(Interface)。简单地理解,就是电脑打开的各个界面及弹窗,用户可进行鼠标、键盘等操作。
目录
一、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();
}
}
运行结果:文本框出现了滚动条。