BaseDialog

BaseDialog

创建dialog的步骤

Builder.create大致步骤


  • 根据上下文以及主题资源id创建AppCompatDialog对象,因为BaseDialog继承AppCompatDialog,所以mDialog实质上是AppCompatDialog的引用(目前),但他是BaseDialog类
  • 设置布局资源
  • 设置back键取消,设置框外点击取消
  • 设置出现、取消、消失以及交互时(按下)的监听回调:将回调接口对象赋值给类内对于接口成员。设涉及了一堆监听包装类(轮子哥修复了内存泄露)
  • 配置对话框所在的窗口
    • 宽高、gravity、偏移量xy、窗口动画
    • 设置窗口背景模糊属性、透明度
  • 对话框生命周期与活动绑定
  • 调用创建时回调

Bulider详细步骤解释

  • 构造函数

    • 给mDialog实例化:本质上就是调用BaseDialog的构造函数->原生AppCompatDialog构造函数

    • BaseDialog的构造函数:一种是生成默认主题资源的dialog,一个是生成根据themeId参数创建的dialog。两者都需要context参数(这是BaseDialog的构造函数)

  • 配置内容视图

    • 将配置好的内容视图(mContentView)设置给mDialog,mContentView在对应的set方法中进行配置
    • 在这个set方法中对内容视图做了以下工作:调整宽高、重心
  • 关于dialog取消的使能配置

    • ”返回键可取消“设置
    • 如果第一条为true,使能“点击外部取消dialog“
  • 配置各种回调监听

    • 这里的监听被封装成类,需要花精力研究
  • 设置dialog所在窗口的各个属性

    • 和上述一样,以下再重复一遍
    • 宽高、gravity、偏移量xy、窗口动画
    • 设置窗口背景模糊属性、透明度
  • 子控件监听回调函数设置

    • 感觉思路与Adapter中VH一样,添加了对监听类的包装,需要花时间研究
  • 将 Dialog 的生命周期和 Activity 绑定在一起

    • 花时间研究
  • 启动创建时的回调OnCreateListener

    • 调用其中onCreate(BaseDialog dialog)方法
  • 返回配置好的mDialog

    mDialog通过这个函数,对实例化、内容视图、点击取消性、各种监听回调、所在窗口属性、子控件监听、生命周期设置都做了配置

inflate(id, new FrameLayout(mContext), false)

  • 生成一个id的视图控件,当为true时,该控件的父视图是第二个视图对象,否则第二个对象的作用仅仅是返回视图属性:比如宽高值

  • 当为false时,对第二个参数选取的解释(ChatGPT):当 inflate() 方法的第三个参数为 false 时,你可以使用任何有效的布局对象作为第二个参数,例如 LinearLayoutRelativeLayout。这个参数的作用是提供一个上下文环境,用于解析布局文件中的视图属性,比如宽高值。它并不会影响最终生成的视图控件的类型或行为。所以你可以根据需要选择适合的布局对象作为第二个参数,只要它满足提供上下文环境的要求即可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
