JavaGUI设计相关理论知识
- Swing
- 顶级容器:
- JFrame
- JDialog
- 布局管理器:
- BorderLayout(边界布局管理器)
- FlowLayout(流式布局管理器)
- GridLayout(网格布局管理器)
- Swing事件处理机制:
- 窗体事件(WindowEvent)
- 鼠标事件(MouseEvent)
- 键盘事件(KeyEvent)
- 动作事件(ActionEvent)
- Swing常用组件:
- 面板组件:
- JPenal面板组件
- JScrollPane面板组件
- 文本组件:
- JTextField
- JTextArea
- 标签组件:
- JLabel组件
- 按钮组件:
- JButton按钮组件
- JCheckBox按钮组件
- JRadionButton按钮组件
- 下拉框组件:
- JComboBox组件
- 菜单组件:
- JMenuBar菜单栏
- JMenu菜单
- JMenuItem菜单选项
Swing
Swing提供了三个主要的顶级容器类、8种布局管理器、7种事件处理机制、6种常用组件。
我们首先介绍顶级容器类
顶级容器:
JFrame
JFrame是一个独立存在的顶级容器,也叫窗口。
JFrame支持窗口所有的基本功能:例如窗口最小化,设定窗口大小等。
创建JFrame窗口四步走:
1.创建JFrame窗口(即初始化JFrame容器窗口对象)。JFrame 对象名1 = new JFrame("JFrameTest");
JFrameTest为窗口名,在窗口左上角显示。
2.设置关闭窗口时的默认操作:setDefaultCloseOperation()方法。对象名1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JFrame.EXIT_ON_CLOSE为关闭默认属性,还有其他属性,之后接触。
3.设置窗口尺寸及显示位置:setSize()方法设置窗口尺寸,setLocation()方法设置窗体显示位置,setBounds()方法可综合设置。
对象名1.setSize(width,height);
对象名1.setLocation(pX,pY);
对象名1.setBounds(pX,pY,width,height);
4.展示JFrame窗口,即让窗口可见:
对象名1.setVisible(true);
补充:
重绘/刷新窗口:validate()方法;
当增删组件时,通知窗口重绘(类似于刷新)。
JDialog
JDialog顶级容/器通常用来表示对话框窗口,分为:
模态对话框:指用户需要等到处理完对话框后才能与其他窗口进行交互。
非模态对话框:指允许用户在处理对话框时同时与其他窗口进行交互
在JFrame容器窗口基础上创建并设置JDialog容器窗口,可理解为他们是父子级关系。
同样四步走:
1.创建JDialog窗口(即初始化JFrame容器窗口对象),可初始化3种对象;JDialog 对象名2 = new JDialog(对象名1);
对象名1的类型为JFrame,为指定JDialog对话框的所有者(顶级窗口JFrame)。JDialog 对象名2 = new JDialog(对象名1,"JDialogTest");
JDialogTest为窗口名,在窗口左上角显示。JDialog 对象名2 = new JDialog(对象名1,JDialogmodel);
JDialogmodel为指定模态模式,为Boolean类型,true为模态对话框,false为非模态对话框(默认)。JDialog 对象名2 = new JDialog(对象名1,"JDialogTest",JDialogmodel);
可综合设置。
2.设置关闭窗口时的默认操作:setDefaultCloseOperation()方法
对象名2.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
JDialog.EXIT_ON_CLOSE为关闭默认属性,还有其他属性,之后接触。
3.设置窗口尺寸及显示位置:
setSize()方法设置窗口尺寸,
setLocation()方法设置窗体显示位置,setBounds()方法可综合设置。
对象名2.setSize(width,height);
对象名2.setLocation(pX,pY);
对象名2.setBounds(pX,pY,width,height);
4.展示JDialog窗口,即让窗口可见:
对象名2.setVisible(true);
布局管理器:
Swing组件不能单独存在,必须放置与容器当中,而组件在容器中的位置和尺寸都是由布局管理器来决定的,常用布局管理器有:
BorderLayout(边界布局管理器)
BorderLayout(边界布局管理器):将容器(JFrame或JDialog等窗口)划分为5个区域(
页头(PAGE_START),
页尾(PAGE_END),
行首(LINE_START),
行尾(LINE_END),
中部(CENTER)
)
组件可以放在这5个区域的任意位置,当向BorderLayout布局管理器的容器中添加组件时,需要使用add(Component comp,Object constraints)方法。
comp表示要添加的组件对象,constraints指定将组件添加到布局中的位置,为Object类型。
这里我们在JFrame容器窗口基础上创建并设置:
1.先指定窗体中的布局管理器为BoarderLayout:使用setLayout()方法
对象名1.setLayout(new BorderLayout());
2.创建按钮组件:初始化JButton对象;JButton 对象名3 = new JButton("PAGE_START");
PAGE_START为按钮组件中的显示文字。
3.将创建好的按钮组件添加到窗体中,并设置按钮所在区域;
对象名1.add(对象名3,BorderLayout.PAGE_START);
BorderLayout.PAGE_START中PAGE_START可改为AGE_END,LINE_START,LINE_END,CENTER等属性。
还可以使用BorderLayout.NORTH指定位置,NORTH可改为SOUTH,EAST,WEST,CENTER指定。
如果不指定那个区域,则默认添加到CENTER区域,并且每个区域只能放一个组件,如果向一个区域中添加多个组件时,后放入的组件会进行覆盖。
FlowLayout(流式布局管理器)
FlowLayout(流式布局管理器):将组件按从左往右的顺序放置,当达到容器的边界时,会自动将组件放到下一行的开始位置,这些组件可以按左对齐、居中对齐(默认)、向右对齐的方式排列。
这里我们在JFrame容器窗口基础上创建并设置:
当向FlowLayout布局管理器的容器中添加组件时,先指定窗体中的布局管理器为FlowLayout:使用setLayout()方法。
有三个构造方法
1.
对象名1.FlowLayout(new FlowLayout());
此时组件默认居中对齐,水平、垂直间距默认为5个单位。
2.
对象名1.FlowLayout(new FlowLayout(int align));
指定组件相对于容器的对齐方式,水平、垂直间距默认为5个单位。
3.
对象名1.FlowLayout(new FlowLayout(int align,int hgap,int vgap));
指定组件相对于容器的对齐方式,指定水平间距、垂直间距,对齐方式有FlowLayout.LEFT,FlowLayout.CENTER,FlowLayout.RIGHT。
创建按钮组件:初始化JButton对象
JButton 对象名3 = new JButton("按钮name");
按钮name为按钮组件中的显示文字。
将创建好的按钮组件添加到窗体中,并设置按钮所在区域。
对象名1.add(对象名3);
GridLayout(网格布局管理器)
GridLayout(网格布局管理器):使用容器纵横线将容器分成n行m列大小相等的网格,每个网格中可以添加组件。添加到容器中的组件首先放置在第一行第一列的位置的网格中,然后在第一行网格中从左往右依次放置其他组件,行满后,继续在下一行中从左往右设置组件。
这里我们在JFrame容器窗口基础上创建并设置:
当向GridLayout布局管理器的容器中添加组件时,先指定窗体中的布局管理器为GridLayout:使用setLayout()方法。
有三个构造方法
1.
对象名1.GridLayout(new GridLayout());
此时组件默认只有一行,每个组件占一列。
2.
对象名1.GridLayout(new GridLayout(int rows,int cols));
指定容器的行数和列数。
3.
对象名1.GridLayout(new GridLayout(int rows,int cols,int hgap,int vgap));
指定容器的行数和列数,指定组件之间的水平间距、垂直间距。
创建按钮组件:初始化JButton对象
JButton 对象名3 = new JButton("按钮name");
按钮name为按钮组件中的显示文字。
将创建好的按钮组件添加到窗体中,并设置按钮所在区域。
对象名1.add(对象名3);
补充:
按钮也可以修改控制其大小,但是使用setSize()方法不起作用,应使用setPreferredSize()方法。
对象名3.setPreferredSize(new Dimension(width,height));
Swing事件处理机制:
事件处理机制:Swing组件中的事件处理专门为响应用户的操作。如单击鼠标、按下键盘等;
在Swing事件处理过程中,主要涉及三类对象:
1.事件源(Event Source):事件发生的场所,通常就是产生事件的组件。例如窗口、按钮、菜单等。
2.事件对象(Event):封装了CUI组件上发生的特定事件(通常就是用户的一次操作)。
3.监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出相应处理的对象(对象中包含事件处理器)。
事件源(组件)、事件对象、外部动作、监听器(含处理器)之间的紧密联系:
1.将监听器注册到事件源。
2.外部动作触发事件源上的事件。
3.事件源(组件)产生事件对象并传送事件对象。
4.监听器(含处理器)接收事件对象,激活事件处理器,实现预定功能。
实现Swing事件处理的主要步骤如下:
(1).创建事件源。除了一些常见的按钮、键盘等组件可以作为事件源外,包括JFrame窗口在内的顶级容器也可以作为事件源,事件源是一个组件。
(2).自定义事件监听器。根据要监听的事件源创建指定类型的监听器进行事件处理,该监听器是一个特殊的Java类,必须实现XXXListener接口(根据组件触发的动作进行区分,如WindowListener用于监听窗口事件,ActionListener用于监听动作事件)。
(3).为事件源注册监听器。使用addXXXListener()方法为指定事件源添加特定类型的监听器。当事件源上发生监听的事件后,就会触发绑定的事件监听器,然后由监听器中的方法进行相应处理。
Swing常用事件处理:
窗体事件(WindowEvent)、
鼠标事件(MouseEvent)、
键盘事件(KeyEvent)、
动作事件(ActionEvent)、
焦点事件、
文档事件(DocumentEvent)、
类项/项目事件(ItemEvent)。
窗体事件(WindowEvent)
1.窗体事件(WindowEvent):大部分窗体都需要使用Window窗体对象作为最外层的容器,可以说窗体对象是所有GUI应用程序的基础,应用程序通常都是将其他组件直接或间接地添加到窗体中。
当对一个窗体进行操作时,例如,窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件,Java提供了一个WindowEvent类用于表示窗体事件。
在应用程序中,当对窗体事件进行处理时。
1.定义一个实现了WindowListener接口的类作为窗体监听器。
2.通过addWindowListener()方法将窗体对象与窗体监听器进行绑定。
具体如下:
这里我们为JFrame容器窗口添加窗口监听器:使用内部类创建WindowListener实例对象。
对象名1.addWindowListener(new WindowListener(){
public void windowOpened(WindowEvent e){
//窗体打开事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowIconified(WindowEvent e){
//窗体图标化事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowDeiconified(WindowEvent e){
//窗体取消图标化事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowDeactivated(WindowEvent e){
//窗体停用事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowClosing(WindowEvent e){
//窗体正在关闭事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowClosed(WindowEvent e){
//窗体关闭事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void windowActivated(WindowEvent e){
//窗体激活事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
});
鼠标事件(MouseEvent)
鼠标事件:在图形界面中,用户会经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等,Java中提供了一个MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件。
当对鼠标事件进行处理时。
1.定义一个实现了MouseListener接口的类作为窗体监听器,也可以通过继承适配器MouseAdapter类来实现。
2.通过addMouseListener()方法将窗体对象与窗体监听器进行绑定
具体如下:
这里我们为按钮添加鼠标事件监听器:
对象名3.addMouseListener(new MouseListener(){
public void mouseReleased(MouseEvent e){
//鼠标放开事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void mousePressed(MouseEvent e){
//鼠标按下事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void mouseExited(MouseEvent e){
//鼠标移出按钮区事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void mouseEntered(MouseEvent e){
//鼠标进入按钮区事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
public void mouseClicked(MouseEvent e){
//窗体完成单击事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
if(e.getButton()==MouseEvent.BUTTON1){
//窗体左击事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
if(e.getButton()==MouseEvent.BUTTON3){
//窗体右击事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
if(e.getButton()==MouseEvent.BUTTON2){
//窗体中键单击事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
}
});
键盘事件(KeyEvent)
键盘事件:在图形界面中,如键盘按下、释放等,这些操作被定义为键盘事件。Java中提供了一个KeyEvent类表示键盘事件。
当对KeyEvent事件进行处理时
1.定义一个实现了KeyListener接口的类作为窗体监听器,也可以通过继承适配器KeyAdapter类来实现。
2.通过addKeyListener()方法将窗体对象与窗体监听器进行绑定
创建文本框对象,为JTextField类:
JTextField 对象4 = new JTextField();
具体如下:
这里我们为文本框添加键盘事件监听器:
对象名4.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e){
//键盘按下事件
char keyChar = e.getKeyChar();
//获取对应的键盘字符
int keyCode = e.getKeyCode();
//获取对应的键盘代码
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
});
动作事件(ActionEvent)
动作事件:它不代表某类事件,只是表示一个动作发生了。例如在关闭一个文件时,可以通过键盘关闭,也可以通过鼠标关闭。只要是对关闭按钮进行操作,即触发了动作事件。在Java中,动作事件用ActionEvent类表示。
当对动作事件进行处理时:
1.定义一个实现了ActionListener接口的类作为窗体监听器。
2.通过addActionListener()方法将窗体对象与窗体监听器进行绑定。
监听器对象在监听动作时,不会像鼠标事件一样处理鼠标的移动和单击的细节,二是去处理类似于"按钮按下"这样"有意义"的事件
这里我们为按钮添加动作事件监听器:
对象名3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//按钮单击事件
System.out.println("处理时所显示的信息");
//当发生该事件时的处理信息
}
});
Swing常用组件:
Swing常用组件:这些组件被称之为中间容器,不能单独存在,只能放置在顶级窗口容器中,即将中间容器加载入窗口中
面板组件:
一. 最常见的两种面板组件:JPanel和JscrollPane
JPenal面板组件
JPenal面板组件无边框,不能被放大、缩小、移动、关闭。它的默认布局管理器是流式布局管理器(FlowLayout)。
可以使用JPanel带参数的构造函数JPanel(LayoutManager layout)或者它的setLayout()方法为其定制布局管理器,
JPanel面板组件类没有包含多少特殊的组件操作方法,多数是从其父类(如Container)继承过来的。
使用方法:
定义一个JPanel面板组件:
JPanel 对象名5 = new JPanel();
在JPanel面板中添加按钮
对象5.add(对象4);
JScrollPane面板组件
JScrollPane面板组件是带有滚动条的面板容器,而且这个面板只能添加一个组件,如果想从JScrollPane面板中添加多个组件,应该先将这多个组件添加到某个组件当中,然后再将这个组价添加到JScrollPane中。
常用构造方法:JScrollPane()
:
创建一个空的JScrollPane面板。JScrollPane(Component view)
:
创建一个显示指定组件的JScrollPane面板,只要组件内容超过视图大小就会显示水平和垂直滚动条。JScrollPane(Component view,int vsbPolicy,int hshPolicy)
:
创建一个显示指定容器,并具有指定滚动条策略的JScrollPane。参数vsbPolicy和hshPolicy分别表示垂直滚动条策略和水平滚动条策略。
除了直接在构造方法中设置,也可以调用其方法进行设置:void setHorizontalBarPolicy(int policy)
:
指定水平滚动条策略,即水平滚动条何时显示在滚动面板上。
void setVerticalBarPolicy(int policy):
指定垂直滚动条策略,即垂直滚动条何时显示在滚动面板上。void setViewportView(Component view)
:设置在滚动面板显示的组件。
可在ScrollPaneConstants接口中声明多个常量属性用来设置不同的滚动策略。直接使用ScrollPaneConstants接口
。ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
:
当填充的组件视图超过客户端窗口大小时,自动显示垂直放行滚动条(JscrollPane组件默认值)。
1.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED:当填充的组件视图超过客户端窗口大小时,自动显示水平放行滚动条(JscrollPane组件默认值)。
2.ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS:无论填充的视图组件大小,始终显示竖直放行滚动条。
3.SrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS:无论填充的视图组件大小,始终显示水平放行滚动条。
4.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER:无论填充的视图组件大小,始终不显示竖直放行滚动条。
5.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER:无论填充的视图组件大小,始终不显示水平放行滚动条。
使用方法:
定义一个JScrollPane面板组件:
JScrollPane 对象名6 = new JScrollPane();
设置水平滚动条策略:
对象名6.setHorizontalBarPolicy(
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
在JScrollPane面板中添加按钮
对象6.add(对象4);
设置JPanel面板在滚动面板JScrollPane中显示
对象名6.setViewportView(对象名5);
实现这些之后,最终需要将这些加入JFrame等顶级容器中
对象名1.add(对象名6);
文本组件:
用于接收用户输入信息,其中包括文本框(JTextField)、文本域(JTextArea)等,它们都有一个共同父类JTextComponent。
该抽象类JTextComponent提供了文本组件常用方法:
String String getText():返回文本组件中所有的文本内容
String getSelectedText():返回文本组件中选定的文本内容
void selectAll():在文本组件中选中所有内容。
void setEditable():设置文本组件为可编辑或者不可编辑状态。
void setText(String text):设置文本组件内容。
void replaceSelection(String content):用给定的内容替换当前选定的内容。
JTextField
JTextField文本框,只能接收单行输入。
常用构造方法:JTextField()
:创建一个空文本框,初始字符串为null。
JTextField(int columns):创建一个具有指定列数的文本框,初始字符串为null。JTextField(String text)
:创建一个显示指定初始字符串的文本框。JTextField(int columns,String text)
:创建一个具有指定列数,并显示指定初始字符串的文本框。
创建JTextField文本框时,通常指定文本框的列数,而使用第二个或第四个构造方法。
JTextField有一个子类JPasswordField,它表示一个密码框,只能接受用户单行输入,但是在此框中不显示用户输入的真实信息,而是通过显示指定的回显字符作为占位符。新创建的密码框默认的回显字符为"*",JPasswordField构造方法与其父类相似。
使用方法:
创建一个JTextField文本框,用来输入单行信息
JTextField 对象4 = new JTextField();
这里我们在按钮中进行操作,为按钮添加监听事件
JButton 对象3 = new JButton("发送");
对象3.addActionListener(new ActionListener(){
String content = 对象4.getText();
//判断输入信息是否为空
if(content!=null&&!content.trim.equals("")){
//如果不为空,将输入文本追加到聊天窗口
showArea.appens("本人输入信息:"+content+"\n");
}else{
//如果为空,提示聊天信息不能为空
showArea.appens("输入信息不能为空:"+"\n");
}
对象4.setText(""); //将输入的文本域内容置空
});
JTextArea
JTextArea文本域,能接收多行输入。
常用构造方法:JTextArea()
:创建一个空的文本域JTextArea(String text)
:创建显示指定初始字符串的文本域。JTextArea(int rows,int columns)
:创建具有指定行和列的空的文本域。JTextArea(String text,int rows,int columns)
:创建显示指定初始字符串的文本域并指定了行和列的空的文本域。
使用方法:
创建一个JTextArea文本域,用来显示多行信息
JTextArea 对象7 = new JTextArea(12,34);
这里我们对在滚动面板中操作,将JTextArea文本域作为JScrollPane的显示组件
对象7.setEditable(false);设置文本域不可编辑。
标签组件:
标签组件:仅供展示的标签组件,即向用户展示的文本内容被编辑,Swing中标签组件主要有Jlabel。
JLabel组件
JLabel组件:可用于显示文本、图像,还可以设置标签内容的垂直和水平对齐方式。
JLabel组件中包含多个构造方法:JLabel();
创建无图像并且其标题为空字符串的JLabel实例。JLabel(Icon image);
创建具有指定的图像的JLabel实例。JLabel(Icon image,int horizontalAlignment);
创建具有指定的图像、水平对齐方式的JLabel实例,Icon image放置url路径,尽量将文本与图片放置在主类的同一级文件夹下。JLabel(String text);
创建具有指定文本的JLabel实例。JLabel(String text,Icon image,int horizontalAlignment);
创建具有指定文本、图像、水平对齐方式的JLabel实例。JLabel(String text,int horizontalAlignment);
创建具有指定文本和水平对齐方式的JLabel实例。
在使用JLabel组件时,可通过不同构造方法进行初始化化设置,也可以通过JLabel组件的一些常用方法进行设置。
具体用法:
创建一个JLabel组件,用来展示图片
JLabel 对象8 = new JLabel();
//创建一个ImageIcon图标组件
ImageIcon 对象9 = new ImageIcon("url路径");
//设置图片大小尺寸
Image 对象10 = 对象9.getImage();
对象10 = 对象10.getScaledInstance(300,150,Image.SCALE_DEFAULT);
对象9.setImage(对象10);
将ImageIcon组件添加到JLabel中
对象8.setIcon(对象9);
在JPanel面板中加入JLabel标签组件
JPanel 对象名5 = new JPanel();
对象名5.add(标签组件对象);
在JFrame顶级容器中加入JLabel和JPanel组件
对象1.add(对象8);
对象1.add(对象5);
setFont(new Font("字体",Font.BOLD,size))可设置字体样式。
按钮组件:
按钮组件:JButton、JCheckBox、JRadioButton等,它们都是抽象类AbstractButton类的直接或间接子类,在AbstractButton类中提供了一些重要方法。Icon getIcon()
获取按钮的图标。void setIcon()
设置按钮的图标。String getText()
获取按钮的文本。void setText(String text)
设置按钮的文本。void setEnable(boolean b)
设置按钮是否可用。Boolean setSelected(boolean b)
设置按钮是否为选中状态。boolean isSelected()
返回按钮的状态(TRUE为选中,FALSE为未选中)。
JButton按钮组件
具体用法:
创建JButton按钮组件对象
JButton 对象名3 = new JButton("PAGE_START");
PAGE_START为按钮组件中的显示文字
在JScrollPane面板中添加按钮
对象6.add(对象4);
JCheckBox按钮组件
JCheckBox按钮组件被称为复选框组件,它有选中和未选中两种状态,通常复选框会有多个,用户可以选中其中一个或者多个。
常用构造方法:JCheckBox();
创建一个没有文本信息,初始化状态未被选中的复选框。JCheckBox(String text);
创建一个有文本信息,初始化状态未被选中的复选框。JCheckBox(String text,Boolean selected);
创建一个有文本信息,初始化状态被选中的复选框。
同样可通过对象调用上述通用方法进行设置
具体用法:
创建复选框对象
JCheckBox 对象11 = new JCheckBox("信息");
为复选框定义并添加监听器
对象11.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent){
方法体;//public方法内为需要处理的信息
}
});
向JPanel面板中添加复选框
对象5.add(对象11);
JRadionButton按钮组件
JRadionButton按钮组件被称为单选按钮组件,只能被选中一个,当一个按钮被选中时,先前被选中的按钮就需要自动取消选中,但是JRadionButton组件本身并不具备这种功能,因此若想实现JRadionButton按钮之间的互斥,需要使用javax.seing.ButtonGroup类,ButtonGroup是一个不可见的组件,不需要将其增加到容器中显示,只是在逻辑上表示一个单选按钮组。将多个JRadioButton按钮添加到同一个单选按钮组中就能实现JRadioButton按钮的单选功能。
常用构造方法:JRadioButton();
创建一个没有文本信息、初始状态未被选中的单选框。JRadioButton(String text);
创建一个带有文本信息、初始状态未被选定的单选框。JRadioButton(String text,Boolean selected);
创建一个具有文本信息,并指定初始状态(选中/未选中)的单选框。
具体用法:
创建单选框对象:
JRadioButton 对象12 = new JRadioButton("文字信息");
JRadioButton 对象13 = new JRadioButton("文字信息");
将两个JRadioButton单选按钮组件添加到同一个ButtonGroup组中,创建一个ButtonGroup组对象
ButtonGroup 对象14 = new ButtonGroup();
对象14.add(对象12);
对象14.add(对象13);
为单选框定义并添加监听器
对象12.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent){
方法体; //public方法内为需要处理的信息
}
});
向JPanel面板中添加单选框
对象5.add(对象12);
对象5.add(对象13);
下拉框组件:
JComboBox组件
JComboBox组件:被称为下拉框或者组合框,它将所有选项折叠在一起,默认显示是迪欧一个添加的选项。当用户单击下拉框时,会出现下拉式选择列表,用户可以从中选择一项并显示。
JComboBox下拉框组件分为可编辑和不可编辑的两种形式,对于不可编辑的下拉框,用户只能选择现有的选项列表。对于可编辑的下拉框,用户即可选择现有的选项列表,也可输入自己输入新的内容。需要注意的是,自己输入的内容只能作为当前项显示并不会添加到下拉框的选项列表里。
常用构造方法JComboBox();
创建一个没有可选项的下拉框。JComboBox(Object[] items);
创建一个下拉框,将Object数组中的元素作为下拉框的下拉列表选项。JComboBox(Vector items);
创建一个下拉框,将Vector集合中的元素作为下拉框的下拉列表选项。
常用方法void addItem(Object anObject)
为下拉框添加选项。void insertItemAt(Object anObject,int index)
在指定的索引处插入选项。Object getItem(int index)
返回指定索引处选项,是一个选项的索引为0。int getItemCount()
返回下拉框中选项的数目。Object getSelectedItem()
返回当前所选项。void removeAllItems()
删除下拉框中所有的项。void removeItem()
删除下拉框中指定选项。void removeItemAt()
删除下拉框指定索引处的选项。void setEditable(Boolean aFlag)
设置下拉框的选项是否可编辑,aFlag为true则可编辑,为false则不可编辑。
具体用法:
创建一个JComboBox对象:
JComboBox<String> 对象15 = new JComboBox<>();
为下拉框组件添加选项
对象15.addItem("选项内容");
为下拉框定义并添加监听器
对象15.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent){
方法体; //public方法内为需要处理的信息
}
});
向JPanel面板中添加单选框
对象5.add(对象15);
菜单组件:
下拉式菜单:
下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、JMenu(菜单)、JMenuItem(菜单选项)。
JMenuBar菜单栏
JMenuBar表示一个水平的菜单栏,它用来管理一组菜单,不参与同用户的交互式操作,菜单栏可以放在容器的任何位置,但通常情况下会使用顶级容器(如JFrame、JDialog)的setJMenuBar()
方法将它放置在顶级容器的顶部,JMenuBar有一个无参构造方法,创建菜单栏时,只需要使用new关键字创建JMenuBar对象即可,创建完菜单栏对象后,可以调用它的add(JMenu c)
方法为其添加JMenu菜单。
JMenu菜单
JMenu表示一个菜单,它用来整合管理菜单项,菜单可以是一个单一层次的结构,也可以是多层次的结构。大多数情况下,会使用JMenu(String text)
构造函数创建JMenu菜单,参数表示菜单上的文本内容。
JMenu中的常用方法:JMenuItem add(JMenuItem menuItem):
将菜单栏添加到菜单末尾,返回此菜单项。void addSeparator():
将分隔符添加到菜单的末尾。JMenuItem getItem(int pos):
返回指定索引处的菜单项,第一个菜单项的索引为0。int getItemCount():
返回菜单上的项数,菜单栏和分隔符都计算在内。JMenuItem insert(JMenuItem menuItem,int pos):
在指定索引处插入菜单项。void insertSeparator(int pos):
在指定索引处插入分隔符。void remove(int pos):
从菜单栏中移除指定索引处的菜单项。void remove(JMenuItem menuItem):
从菜单栏中移除指定的菜单项。void removeAll():
从菜单栏中移除所有菜单项。
JMenuItem菜单选项
JMenuItem表示一个菜单项,它是菜单系统中最基本的组件。例如在建立菜单栏时,通常会使用JMenuItem(String text)这个构造方法为菜单项指定文本内容。
JMenuItem继承自AbstractButton类,因此可以把它看做是一个按钮,如果使用无参构造方法创建了一个菜单项,则可以调用从AbstractButton类中继承的setText(String text)
和setICon()
方法为其设置文本和图标。
具体用法为:
创建菜单栏组件JMenuBar
JMenuBar 对象16 = new JMenuBar();
创建菜单组件并加入菜单栏中
JMenu 对象17 = new JMenu("菜单文本");
JMenu 对象18 = new JMenu("菜单文本");
对象16.add(对象名17);
对象16.add(对象名18);
创建菜单项组件并加入到菜单栏中
JMenuItem 对象19 = new JMenu("菜单项文本");
JMenuItem 对象20 = new JMenu("菜单项文本");
对象17.add(对象19);
菜单设置分隔符
对象17.addSeparator();
对象17.add(对象20);
可为JMenuItem对象添加动作监听器
最后在JFrame窗口容器中加入JMenuBar菜单组件
对象名1.setJMenuBar(对象16);
【拓展】弹出式菜单:
在Windows桌面鼠标右击便会出现一个菜单,这就是弹出式菜单。在Swing组件中,弹出式菜单可以用JPopupMenu来实现。
JPopupMenu弹出式菜单和下拉式菜单一样都是通过调用add()方法添加JMenuItem菜单项,但是它默认不可见,如果想要显示出来,则必须调用它的show(Component Invoker,int x,int y)
方法,该方法中参数Invoker表示JPopupMenu菜单显示位置的参考组件,x和y表示Invoker组件坐标空间中的一个坐标,显示的是JPopupMenu菜单的左上角坐标。
具体用法:
创建JPopupMenu弹出式菜单:
JPopupMenu 对象19 = new JPopupMenu();
创建菜单项组件并加入到弹出式菜单栏中
JMenuItem 对象19 = new JMenu("菜单项文本");
JMenuItem 对象20 = new JMenu("菜单项文本");
对象17.add(对象19);
菜单设置分隔符
对象17.addSeparator();
对象17.add(对象20);
为JFrame窗口添加鼠标监听器:
对象名1.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e){
//窗体完成单击事件
if(e.getButton()==MouseEvent.BUTTON3){
//窗体右击事件
对象19.show(e.getComponent(),e.getX(),e.getY())
//当发生该事件时的处理信息
}
}
});
本次主要是讲述Swing组件的理论知识,具体应用静候下期。