JavaSwing学习总结

1      .简介

Swing是一个用于开发Java应用程序用户界面的开发工具包,是由纯Java实现的。以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格,不依赖操作系统的支持,这是它与AWT组件的最大区别。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

2      .Swing的层次结构


3      .Swing容器

Swing容器分为三个:顶层容器、通用容器和专用容器。

3.1   顶层容器

顶层容器可以独立存在,包括JFrame、JDialog、JApplet、JWindow(JDialog不可以独立存在)。

JFrame是大多数应用程序的基本窗口,有边框、标题和按钮,允许程序员把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。


JDialog对话框。在Swing中,有两个对话框类,它们是JDialog类和JOptionPane类。JDialog类提供构造并管理通用对话框,作为对话框的基类。对话框与一般窗口不同,对话框依赖其他窗口,当它所依赖的窗口消失或最小化时,对话框也将消失;窗口还原时,对话框又会自动恢复。JDialog对象也是一种容器,因此也可以给JDialog对话框指派布局管理器,对话框的默认布局为BoarderLayout布局。但组件不能直接加到对话框中,对话框也包含一个内容面板,应当把组件加到JDialog对象的内容面板中。由于对话框依赖窗口,因此要建立对话框,必须先要创建一个窗口。JDialog的构造方法有很多,这里列举最具代表性的一个,JDialog(JFrame f,String s,boolean b),构造一个标题为s,初始化不可见的对话框。参数f设置对话框所依赖的窗口,参数b决定对话框是否强制或非强制型,强制意味着禁止其他窗口输入。JOptionPane类给一些常见的对话框提供许多便于使用的选项,例如下所示


JApplet是一种特殊的Java程序经过编译后可以被嵌入到HTML中,在浏览器内显示一个小程序界面。

JWindow没有边框标题和按钮,用作应用程序的启动画面。

3.2   中间容器

中间容器不能独立存在,必须放在顶层容器内,且能够容纳其他控件,包括JPanel、JScrollPane、JToolBar、JSplitPane、JTabbedPane。用法都是New出对应的面板,可以向其中添加组件,之后放到JFrame中即可,这里不再做一一截图。

       JPanel:最普通的面板,没有特殊功能,主要用来容纳其它控件。

JScrollPane:滚动面板,即带有长宽滚动条,主要用来容纳大型控件。

JToolBar:工具栏面板,包含图标按钮。可以在程序的主窗口之外浮动或是托拽。

JSplitPane:分割式面板。

JTabbedPane:选项卡面板。

3.3   特殊容器


特殊容器其实就是中间容器的一种,只不过它在图形上个更加能够起到美化和专业化的作用。包括JInternalFrame,JLayeredPane,JRootPane等。

JinternalFrame的使用跟JFrame几乎一样,可以最大化、最小化、关闭窗口、加入菜单等功能;唯一不同的是JinternalFrame JInternalFrame不能单独出现,必须依附在最上层组件上。

JLayeredPane:分层窗口,允许组件在需要时互相重叠。


4      .Swing基本组件

继承自JComponent的组件都是swing的基本组件,它们有一些通用的方法,如设置边框、背景颜色等。组件大致分为按钮、文本组件、不可编辑显示组件、菜单、其他组件。

按钮:JButton(常规按钮)、JCheckBox(复选框)、JRadioButton(单选按钮)。

文本组件:JTextField(文本字段)、JPasswoordField(密码框)、JTextArea(纯文本)。

不可编辑显示组件:JLabel(显示不可编辑文本)、JToolTip(显示不可编辑文本)、JProgreesBar(进度条)。

菜单:JMenu(普通菜单)、JPopupMenu(弹出式菜单)。

其他组件:JFileChooser(文件选择器)、JColorChooser(颜色选择器)、JTable(表格)、JTree(树)、JComboBox(下拉框)等等。

 

JTree的用法有很多,它的构造方法有:JTree()、JTree(Hashtable value)、JTree(Object[] value)、JTree(TreeModel model)、JTree(TreeNode node)、JTree(Vector value)、JTree(TreeNode node,boolean askaAllowsChildren)

JColorChooser应用场景一般是点击按钮触发颜色管理器,以下是它的示例:

JButton btn= new JButton(“选择设置当前面板颜色”);

Btn.addActionListener(newActionListener(){

       Public void acionPerformed(ActionEvente){

              Color c =JColorChooser.showDialog(frame,”选取颜色”,null);

              frame.getContentPane().setBackground(c);

}

});

