第十七章Java界面编程

java界面编程
    分包规范
        三个层级 a.b.c
            命名方式 用公司域名反转
            com.baidu.xxx
            org.apache.xxx
            org.miao.tool
        
        分包的思想 MVC
            M model模型层 封装的类 bean pojo 比如 玩家 电脑 裁判 英雄 地鼠
            V view 视图层    视图层 与界面相关的类 ui
            C controller 控制层    各种事件监听 control ctrl listener
            工具包 tool util java.util
            线程包 thread 所有的线程相关的类
            测试包 main app test demo 测试类
            
    swing编程
        原生包 awt java.awt包(窗口,面板,按钮,字体,颜色,图片)
        javax.swing包 对原生的awt中的界面组件进行增强和优化(继承)
            swing包中所有的类的特点,在所有的awt类名前面加个"J"
            
    swing中的常用组件
        窗体/窗口 JFrame
        按钮 JButton btn
        文本框 JTextField
        文本域 JTextArea
        密码框 JPasswordField
        标签 JLable 文字 图片
        表格 JTable 
        单元格模型 DefaultTableModel
        带滚动条面板 JScrollPane
        
    面向过程
        直接在main方法中直接开始创建界面
        对象中的很多属性需要设置
        不方便实用
        JFrame frame = new JFrame();
        frame.setVisible(true);//设置窗口可见
        frame.setDefaultCloseOperation(3/JFrame.EXIT_ON_CLOSE);//设置默认关闭方式 为结束java程序
        frame.setSize(400,500);//设置窗口大小
        frame.setLocation(100,100);//距离上左100px
        frame.setLocationRelativeTo(null);//设置窗口居中
        frame.setTitle();
        frame.setResizable(false);//固定窗口大小
    
    面向对象
        自己写一个类去继承JFrame
        在构造方法中进行初始化各种数据
        在"管理者"的run方法中创建对象
        在run方法的最后一行 让第一个窗口可见
        
    JFrame
        默认布局方式:方位布局 边界布局
        如果只放一个元素,没有设置其他属性,默认占满整个容器
        一般使用万能一个布局方式:绝对布局
        窗口.setLayout(null)
        想放哪就放哪,必须设置位置(x,y) 设置大小(width,height)
        组件.setBounds(x,y,width,height);
        
    字体对象 Font
        Font font=new Font("微软雅黑",样式(Font.BOlD),字体大小(INT));
        所有界面组件都有设置字体的方法setFont(字体对象)

fdspackage mypkg; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.sql.*; import java.sql.Statement; import javax.swing.table.*; import javax.swing.tree.*; /** * * @author Administrator */ public class ClassBrowse extends JFrame implements TreeSelectionListener { Statement stmt; ResultSet rs,rsl; DefaultTableModel dtm;//定义数据模型 String[]title;//表头数组 JTree tree;//树 JTable table; DefaultTreeModel treeModel = null;//定义一个默认的树模型,用于建立树 JScrollPane scroll1,scroll2;//定义两个滚动面板 JSplitPane splitPane;//定义一个分割面板 private Object con; public ClassBrowse(){ try{ stmt = ConnectServer1. con. createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); DefaultMutableTreeNode root = new DefaultMutableTreeNode("专业");//根 treeModel = new DefaultTreeModel(root);//建立树模型 initTree(root,0);//调用递归函数建立树模型 tree = new JTree(treeModel);//利用树模型建立树 scroll1 = new JScrollPane(tree); tree.addTreeSelectionListener(this); rs = stmt.executeQuery("select classclass.name as 班级,xsda.no as 学号,xsda.name as 姓名" + " from xsda,classclass where xsda.classid = classclass.id"); ResultSetMetaData dbmd = rs.getMetaData();//得到记录集的元数据,建立表头数组 title = new String[dbmd.getColumnCount()]; for(int i=1;i <=dbmd.getColumnCount();i++) title[i-1] = dbmd.getColumnName(i); dtm = new DefaultTableModel(null,title);//建立表格数据模型 table = new JTable(dtm);//利用数据模型建立表格 scroll2 =new JScrollPane(table); initTable();//建立表 splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,scroll1,scroll2); splitPane.setOneTouchExpandable(true); splitPane.setDividerLocation(200); this.getContentPane().add(splitPane,null);} catch(SQLException e){System.out.println(e);} setTitle("分类查询学生信息"); setSize(500,400); setVisible(true); } void initTree(DefaultMutableTreeNode root,int id){//这是递归函数 DefaultMutableTreeNode node = null;//定义节点 try{ Statement stmt = ConnectServer1. con. createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery("select * from classclass where parent =" + id);//查询班级类表 while(rs.next()){ int nno = rs.getInt("id");//取得分类ID String nname = rs.getString("name").trim();//取得分类名称 node = new DefaultMutableTreeNode(nname);//建立树的节点 treeModel.insertNodeInto(node, root, root.getChildCount());//插入节点 initTree(node,nno);} } catch(Exception e){} finally{ try{ rs.close(); }catch(Exception e){} } } public void valueChanged(TreeSelectionEvent e){ JTree tree=(JTree)e.getSource(); //利用JTree的getLastSelectedPathCoponent()方法取得目前选取的节点 DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent(); String name = ((String)selectionNode.getUserObject()); String sql = "selcet classclass.name as 班级,xsda.no as 学号,xsda.name as 姓名 from xsda,classclass where xsda.classid = classclass.id"; if(!name.equals("专业")) sql=sql + "and classid in(select id from classclass where rtrim(ltrim(str(id)))like(select ltrim(rtrim(str(id)))+'%'from classclass where rtrim(ltrim(name))='"+name+"'))"; try{ rs = stmt.executeQuery(sql);//利用嵌套查询查出所有数据 initTable(); } catch(Exception ee){} } void initTable(){ dtm.setRowCount(0); try{ rs.beforeFirst(); while(rs.next()){ Vector v1=new Vector(); for(int i=1;i <=title.length;i++) v1.addElement(rs.getString(i)); dtm.addRow(v1); } }catch(SQLException e){e.printStackTrace();} dtm.fireTableStructureChanged(); } public static void main(String arg[]){ JFrame.setDefaultLookAndFeelDecorated(true); Font font = new Font("JFrame",Font.PLAIN,14); Enumeration keys = UIManager.getLookAndFeelDefaults().keys(); while(keys.hasMoreElements()){ Object key = keys.nextElement(); if(UIManager.get(key)instanceof Font) UIManager.put(key, font); } if(!ConnectServer1.conn("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=xsgl","sa","")){ JOptionPane.showMessageDialog(null, "连接数据库失败"); System.exit(0);//关闭数据库 } new ClassBrowse(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值