目录
GUI(Graphical User Interface)
swing
窗口(JFrame)
面板(JPanel)
流水布局(FlowLayout)
边界布局(BorderLayout)
编辑
网格布局(GridLayout)
按钮(JButton)
标签组件,用来设置文字(JLabel)
单行文本框组件(JTextField)
多行文本框组件(文本域)
带滚动条的面板
密码框(JPasswordField)
菜单栏 菜单 菜单项
菜单栏(JMenuBar)
菜单(JMenu)
菜单项(JMenuItem)
监听器(ActionListener)
为文本框添加事件监听
键盘处理事件
为组件添加事件处理程序
鼠标处理事件 共五种
为窗口添加事件监听
对话框
消息框
选择对话框
输入对话框
内部类
匿名内部类
GUI(Graphical User Interface)
图形用户界面——Java提供的图形用户界面
UI——用户界面
图形界面是方便用户操作的
swing
javax.swing包
包含了Java主要的图形界面的实现类
组件
容器组件——窗口,面板,对话框
功能组件——按钮 输入框,菜单……
容器的add()向容器中添加组件
窗口(JFrame)
需继承JFrame
创建窗口的常用方法
setTitle(String title):设置窗口的标题。
setSize(int width, int height):设置窗口的大小。
setLocation(int x, int y):设置窗口的位置。
setResizable(boolean resizable):设置窗口是否可调整大小。
setDefaultCloseOperation(int operation):设置窗口关闭时的操作。
add(Component comp):添加组件。
setVisible(boolean visible):设置窗口是否可见。
dispose():释放当前窗口
public class DemoFrame extends JFrame {
public DemoFrame() throws HeadlessException {
this.setTitle("小世界");//名称
this.setSize(300,300);//设置宽和高
//this.setLocation(200,400);//自定义坐标位置
this.setLocationRelativeTo(null);//水平垂直居中
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序
this.setResizable(false);//禁止窗口拖拽调整大小
this.setVisible(true);//让窗口显示 放在设置的最后一行
}
public static void main(String[] args) {
new DemoFrame();//创建一个窗口
}
}
面板(JPanel)
面板组件可以设置布局管理方式:布局管理器
流水布局(FlowLayout)
面板默认的布局方式
把组件放在一排,从左到右排放,一行占满后,重新开启一行
面板默认流式布局是水平居中的
JPanel jPanel = new JPanel(new FlowLayout());自动居中
JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));左对齐
JPanel jPanel = new JPanel(new FlowLayout(FlowLayout.LEFT,10,30));设置组件之间水平,垂直间距
jPanel.setBackground(new Color(255, 153, 2, 255));设置背景颜色
JPanel jPanel = new JPanel(new FlowLayout());//自动居中 默认是水平居中,上下左右为5个像素间距
jPanel.setBackground(new Color(255, 153, 2, 255));//设置面板背景颜色
JButton jButton1 = new JButton("按钮1");//创建一个按钮组件
JButton jButton2 = new JButton("按钮2");
jPanel.add(jButton1);
jPanel.add(jButton2);
//把面板添加到窗口上
this.add(jPanel);
边界布局(BorderLayout)
共五个区域,每个区域可以放置一个组件,并且占满整个区域
中间区域是必须的,其他区域可以根据需要使用
添加组件时,可以指定组件的位置,如果不指定,默认添加到中间区域
JPanel jPanel = new JPanel(new BorderLayout());
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
JButton jButton5 = new JButton("按钮5");
jPanel.add(jButton1,BorderLayout.NORTH);//上
jPanel.add(jButton2,BorderLayout.SOUTH);//下
jPanel.add(jButton3,BorderLayout.EAST);//右
jPanel.add(jButton4,BorderLayout.WEST);//左
jPanel.add(jButton5,BorderLayout.CENTER);//中
this.add(jPanel);
网格布局(GridLayout)
网格类似于一个表格,可以设置行数和列数
每个网格中只能放一个组件,占满整个区域
从第一行开始摆放,第一行占满后,再开启第二行
构造时先行后列
JPanel jPanel = new JPanel(new GridLayout(2,2));
JButton jButton1 = new JButton("按钮1");
JButton jButton2 = new JButton("按钮2");
JButton jButton3 = new JButton("按钮3");
JButton jButton4 = new JButton("按钮4");
jPanel.add(jButton1);
jPanel.add(jButton2);
jPanel.add(jButton3);
jPanel.add(jButton4);
this.add(jPanel);
按钮(JButton)
创建一个按钮组件
JButton jButton = new JButton("登录");
禁用按钮
jButton.setEnabled(false);
在按钮上进行提示
jButton.setToolTipText("点击登录");
标签组件,用来设置文字(JLabel)
JLabel jLabel = new JLabel("账号");
jLabel.setFont(new Font("楷体", Font.BOLD,20));//设置字体
jLabel.setForeground(new Color(20,10,10));//设置字体颜色
单行文本框组件(JTextField)
columns设置列数 列宽
JTextField jTextField = new JTextField(15);
获取文本框中输入的内容
jTextField.getText();
jPanel.add(jTextField);
多行文本框组件(文本域)
JTextArea jTextArea = new JTextArea(5,20);
设置强制换行,当文本域的一行满后自动换行
jTextArea.setLineWrap(true);
设置文本域不可编辑
jTextArea..setEditable(false);
带滚动条的面板
把多行文本框加进来,若不加入,在输入超过指定的行数后,会使文本域变大
JScrollPane jsp = new JScrollPane(jTextArea);
jPanel.add(jsp);
密码框(JPasswordField)
JLabel jLabel = new JLabel("密码");
JPasswordField jPasswordField = new JPasswordField(15);
char[] word = jPasswordField.getPassword();//获得输入的密码 char[]类型
添加密码框
jPanel.add(jPasswordField);
菜单栏 菜单 菜单项
菜单栏(JMenuBar)
JMenuBar jMenuBar = new JMenuBar();//创建菜单栏
菜单(JMenu)
创建的是早期的菜单,有立体效果
构造方法
JMenu jMenu = new JMenu("文件");
菜单项(JMenuItem)
构造方法
JMenuItem jMenuitem1 = new JMenuItem("打开");
把菜单项添加到菜单上
jMenu.add(jMenuitem);
把菜单添加到菜单栏上
jMenuBar.add(jMenu);
把菜单栏添加到窗口
this.setJMenuBar(jMenuBar);
监听器(ActionListener)
监听器 监听组件有没有事件产生
一旦点击了某个按钮产生事件,监听器就捕获到这次事件 从而去调用对应的事件处理程序
ActionListener是一个接口,使用监听有不同的用法
1.另一个类(需传入参数,使用麻烦)
2.内部类
使用内部类比另一个类更加合适,内部类中可以直接使用外部类的成员
class A implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
}
}
3.new 接口 创建一个匿名内部类,简化语法
为组件添加事件处理程序
addActionListener
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(jTextField.getText());
}
});
为文本框添加事件监听
键盘处理事件
addKeyListener
按键按下keyPressed
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按键按下了"+e.getKeyChar()+":"+e.getKeyCode());
jButton.setEnabled(true);
}
});
为组件添加事件处理程序
鼠标处理事件 共五种
addMouseListener
jButton.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按下");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标释放(鼠标按键抬起)");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标移入到标签上");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标从标签移出");
}
});
为窗口添加事件监听
addWindowListener
关闭的监听
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
int res = JOptionPane.showConfirmDialog(null, "是否退出","提示操作",JOptionPane.OK_CANCEL_OPTION);
if(res==0){
//点击确定
//打开登录窗口
new LogonFrame();
dispose();//释放聊天窗口
}
}
});
对话框
消息框
JOptionPane.showMessageDialog()
无返回值
ERROR_MESSAGE 错误
WARNING_MESSAGE 警告
jButton.addMouseListener(new MouseAdapter(){
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("鼠标点击");
String s = jTextField.getText();
if(s.length()==0){
JOptionPane.showMessageDialog(null, "请输入账号","操作提供",JOptionPane.WARNING_MESSAGE);
}
}
});
选择对话框
JOptionPane.showConfirmDialog()
有int类型的返回值
JOptionPane.showConfirmDialog(null, "你确定要登录吗?");
JOptionPane.showConfirmDialog(null, "你确定要登录吗?");
int res = JOptionPane.showConfirmDialog(null, "你确定要登录吗?","标题",JOptionPane.OK_CANCEL_OPTION);
//点击确定返回0,点击取消返回2
if(res ==0){
//执行登录操作
}
JOptionPane.OK_CANCEL_OPTION,对话框只有确定和取消
输入对话框
JOptionPane.showInputDialog(null,"请输入姓名");
有String类型的返回值
内部类
在一个类的内部定义的类称为内部类,内部类也是外部类的成员
为什么要使用内部类
1.内部类可以直接访问外部类的成员,无论成员是不是private
2.内部类只服务于当前的外部类,其他地方用不到此类
匿名内部类
new 接口/抽象类
不是new接口/抽象类的对象,为接口或抽象类创建一个匿名内部类来实现继承他们,省去创建一个类简化语法
内部类的意义
内部类编译后的字节码
A$B.class
类C中需要用到类中的成员,类C是一个外部类,无法使用到类A中成员 就可以把类C定义到类A中去, 类C只服务于类A,其他类中用不到类C,此种情况下也可以将类C定义为类A的内部类