其他组件的使用示例请见下文。

5      .Swing布局

布局是组件的摆放位置,可以跨平台,常用的布局管理器有FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。

FlowLayout类是最简单的布局管理器,它按照从左到右的顺序安排组件,直至没有多余的空间,然后转到下一行。

BorderLayout对象将界面分成五大区域,分别用BorderLayout类的静态常量指定:PAGE_START(上)、PAGE_END(下)、LINE_START(中左)、LINE_END(中右)、CENTER(中间)。

BoxLayout可以将组件由上至下或由左至右依次加入当前面板。

CardLayout卡片布局和其他布局不同,因为它隐藏了一些组件。卡片布局就是一组容器或者组件,它们一次仅仅显是一个,组中的每个容器称为卡片。

GridLayout表格,当组件加入时,会依序由左至右,由上至下填充到每个格子。

GridBagLayout功能最为强大,可以管理大小不同的行和列,可以任意摆放组件。

可以设置布局为null来进行绝对布局,但它不能实现跨平台。

6      .Swing事件

事件是用户与程序交互的桥梁,JDK中内置了各种事件,针对每种事件又定义了事件接口和回调方法,我们只需在回调方法中处理业务逻辑就可以轻松的处理事件,一般使用匿名内部类方式实现。例如给按钮加事件:

JButton.addActionListener(newActionListener(){

       Public void actionPerformed(ActionEvente){

              //处理业务逻辑…

}

});

给文本框加获取焦点事件:

JTextField.addFocusListener(newFocusListener(){

       Public void focusGained(FocusEvent e){

              //处理业务逻辑…

}

});

7      .Swing相关问题

7.1   Swing跟数据库交互?

Swing连接数据库与Java后台连接数据库的方法是完全一样的,例如用JDBC连接数据库只需要获取连接、获取Statement、执行SQL语句、获取结果集、关闭连接几个步骤。

7.2   Swing进行列表展示?

使用JTable,见如下说明。

JTable table = new JTable();

table.setModel(newDefaultTableModel(

//此处处理列表展示数据,要求返回二维数组。结果集返回每一条数据的值放在一个数组中,用二维数组表示结果集

,new String[] {

       //此处放列表表头展示项,如:

       “ID”,“站点名称”,”站点编号”,…

}

));

//创建滚动面板,设置滚条

JScrollPane scrollPanel = new JScrollPane (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

//JTable放入滚动面板

scrollPanel.setViewportView(table);

//创建普通面板,并将滚动面板添加进去

JPanel panel = new JPanel();

Panel.add(scrollPanel);

 

 

7.3   Swing如何读取Excel?

利用文件选择器获取所选文件路径,再利用org.apache.poi里边的类进行读取。

              JFileChooserchooser = newJFileChooser();//创建选择器

chooser.setFileFilter(newFileNameExtensionFilter("Excel表格", "xls"));//过滤扩展名

//弹出文件选择器

int option = chooser.showOpenDialog(null);

      if(option == JFileChooser.APPROVE_OPTION){

         Filefile = chooser.getSelectedFile();//获取到文件对象

         //利用poi读取文件内容

         FileInputStreamis = newFileInputStream(file);

         HSSFWorkbookworkBook = newHSSFWorkbook(is);

         HSSFSheetsheet = workBook.getSheetAt(0);

for(int rowNum = 1; rowNum<= sheet.getLastRowNum(); rowNum++){

            HSSFRowrow = sheet.getRow(rowNum);

            HSSFCellcontext1 = row.getCell(0);

            HSSFCellcontext2 = row.getCell(1);

            ……

         }

      }

7.4   Swing如何展示下拉列表?

JComboBox下拉框可以展示下拉列表,它需要一个数组来展示列表中的数据,然后在创建下拉框的时候把Object[]放进去就好啦。

7.5   Swing如何实现增删改查?

增删改查实现差别不大,共同点是点击触发事件触发逻辑处理方法调用数据库。JTable的getSelectedRow()方法可以获取用户选择表格数据的行号,JTable的getValueAt(int row,int columns)方法可以获取到指定行列的值,根据该值执行删除或修改方法。

7.6   Swing如何进行网络数据传输?

采用UDP传输方式,创建DatagramPacket实例,调用DatagramSocket类的send和receive方法发送和接收。

你可能感兴趣的:(Java)