修改这段代码实现选择表格一行信息删除package frame; import javax.swing.; import java.awt.; import java.awt.event.ActionEvent; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; //添加页面 public class EditDialog extends BaseDialog{ DataChangelisenter dataChangelisenter; public void setDataChangelisenter(DataChangelisenter dataChangelisenter) { this.dataChangelisenter = dataChangelisenter; } @Override public void init() { setLayout(new FlowLayout()); //布局 setTitle("修改图书信息"); JPanel jp0=new JPanel(); JLabel l0 = new JLabel("id"); JTextField t0 = new JTextField(); t0.setPreferredSize(new Dimension(300,30)); jp0.add(l0); jp0.add(t0); JPanel jp1=new JPanel(); JLabel l1 = new JLabel("书名"); JTextField t1 = new JTextField(); t1.setPreferredSize(new Dimension(300,30)); jp1.add(l1); jp1.add(t1); JPanel jp2=new JPanel(); JLabel l2 = new JLabel("作者"); JTextField t2 = new JTextField(); t2.setPreferredSize(new Dimension(300,30)); jp2.add(l2); jp2.add(t2); JPanel jp3=new JPanel(); JLabel l3 = new JLabel("分类"); JTextField t3 = new JTextField(); t3.setPreferredSize(new Dimension(300,30)); jp3.add(l3); jp3.add(t3); JPanel jp4=new JPanel(); JLabel l4 = new JLabel("出版社"); JTextField t4 = new JTextField(); t4.setPreferredSize(new Dimension(300,30)); jp4.add(l4); jp4.add(t4); JPanel jp5=new JPanel(); JLabel l5 = new JLabel("数量"); JTextField t5 = new JTextField(); t5.setPreferredSize(new Dimension(300,30)); jp5.add(l5); jp5.add(t5); add(jp0); add(jp1); add(jp2); add(jp3); add(jp4); add(jp5); JButton b1 = new JButton("保存"); b1.setPreferredSize(new Dimension(150,30)); b1.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { String id = t0.getText(); String sname = t1.getText(); String author = t2.getText(); String classify = t3.getText(); String press = t4.getText(); String quantity = t5.getText(); Connection con = DBUtil.getConnect(); String sql = "UPDATE tushu SET sname=?,author=?,classify=?,press=?,quantity=? WHERE id=?"; try { PreparedStatement ps = con.prepareStatement(sql); ps.setString(1,sname); ps.setString(2,author); ps.setString(3,classify); ps.setString(4,press); ps.setString(5,quantity); ps.setString(6,id); int result = ps.executeUpdate(); if (result>0){ JOptionPane.showMessageDialog(EditDialog.this,"修改成功"); // new StudentFrame(); dataChangelisenter.dataChange(); dispose(); }else { JOptionPane.showMessageDialog(EditDialog.this,"修改失败"); } } catch (SQLException throwables) { throwables.printStackTrace(); } } }); add(b1); } }
05-25
修改后的代码如下: ``` package frame; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class EditDialog extends BaseDialog{ DataChangelisenter dataChangelisenter; JTable table; public void setDataChangelisenter(DataChangelisenter dataChangelisenter) { this.dataChangelisenter = dataChangelisenter; } public void setTable(JTable table) { this.table = table; } @Override public void init() { setLayout(new FlowLayout()); // 布局 setTitle("修改图书信息"); JPanel jp0 = new JPanel(); JLabel l0 = new JLabel("id"); JTextField t0 = new JTextField(); t0.setPreferredSize(new Dimension(300, 30)); jp0.add(l0); jp0.add(t0); JPanel jp1 = new JPanel(); JLabel l1 = new JLabel("书名"); JTextField t1 = new JTextField(); t1.setPreferredSize(new Dimension(300, 30)); jp1.add(l1); jp1.add(t1); JPanel jp2 = new JPanel(); JLabel l2 = new JLabel("作者"); JTextField t2 = new JTextField(); t2.setPreferredSize(new Dimension(300, 30)); jp2.add(l2); jp2.add(t2); JPanel jp3 = new JPanel(); JLabel l3 = new JLabel("分类"); JTextField t3 = new JTextField(); t3.setPreferredSize(new Dimension(300, 30)); jp3.add(l3); jp3.add(t3); JPanel jp4 = new JPanel(); JLabel l4 = new JLabel("出版社"); JTextField t4 = new JTextField(); t4.setPreferredSize(new Dimension(300, 30)); jp4.add(l4); jp4.add(t4); JPanel jp5 = new JPanel(); JLabel l5 = new JLabel("数量"); JTextField t5 = new JTextField(); t5.setPreferredSize(new Dimension(300, 30)); jp5.add(l5); jp5.add(t5); add(jp0); add(jp1); add(jp2); add(jp3); add(jp4); add(jp5); JButton b1 = new JButton("保存"); b1.setPreferredSize(new Dimension(150, 30)); b1.addActionListener(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { String id = t0.getText(); String sname = t1.getText(); String author = t2.getText(); String classify = t3.getText(); String press = t4.getText(); String quantity = t5.getText(); Connection con = DBUtil.getConnect(); String sql = "UPDATE tushu SET sname=?,author=?,classify=?,press=?,quantity=? WHERE id=?"; try { PreparedStatement ps = con.prepareStatement(sql); ps.setString(1,sname); ps.setString(2,author); ps.setString(3,classify); ps.setString(4,press); ps.setString(5,quantity); ps.setString(6,id); int result = ps.executeUpdate(); if (result > 0){ JOptionPane.showMessageDialog(EditDialog.this,"修改成功"); // 删除选中的行 int selectedRow = table.getSelectedRow(); DefaultTableModel model = (DefaultTableModel) table.getModel(); if (selectedRow != -1) { model.removeRow(selectedRow); } dataChangelisenter.dataChange(); dispose(); }else { JOptionPane.showMessageDialog(EditDialog.this,"修改失败"); } } catch (SQLException throwables) { throwables.printStackTrace(); } } }); add(b1); } } ``` 在这个代码中,我们添加了一个 `setTable` 方法,用于设置需要操作的表格对象。然后,在保存按钮的事件监听器中,我们通过 `table.getSelectedRow()` 来获取当前选中的行,然后使用 `DefaultTableModel` 的 `removeRow` 方法来删除该行数据。最后,我们调用 `dataChangelisenter.dataChange()` 方法来通知主界面数据已经发生了改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值