Java学习笔记之Swing.docx
《Java学习笔记之Swing.docx》由会员分享,可在线阅读,更多相关《Java学习笔记之Swing.docx(28页珍藏版)》请在冰豆网上搜索。
![Java学习笔记之Swing.docx](https://file1.bdocx.com/fileroot1/2023-2/23/10f37684-4000-4a81-91d5-da27ad094e66/10f37684-4000-4a81-91d5-da27ad094e661.gif)
Java学习笔记之Swing
1.AWT—AbstractWindowingToolkit抽象窗口工具包
是Java用来建立和设置Java图形用户的基本工具。
2.现在基本上不用awt,而用Swing
3.JFrame框架窗体既是一个组件,也是一个容纳其他组件的容器。
在开发图形化程序时,需要先创建这个容器,然后把其他组件加进去,就可以进行显示了。
我们在创建form的时间,一定要加上这句话:
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
否则窗体将关不掉。
WindowConstants接口后面有四个属性:
属性名
说明
EXIT_ON_CLOSE
关闭窗口并退出程序
DISPOSE_ON_CLOSE
关闭并销毁当前窗口,但不退出程序
DO_NOTHING_ON_CLOSE
点关闭按钮不做任何操作(默认是它)
HIDE_ON_CLOSE
隐藏但不销毁当前窗体
4.JFrameframe=newJFrame("第一个窗体");
通过这样创建窗体是不可见的,需要加入一句显示窗体的语句:
frame.setVisible(true);
JFrame的方法:
方法名
说明
frame.getContentPane()
获得窗体对象的容器
Frame.setIconImage(img)
设置窗体标题栏上显示的图标
Frame.setJMenuBar(menuBar)
设置窗体的菜单栏
Frame.setTitle
设置窗体的标题
Frame.setResizable(false)
设置窗体是否可以改变大小,false为不允许
Frame.setBounds(intx,inty,intwidth,intheight)
X和y指定左上角的位置,width和height指定窗体大小
Frame.setVisible(true)
设置窗体的可见性
Frame.validate()
使窗体容器及其所有子组件生效
Frame.setLocation(intx,inty)
设置窗体的显示位置
Frame.setSize(intwidth,intheight)
调整窗体的大小
上面是通过父类,调用了父类的构造函数创建了一个frame
上面这个是没有继承父类,通过自身创建了frame,易于理解。
packageaaa;
importjava.awt.Container;
importjavax.swing.*;
publicclassForm
{
JFrameframe;//在类中定义,易于被其他方法调用
Containercont;//在类中定义,易于被其他方法调用
publicForm(Stringname)//这里是最基本的东西,在创建对象实例form的时候,就自动调用这个构造函数创建了frame
{//这里的东西可以以后一点都不改动,要操作到其他方法中操作。
frame=newJFrame();
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frame.setTitle(name);//调用父类的方法
frame.setVisible(true);
frame.setBounds(100,100,400,400);
cont=frame.getContentPane();
//容器是有frame延伸出来的,本来就属于frame
}
publicvoidadd()//这个方法我们定义用于加入组件,和frame的创建分开出来,有好处
{
JLabellabel=newJLabel("label");
cont.add(label);
}
publicstaticvoidmain(String[]argv)
{
Formform=newForm("第一个窗体");
form.add();
}
}
5.窗体frame是最基本的,在里面就可以加入组件。
6.JDialog对话框窗体:
该类即使一个组件,同时也是一个容纳其他组件的容器,它是一个对话框窗体,也是窗体,就也可以容纳东西。
对话框窗体和窗体的设置一模一样。
JDialogdialog;
Containercontdialog;
dialog=newJDialog(frame,"titleofdialog");
//这里指定对话框窗体依附于窗体frame
contdialog=dialog.getContentPane();
dialog.setVisible(true);
dialog.setBounds(10,10,100,100);
dialog.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
对话框窗体不能最大化和最小化,同时,它必须依附JFrame而存在,就是说,如果frame被关闭了,它也就被关闭了。
dialog=newJDialog(frame,"titleofdialog",true);
第三个参数为模态参数,如果设为true,那么如果没有关闭dialog窗体就无法操作frame窗口。
7.窗体的布局。
7.1null绝对布局
绝对布局就是将指定的组件放置在容器中的绝对位置,每一个组件的具体位置我们自己固定设定。
7.2FlowLayout流布局
流布局为向容器中从左到右依次按程序加入组件,如果一行放不下,就放两行,如果两行不行,就再往下,依次类推。
FlowLayoutflowlay=newFlowLayout(FlowLayout.CENTER,30,10);
contframe.setLayout(flowlay);
上面的第一个参数是用于设定对齐的方式,有很多属性,CENTER代表居中。
对齐字段说明:
字段名
说明
CENTER
每一行组件都应该是居中的
LEADING
每一行组件都应该与容器方向的开始边对齐
LEFT
指示每一行组件都应该左对齐
RIGHT
指示每一行组件都应该是右对齐
TRAILING
指示每一行都应该与容器方向的结束边对齐
第二个参数是表示每两个组件间水平方向的间隔像素,默认都是5.
第三参数是表示上下两行的间隔像素,默认都是5
我们在调整窗体大小的时候,组件也能实现自动调整。
7.3BorderLayout边界布局
设置为边界布局的容器中,容器被认为东、西、南、北、中5个区域,并且每个区域只能放在一个组件,如果某个区域需要放在多个组件,可以先将这些组件放在比如一个面板上,然后把面板再放到这个区域里面。
容器窗体的默认布局是边界布局。
一开始可以不要,因为默认就是这个布局。
前者是:
BorderLayoutborderlay=newBorderLayout(10,10);
后者是没有参数的,没有参数默认为0.就是意味着水平垂直都没有间隔。
7.4GridLayout网格布局
网格布局就是分成若干行和列,分成若干个相等的矩形,每一个矩形放在一个组件。
7.4CardLayout卡片布局
将容器中每个组件都看做是一个卡片,在卡片布局的容器中每次只能显示一张卡片,门卡片的顺序就是添加的顺序,每一个添加的组件是一张卡片。
常用方法:
方法名
说明
Voidfirst(Container)
在容易中显示第一张卡片
Voidlast(Container)
在容器中显示最后一张卡片
Voidnext(Container)
在容器中显示下一张卡片
Voidprevious(Container)
在容器中显示上一张卡片
Voidshow(Container,Stringname)
在容器中显示具有指定名称的卡片
packageaaa;
importjava.awt.Container;
importjava.awt.*;//设置布局要导入这个包
importjavax.swing.*;
publicclassForm
{
JFrameframe;//在类中定义,易于被其他方法调用
Containercontframe;//在类中定义,易于被其他方法调用
CardLayoutcardlay;//新建布局
publicForm(Stringname)//这里是最基本的东西,在创建对象实例form的时候,就自动调用这个构造函数创建了frame
{//这里的东西可以以后一点都不改动,要操作到其他方法中操作。
frame=newJFrame();
frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
frame.setTitle(name);//调用父类的方法
frame.setVisible(true);
frame.setBounds(10,10,400,400);
contframe=frame.getContentPane();
//容器是有frame延伸出来的,本来就属于frame
cardlay=newCardLayout();//实例化布局
contframe.setLayout(cardlay);//设定布局
}
publicvoidadd()//这个方法我们定义用于加入组件,和frame的创建分开出来,有好处
{
JButtonbtn1=newJButton("button1");
JButtonbtn2=newJButton("button2");
JButtonbtn3=newJButton("button3");
JTextFieldtext=newJTextField("textfield");
JLabellabel=newJLabel("lable");
JRadioButtonradio=newJRadioButton("radio");
JCheckBoxche=newJCheckBox("checkbox");
contframe.add(btn1);
contframe.add(btn2);
contframe.add(btn3);
contframe.add(label);
contframe.add(text);
contframe.add(radio);
contframe.add(che);
cardlay.first(contframe);//显示第一个卡片
}
publicstaticvoidmain(String[]argv)
{
Formform=newForm("第一个窗体");
form.add();
}
}
8.JPanel面板
JPanel也是一种容器,JPanel类在javax.swing包中,JPanel也可以设置各种布局,然后可以直接加组件,然后再把这个JPanel加入到frame的container中就可以了。
9.JScrollPane滚动窗格
有些时候,组件比较多,需要加入滚动条,也有比如文本域,在文字过多的时候,需要加入滚动条。
在Java中,通过JScrollPane滚动窗格使文本域能够产生滚动条。
有一个方法:
setViewportView(组件名)
用于设定到底是为什么加入滚动条
从中我们可以看出,我们不需要把文本域加入到容器中,因为文本域已经绑定到了滚动窗格中。
如上面所示,我们可以把面板当做以组件放在scrollpan中
10.常用组件
10.1图标Icon
可以通过ImageIcon类来创建图标
图标有三个方法
1)IntgetIconHeight()获得图标高度
2)IntgetIconWidth()获得图标宽度
3)VoidpaintIcon(container,Graphicsg,intx,inty)在指定位置上绘制图标
10.2图像图标ImageIcon
URLurl=Form.class.getResource("/image/picture.gif");
//Form是类名,图片要放在项目---src文件----image文件夹下,URL是包下的类
ImageIconimageicon=newImageIcon(url);
10.3Image图像
Image代表图像对象,可以通过imageicon类的getImage()方法获得,这个对象是可以用来设置为窗体图标的对象。
把frame的图标给改了,不要用.gif的图片。
10.3JLabel标签
Jlabel类有三个方法:
1)StringgetText()用与获得标签上显示的标题文本
2)VoidsetIcon(Iconicon)设置标签组件需要显示的图标
3)VoidsetText()设置标签所需显示的文本
JLabellabel=newJLabel("也可以添加文字");
也可以什么都不加,最后通过方法来加文字和图标。
10.4JButton按钮
URLurl=Form.class.getResource("/image/picture.png");
Iconicon=newImageIcon(url);
JButtonbut1=newJButton();
JButtonbut2=newJButton("文字");
JButtonbut3=newJButton(icon);
JButtonbut4=newJButton("文字",icon);
常用方法:
1)StringgetText();
2)VoidsetText(Stringtext);
3)VoidsetIcon(Iconicon);
4)VoidsetRolloverIcon(Iconicon);设置鼠标指向按钮时显示的图标。
10.5JTextField文本框
JTextFieldtext=newJTextField();
JTextFieldtext1=newJTextField(4);//创建有4列的文本框
JTextFieldtext2=newJTextField("这是文本框");
常用方法:
1)StringgetText()
2)VoidsetText(Stringtext);
3)VoidrequestFocus()//使文本获得焦点
10.6JPasswordField密码框
JPasswordFieldpassword=newJPasswordField();
JPasswordFieldpassword1=newJPasswordField(12);//具有十二列的密码框
JPasswordFieldpassword2=newJPasswordField("mima");
常用方法:
1)Char[]getPassword()获得密码并存在数组中
2)VoidsetEchoChar(charc)设置密码框显示字符
Password.setEchoChar(‘*’);
10.7JComboBox组合框
JComboBoxcombox=newJComboBox();
String[]data=newString[]{"aaa","bbb","ccc","ddd"};
DefaultComboBoxModelmodel=newDefaultComboBoxModel(data);//使用数组创建数据模型
JComboBoxcombox1=newJComboBox(model);
//利用数据模型创建组合框
combox1.setBounds(20,20,50,50);
常用方法:
1)addItem(object)为组合框添加选项
2)getItemCount()获得组合框中项的个数
3)getSelectedItem()获得组合框中当前选择的列表项
4)removeAllItems()移除全部列表项
5)voidremoveItem(object)移除指定名称的项
6)voidsetModel(model)为组合框设定模型
7)voidsetselectedItem(object)通过名称来设定显示哪一项
10.8JRadioButton单选按钮
常用方法:
1)getText();
2)setText(Stringtext);
3)voidsetSelected(Booleantrue/false)。
设置选择否
4)booleangetSelected()获得选择状态
按钮组:
所谓按钮组,就是只允许其中的一个选中
10.9JCheckBox复选框
常用方法:
1)getText();
2)setText();
3)voidsetSelected(Booleantrue/false)
4)BooleanisSelected();获得复选框的当前选择状态
10.10JTable表格
很多时候我们可以以向量中的元素作为单元格中显示的数据。
常用方法:
1)IntgetRowCount()获得表格中所显示数据的行数
2)IntgetSelectedColumn()获得表格中第一个选择列的索引,如果没有被选择的列,则返回-1
3)IntgetSelectedRow()
4)ObjectgetValueAt(introw,intcolumn)获得行和列索引的值
5)VoidsetAutoResizeModel(intmode)当需要调整表格大小时,使用哪一种自动调整模式
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
Mode字段和说明
字段名
说明
AUTO_RESIZE_OFF
关闭表格的自动调整模式,是使用水平滚动条时的必要设置。
AUTO_RESIZE_NEXT_COLUMN
调整某一列的宽度时,只对其下一列进行相反方向的调整
AUTO_RESEZE_SUBSEQUENT_COLUMNS
调整某一列的宽度时,按比例调整其后每一列的宽度,是默认设置
AUTO_RESIZE_LAST_COLUMN
在所有调整大小的操作中,只调整最后一列的宽度
AUTO_RESIZE_ALL_COLUMNS
在所有的调整大小的操作中,按比例调整表格中每一列的宽度
6)VoidsetSelectionMode(intselectionMode)将表的选择模式设置为只允许单个选择、单个连续间隔选择或多间隔选择模式
selectionMode字段和说明、
字段名
说明
SINGLE_SELECTION
设置只允许选择表格中的一行
SIGLE_INTERVAL_SELECTION
设置允许选择表格中连续多行数据
MULTIPLE_INTERVAL_SELECTION
设置可以随意选择表格中的多行数据
7)VoidsetValue(objectvalue,introw,intcolumn)
设置某一单元格的值。
11.菜单
11.1在Java中使用JMenuBar创建菜单栏
菜单栏的方法:
JMenuadd(JMuenmenu)在菜单栏中加菜单。
菜单栏是放菜单的地方,菜单是放菜单项的地方。
11.2菜单
菜单的方法:
1)JMenuItemadd(JMenuItemmenuItem)
向菜单中加入菜单项
2)VoidaddSepartor()将分隔符加入到菜单项的尾部
11.3菜单项
菜单项才是真正的菜单。
菜单项的常用方法:
setText()和setIcon().
12.工具栏
工具栏中可以放一些常用的按钮,方便操作,可以挪动
还可以拉出来成一个单独窗口,方便操作。
13.常用事件:
过程
1)创建ActionListener对象
2)调用addActionListener()方法为组件组成ActionListener对象作为监听器。
3)由外部动作触发组件
4)组件被触发后生成组件的动作事件
5)执行ActionListener对象的actionPerformed()方法,完成动作事件的处理
importjava.awt.event.*;
but.addActionListener(newActionListener(){
publicvoidactionPerformed(finalActionEventarg0)
{
System.exit(0);//退出系统
//我们就把按钮的按下后的操作写在这里面就可以了
}
});
至于具体的函数名称,我们可以通过SWT-Designer来直接双击获得。
下面这是一个通过SWT-Designer来设定直接获得的一些基本语句:
packageaaa;
importjava.awt.EventQueue;
publicclassformdesign{
privateJFrameframe;
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
formdesignwindow=newformdesign();
window.frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
}
/**
*Createtheapplication.
*/
publicformdesign(){
initialize();
}
/**
*Initializethecontentsoftheframe.
*/
privatevoidinitialize(){
frame=newJFrame();
frame.setBounds(100,100,450,300);frame.setDefaultCloseOperation(JFrame.EXIT