GUI
图形用户界面,也可称为Swing
常用容器:
JFrame:
窗口,不能添加组件,在Swing中程序中创建
两种创建窗口的方式
方式1:直接创建JFrame对象
public class FrameDemo {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
//因为创建的窗口默认不可见,所以要通过setVisible()设置窗口可见
jFrame.setVisible(true);//设置窗口可见
}
}
方式2:创建一个类继承JFrame,在该类的构造方法中对窗口进行设置,然后在main方法中直接创建该类的对象即可
public class LoginFrameDemo extends JFrame {
public LoginFrameDemo() throws HeadlessException {
this.setSize(500, 500);//设置窗口大小
this.setTitle("欢迎登录");//设置窗口名称
//this.setLocation(500, 200);//设置初始窗口位置
this.setLocationRelativeTo(null);//设置窗口在屏幕中居中
this.setResizable(false);//设置窗口大小不可更改
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口操作
this.setVisible(true);//设置窗口可见,放在最后
}
public static void main(String[] args) {
LoginFrameDemo loginFrameDemo = new LoginFrameDemo();
}
}
常用方法:
void setSize(int width, int height)//设置窗口大小
void setVisible(boolean b)//设置窗口可见,放在最后
void setTitle(String title)//设置窗口名称
void setResizable(boolean resizable)//设置窗口大小不可更改
void setLocation(int x,int y)//设置初始窗口位置
void setLocationRelativeTo(null);//设置窗口在屏幕中居中
void setDefaultCloseOperation(int operation)//设置关闭窗口操作
JPanel:
面板,一般添加到窗口中,用来添加组件
构造方法:
new JPanel();//默认布局是流式布局
new JPanel(new BorderLayout());//创建面板并设置布局为边界布局
常用方法:
void setBackground(Color bg)//设置面板背景颜色
void setLayout(LayoutManager mgr)//设置面板布局,也可在构造方法中设置
面板布局有三种:
1、流式布局,也是默认布局 。流式布局把面板分成一行一行的,在每一行就可以摆放组件,设置摆放的位置(对齐方式)
2、边界布局,把一个面板分为五个区域,东、西、南、北、中。中间是必须的,其他的4个区域可选,每个区域中可以添加其他的组件(面板,组件在此区域内会最大化)
3、网格布局,可以设置面板分为n行n列,可以从第一行第一列开始向表格中添加组件
常用组件:
JLabel标签组件:
容纳文字和图像内容,为别的组件进行标识
构造方法:
new JLabel();//创建标签组件
new JLabel(“账号”);//创建标签组件并设置标签上的内容
常用方法:
void setText(String text) //设置标签上的内容
String getText() //获得标签上的内容
setFont(new Font(“宋体”,Font.BOLD, 18))//设置字体格式
JTextField单行文本框组件:
构造方法:
new JTextField(15);//创建单行文本框组件,并设置列宽
new JTextField(“aaa”,15);//创建单行文本框组件,并设置初值,设置列宽
常用方法:
void setText(String text) //设置文本框中的内容
String getText() //获得文本框中的内容
void setEditable(boolean b) //设置文本框是否可以编辑
setColumns(20);// 设置列宽
JPasswordField密码框组件:
与单行文本框相似,但是输入内容不可见
构造方法:
new JPasswordField(15);//创建密码框组件,并设置列宽
new JPasswordField(“123”,15);//创建密码框组件,并设置初值,设置列宽
常用方法:
char[] getPassword()//获取密码框内容
JTextArea多行文本框组件:
构造方法:
new JTextArea(5,20);//创建多行文本框,并设置行、列
常用方法:
setLineWrap(true);//设置自动换行
append();//添加内容到末尾
注意:创建多行文本框后,还需要创建滚动面板(new JScrollPane();),因为要是输入的内容超过指定行数,文本框会自动增加行数,会损坏设定好的布局,因此闯将滚动面板来确保布局不会被改变。
JButton按钮组件:
构造方法:
new JButton(“登录”);创建一个带文本的按钮
常用方法:
jButton.setSize(100, 50);//设置按钮大小
jButton.setBackground(Color.PINK);//设置按钮背景颜色
jButton.setEnabled(false);//设置按钮不可用
jButton.setToolTipText(“点击登录”);//设置鼠标悬浮提示信息
菜单相关组件
JMenuBar菜单栏组件:
构造方法:
new JMenuBar();
常用方法:
add(jMenu1);
JMenu菜单组件:
构造方法:
new JMenu(“文件”);//创建名为文件的菜单
常用方法:
add(jMenuItem1);
JMenuItem菜单子项组件:
构建方法:
new JMenuItem(“新建”);//创建名为新建的菜单子项
添加监听事件:
示例:给一个按钮添加监听事件
/*
例如对一个按钮添加监听事件,如果单独创建一个外部类或内部类,那么这个类只被该按钮使用,就比较麻烦,所以,就创建一个匿名内部类,在哪使用在哪创建。
匿名内部类,看似new了一个接口,实际上是有一个没有名字的类实现了接口
*/
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//此处写需要做的事
}
});
内部类:
1、什么是内部类?
在一个类的内部定义的类称为内部类。
/*
类A称为外部类或宿主类
类B称为内部类或嵌套类
*/
public class A{
class B{
}
}
2、什么时候会用到内部类?
某些功能只在某个类中自己使用,没有必要定义一个外部类(没有意义,其他地方根本用不到),所以就定义在某个类的内部使用即可。
内部类可直接使用外部类中的成员,私有成员也可以使用
3、内部类的分类
(1)成员内部类,也是在外部类的成员位置
(2)静态内部类,static修饰的内部类,只能使用外部类中的静态成员
(3)局部内部类,在外部类的某一个方法中或代码块中
(4)匿名内部类
演变过程:
外部类—>内部类—>匿名内部类
匿名内部类是为了在内部类的基础上,进一步简化代码(有时候,定义的内部类只被使用一次,创建一个类就比较麻烦)
Java可以提供一个没有名字的类,实现某个接口,创建一个没有名字的类的对象,在哪使用就在哪创建即可。
4、内部类的意义
封装,使用内部类实现多继承。