zoukankan      html  css  js  c++  java
  • JavaSE-26 Swing

    学习要点

    • 关于Swing
    • Swing容器组件
    • Swing布局管理器
    • Swing组件
    • Swing菜单组件

    关于Swing

    • Swing和AWT都是java开发图形用户界面的工具包。
    • AWT:早期Java版本中,使用AWT开发图形用户界面。AWT功能丰富,缺点是直接依赖操作系统。换句话说,AWT实际上是利用操作系统提供的图形库和控件接口来实现的。由于不同的操作系统提供的图形库和空间接口并不完全相同,因此AWT开发图形用户界面可移植性差。重量级AWT。
    • Swing:基于AWT的可移植性和功能限制的问题,Java在AWT的基础上重新开发了Swing开发工具包。是一种轻量级的组件纯Java开发。位于javax.swing包下。轻量级Swing。
    • Swing主要内容
    1. 容器:包含Swing组件
    2. 组件:与用户交互的图形对象
    3. 可改变的外观:可以通过修改代码改变图像界面风格
    4. Java2D图形绘制:使用Java2D绘制图形
    • Swing特征
    1. 完全由java实现
    2. 组件在不同平台上表现一致
    3. 允许通过编程改变组件外观
    4. 易于扩展,容易实现自定义组件
    5. Swing组件相关类名一般以J开头
    • Swing的结构

    图1.1

    图1.2

    • Swing组件分类

    分为容器组件和常用功能组件。容器组件可以容纳其他常用功能组件,而常用功能组件中不能放置其他组件。

     

    Swing容器组件

    JFrame组件

    • 概念

    JFrame是一个包含标题和边框的顶层窗口,是java.awt.Frame的扩展版本。

    • JFrame的构造方法。

    构造方法

    说   

    JFrame()

    构造一个初始时不可见的新窗体

    JFrame(String title)

    创建一个新的、初始不可见的、具有指定标题的 Frame

    需要显示窗体:setVisible(true)方法

    • 常用方法

    常用方法

    说明

    JRootPane getRootPane()

    返回此窗体的 rootPane 对象

    Component add(Component comp)

    将指定组件添加到容器

    void remove(Component comp)

    从此容器中移除指定组件

    void pack()

    调整此窗口的大小,以适合其子组件的首选大小和布局

    void setSize(int width,int height)

    调整组件大小,使其宽度为width,高度为height

    Dimension getSize()

    返回窗体大小

    JRootPane 的结构参见JDK API

    • 示例代码:创建窗体,添加三个按钮
    public class TestJFrame {
    
        static JFrame winForm = new JFrame("测试窗体");
    
        public static void main(String[] args) {
    
            try {          
    
    // 获取系统风格
    
    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    
    // 将系统风格应用于窗体           
    
    SwingUtilities.updateComponentTreeUI(winForm);
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
            winForm.setSize(500, 300);// 设置窗体大小
    
            winForm.setLocationRelativeTo(null);// 窗体显示器居中显示
    
            FlowLayout flow = new FlowLayout();// 实例化布局管理器
    
            winForm.getContentPane().setLayout(flow);// 将布局管理器加入窗体
    
            JButton btn1 = new JButton("按钮1");// 实例化按钮
    
            JButton btn2 = new JButton("按钮2");
    
            JButton btn3 = new JButton("按钮3");
    
            winForm.getContentPane().add(btn1);// 添加按钮到窗体
    
            winForm.getContentPane().add(btn2);
    
            winForm.getContentPane().add(btn3);
    
            winForm.setVisible(true);// 窗体可见
    
        }
    
    }
    • 输出效果

     

    注意:

    • Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(ConentPane)上,内容面板是一个中间容器。
    • 在JFrame顶层容器中添加Swing组件有两种方式:
    1. 获得顶层容器内容面板再添加组件:frame. getContentPane().add(组件对象)
    2. 建立类似JPanel中间容器,把组件添加到中间容器,然后再使用1的方法或者setContentPane()方法把中间容器添加到顶层容器中
    3. 一般顶层容器添加中间容器或者swing组件之前,通过getContentPane().setLayout()方法添加布局管理器

    JPanel组件

    • 概念

    JPanel是轻量级容器,它可以用来容纳其他的界面组件(窗体除外),且默认的布局管理器是FlowLayout。

    • 常用构造方法

    构造方法

       

    JPanel()

    以默认布局FlowLayout创建一个新面板

    JPanel(LayoutManager layout)

    以指定的布局管理器创建一个新面板

    • 常用方法

    常用方法

       

    void add(Component comp)

    将指定界面组件添加到面板

    void remove(Component comp)

    从该面板中移除指定组件

    void setLayout(LayoutManager layout)

    设置面板的布局管理器

    • 示例代码:创建窗体,添加三个按钮
    public static void main(String[] args) {
    
            JFrame winForm = new JFrame("JPanel测试");// 创建窗体
    
            winForm.setSize(400, 300);// 设置窗体大小
    
            winForm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭按钮
    
            FlowLayout flow = new FlowLayout();// 布局管理器
    
            winForm.getContentPane().setLayout(flow);
    
            JPanel jp = new JPanel();// 创建JPanel对象
    
            JButton btn1 = new JButton("按钮1");// 创建按钮
    
            JButton btn2 = new JButton("按钮2");
    
            JButton btn3 = new JButton("按钮3");
    
            jp.setBackground(Color.GRAY);// 设定JPnel背景颜色
    
            jp.add(btn1);// Jpanel对象添加按钮
    
            jp.add(btn2);
    
            jp.add(btn3);
    
            winForm.getContentPane().add(jp);// Jpanel对象添加到窗体
    
            winForm.setVisible(true);
    
        }
    

      

    • 输出效果

     

     

     

     

    JScrollPane组件

    • 概念

    JScrollPane是一个可滚动的视图面板。它包括JScrollBar和JViewPort。

    JScrollBar:水平或垂直的滚动对象,可选。

    JViewPort:显示数据的窗口对象(例如图像文件)。

     

    • 常用构造方法

    构造方法

    说    明

    JScrollPane()

    创建一个空的JScrollPane(没有视图区),其中水平和垂直滚动条在需要的时候出现。

    JScrollPane(Component view)

    创建一个显示指定组件内容的JScrollpane,其中水平和垂直滚动条在组件内容大于视图范围时出现。

    • 常用方法

    常用方法

       

    JViewport getViewport()

    返回当前JViewport对象

    void setHorizontalScrollBarPolicy(int policy)

    确定水平滚动条何时显示在滚动窗格上

    void setVerticalScrollBarPolicy(int policy)

    确定垂直滚动条何时显示在滚动窗格上

    • 示例代码

        

    public static void main(String[] args) {
    
            JFrame jf = new JFrame("带滚动条的视图面板");
    
            try {
    
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());// 获取系统风格
    
                SwingUtilities.updateComponentTreeUI(jf);// 将系统风格应用于窗体
    
            } catch (Exception e) {
    
                e.printStackTrace();
    
            }
    
            jf.setSize(400, 300);// 设置窗体大小
    
            jf.setLocationRelativeTo(null);// 窗体显示器居中显示
    
            FlowLayout flow = new FlowLayout();// 窗体设置布局管理器
    
            jf.getContentPane().setLayout(flow);
    
            JScrollPane jspImage = new JScrollPane();// 创建JScrollPane对象
    
            Dimension ds = new Dimension(350, 250); // 封装组件的高度和宽度
    
            jspImage.setPreferredSize(ds);// 设置JScrollPane的高度和宽度
    
            JLabel jlImage = new JLabel();// 创建放置图像的JLabel标签
    
            ImageIcon image = new ImageIcon("E:\Dev\J-eclipse\SwingDemo\src\com\etc\swing\demo2\auto.jpg");// 创建图片对象
    
            jlImage.setIcon(image);// 图像放入JLabel标签
    
            jspImage.setViewportView(jlImage);// 把标签添加到JScrollPane中
    
            jspImage.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);// 设置垂直滚动条可见性
    
            jspImage.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); // 设置水平滚动条可见性
    
            jf.add(jspImage);// JScrollPane添加到窗体中
    
            jf.setVisible(true);// 窗体可见
    
        } 

    输出效果:

    注意:JScrollPane默认使用ScrollPaneLayout布局,不能更改其布局。

    Swing布局管理器

    定义

    • 每个容器组件都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。
    • 当一个窗口中的组件较多时,界面应该简洁整齐,布局合理。Java采用布局管理器对容器中的组件进行相对布局,当改变容器大小时,或者改变组件的大小,或者改变组件之间的相对位置,保证组件不会被覆盖并且容器没有空白区域。
    • Java提供多种风格和特点的布局管理器,每一种布局管理器指定一种组件之间的相对位置。Java.awt中的布局管理器类主要有:FlowLayout、BorderLayout、GridLayout、CardLayout、GridBayLayout。 他们实现了布局管理器LayoutManager接口。
    • 布局是容器类的特性,每种容器都有一中默认布局。Window窗口类的默认布局管理器是BorderLayout,Panel面板类的默认布局是FlowLayout。如果一个容器需要改变其默认布局管理器,可以调用Container容器类的FlowLayout()方法。
    • 容器管理器的指定:容器对象.setLayout(new xLayout) 。x指具体布局管理器。

      

    FlowLayout管理器

    • 流式布局特点

     

    1)        组件自左向右,自上向下布局。

    2)        遇到障碍折回,自动换行显示。

    3)        可以设置每一行组件的对齐方式,默认居中对齐。

    4)        Panel的默认布局管理器。

    • 常用构造方法

    构造方法

       

    FlowLayout()

    使用默认的居中对齐方式,水平和垂直间距为默认值。

    FlowLayout (int align)

    使用指定对齐方式,水平和垂直间距为默认值。参数值为:LEFT、RIGHT、CENTER。

    FlowLayout (int align,

    int hgap,int vgap)

    使用指定的对齐方式,指定水平间距、垂直间距。

    • 示例代码
    JFrame jf=new JFrame("流式布局测试");
    
    jf.setLayout(new FlowLayout());//如何居右显示?
    
    for(int i=1;i<=6;i++){
    
       jf.add(new JButton("按钮"+i));
    
    }
    
    jf.setSize(200, 200);
    
    jf.setVisible(true);
    

      

    BorderLayout管理器

    • 边界布局特点

     

    1)        按照地理方位布局:上北下南左西右东+中间

    2)        Window、Frame、Dialog的默认布局管理器

    3)        组件需要明确指定添加到边界布局的位置

    • 常用构造方法

    构造方法

       

    BorderLayout()

    构造一个组件之间没有间距的边界布局。

    BorderLayout (int hgap,int vgap)

    构造一个具有指定组件间距的边界布局。水平间距由 hgap 指定,垂直间距由 vgap 指定。

    • 添加组件到指定区域常用值:
         add(new Button("North"), BorderLayout.NORTH);//上
    
         add(new Button("South"), BorderLayout.SOUTH);//下
    
         add(new Button("East"), BorderLayout.EAST);//右
    
         add(new Button("West"), BorderLayout.WEST);//左
    
         add(new Button("Center"), BorderLayout.CENTER);//中间
    

      

    • 示例代码
    JFrame jf = new JFrame("边界布局测试");
    
    jf.setLayout(new BorderLayout());
    
    jf.add(new JButton("North"), BorderLayout.NORTH);
    
    jf.add(new JButton("South"), BorderLayout.SOUTH);
    
    jf.add(new JButton("East"), BorderLayout.EAST);
    
    jf.add(new JButton("West"), BorderLayout.WEST);
    
    jf.add(new JButton("Center"), BorderLayout.CENTER);
    
    jf.setSize(200, 200);
    
    jf.setVisible(true);
    

      

    GridLayout管理器

    • 网格布局特点

     

    1)        网格形式。

    2)        默认从左到右,从上到下添加组件。

    3)        容器中每个组件占用大小完全相同的一个区域。

    4)        各个组件的大小由所在区域决定,组件自动长大到区域大小。

    • 常用构造方法

    构造方法

       

    GridLayout()

    创建具有默认值的网格布局,即每个组件占据一行一列。

    GridLayout(int rows, int cols)

    创建具有指定行数和列数的网格布局。

    GridLayout(int rows, int cols, int hgap, int vgap)

    创建具有指定行数和列数的网格布局。组件之间的距离由hgap和vgap确定。

    • 示例代码
    JFrame jf = new JFrame("网格布局测试");
    
        jf.setLayout(new GridLayout(3,4));
    
        for(int i=1;i<=12;i++){
    
            jf.add(new JButton("按钮"+i));
    
        }
    
        jf.setSize(200, 200);
    
        jf.setVisible(true);
    

      

    上机练习:制作计算器面板

     

    提示:

    1、JFrame默认布局为边界布局。

    2、输入框为JTextField文本框组件,放在JFrame上部。

    3、计算器按钮放在JPanel组件中,JPanel组件采用网格布局。

    CardLayout管理器

    • 卡片布局特点

    组件的叠放形式,一堆组件放在容器中,每次只有最上面的组件课件

    以时间方式管理组件而非按照空间方式管理

    • 常用构造方法

    构造方法

       

    CardLayout()

    创建具有默认值的卡片布局。

    CardLayout(int hgap,

    int vgap)

    创建具有指定行间距和列间距的卡片布局。

    • 控制组件常用方法

    构造方法

       

    void first(Container)

    显示第一个加入到CardLayout的卡片。

    void last(Container)

    显示最后一个加入到CardLayout的卡片。

    void next(Container)

    显示当前组件的下一个卡片。

    void previous(Container)

    显示当前组件的前一个卡片。

    show(Container,String)

    在卡片父级容器中显示指定名字的卡片。

    • 示例代码 
    public static void main(String[] args) {
    
           JFrame jf = new JFrame("卡片布局测试");// 创建测试窗口
    
           try {           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());// 获取系统风格
    
               SwingUtilities.updateComponentTreeUI(jf);// 将系统风格应用于窗体
    
           } catch (Exception e) {
    
               e.printStackTrace();
    
           }
    
           // 创建一个面板视图,用于存放按钮
    
           JPanel menuJP = new JPanel();
    
           menuJP.setLayout(new FlowLayout(FlowLayout.LEFT));// 流式布局,居左显示
    
           JButton btnOne = new JButton("第一个选项卡");
    
           JButton btnTwo = new JButton("第二个选项卡");
    
           menuJP.add(btnOne);
    
           menuJP.add(btnTwo);
    
           jf.add(menuJP, BorderLayout.NORTH);// 按钮面板添加到顶部
    
     
    
           // 创建一个父级面板,用于存放卡片面板
    
           final JPanel jpMain = new JPanel();
    
           final CardLayout cardLayout = new CardLayout();
    
           jpMain.setLayout(cardLayout);
    
           jf.add(jpMain, BorderLayout.CENTER);// 把父级面板放入窗体
    
     
    
           // 创建两个子级面板,显示具体内容
    
           JPanel jp1 = new JPanel();
    
           JLabel jl1 = new JLabel("第一个选项卡页面...");
    
           jl1.setForeground(Color.white);// 设置标签组件文字颜色
    
           jp1.add(jl1);
    
           jp1.setBackground(Color.green);// 设置面板背景色为绿色
    
           jpMain.add(jp1, "1");// 子级面板添加到父级面板中,指定名称为"1"
    
     
    
           JPanel jp2 = new JPanel();
    
           JLabel jl2 = new JLabel("第二个选项卡页面...");
    
           jl2.setForeground(Color.white);// 设置标签组件文字颜色
    
           jp2.add(jl2);
    
           jp2.setBackground(Color.red);// 设置面板背景色为红色
    
           jpMain.add(jp2, "2");// 子级面板添加到父级面板中,指定名称为"2"
    
           // 设置按钮监听事件
    
           class ActionListenerDemo implements ActionListener {
    
               @Override
    
               public void actionPerformed(ActionEvent e) {
    
                   if (e.getActionCommand().equals("第一个选项卡")) {
    
                       cardLayout.show(jpMain, "1");// 在父级面板中显示名称为"1"的子面板
    
                   } else {
    
                       cardLayout.show(jpMain, "2");// 在父级面板中显示名称为"2"的子面板
    
                   }
    
               }
    
           }
    
           ActionListenerDemo ald = new ActionListenerDemo();// 实例化监听
    
           btnOne.addActionListener(ald);// 注册事件监听
    
           btnTwo.addActionListener(ald);// 注册事件监听
    
           jf.setSize(500, 300);// 设置窗体大小
    
           jf.setLocationRelativeTo(null);// 窗体显示器居中显示
    
           jf.setVisible(true);// 窗体可见
    
       }
    

      运行效果

    上机练习:按照示例,完成卡片布局

    其他布局管理器

    • Java推荐用户在排版组件的时候使用布局管理器,但不是强制要求使用布局管理器。
    • NULL布局管理器:如果用户需要自定义精确定位组件,使用NULL布局管理器。也称为空布局管理器,由用户自定义组件位置。
    • GridBagLayout布局管理器:功能最强大,最复杂的布局管理器。组件可以跨越网格、独立设置各个网格的大小等等。类似表格单元格的跨行跨列特性。

      

    使用Swing插件可视化布局组件

    eclipse进行swing可视化开发插件

     

     

    Visual Editor

    Eclipse官方提供。

    SWT-Designer

    功能强大,收费。

    jigloo

    收费。non_commercial版本免费,功能和收费版本一样。

    MyEclipse10.6可视化开发

    • MyEclipse提供了可视化插件Swing Matisse。
    • 使用步骤

    1)        项目包右键,new,other,myeclipse:

    2)        填写Matisse Form相关信息并选择模板

     

     

     

    Swing组件

    Swing GUI组件

    上图图包含组件:

    • JLabel
    • JTextField
    • JComboBox
    • JCheckBox
    • JTextArea
    • JRadioButton
    • lJButton

    JLabel

    • 概念

    最简单的swing组件之一,用于在框架上显示标签。

    标签可以显示文本,也可以显示图像。

    不可交互,不响应任何输入事件,不能获得键盘和鼠标的响应。

    • 常用构造方法

    构造方法

       

    JLabel()

    创建无图像并且其标题为空字符串的 JLabel

    JLabel(Icon image)

    创建具有指定图像的 JLabel 实例。image一般使用ImageIcon(String filename)构建。

    JLabel(String text)

    创建具有指定文本的 JLabel 实例

    • 常用方法

    常用方法

       

    getText()

    返回标签显示的文本字符串

    setText(String text)

    定义此组件将要显示的单行文本

    setIcon(Icon icon)

    定义标签将显示的图标

    • 规范

    在创建JLabel对象的时候,一般建议添加lbl前缀,把代码规范变成自己的编码习惯。

    • 示例代码

      

     JFrame jf = new JFrame("JLabel测试");
    
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
        jf.getContentPane().setLayout(new FlowLayout());
    
        // JLabel的三种构造方法
    
        JLabel lbl1 = new JLabel();
    
        JLabel lbl2 = new JLabel("Label2");
    
        JLabel lbl3 = new JLabel(new ImageIcon("图片url地址"));
    
        jf.add(lbl1);
    
        jf.add(lbl2);
    
        jf.add(lbl3);
    
        jf.setSize(300, 200);
    
        jf.setVisible(true);
    

      

    JTextField

    • 概念

    swing中的文本框组件,提供输入和编辑单行文本。

    • 常用构造方法

    构造方法

       

    JTextField()

    构造一个新的 TextField

    JTextField(String text)

    构造一个用指定文本初始化新的 TextField

    • 常用方法

    常用方法

       

    getText()

    返回文本框中的文本字符串

    setHorizontalAlignment(int alignment)

    设置文本的水平对齐方式

    • 编码规范

    JTextField对象名前面加txt。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import javax.swing.*;
    
     
    
    public class JTextFieldT {
    
      
    
       static JFrame aWindow=new JFrame("JTextField Test");
    
       static JTextField txtT1=null;
    
       static JTextField txtT2=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(400, 150);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           //演示其2种构造方法
    
           txtT1=new JTextField();
    
           txtT2=new JTextField("JTextField");
    
          
    
           aWindow.getContentPane().add(txtT1);
    
           aWindow.getContentPane().add(txtT2);
    
           //此方法用来演示JTextField的常用方法
    
           setTxtT1Pro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setTxtT1Pro(){
    
           System.out.println(txtT2.getText());
    
           txtT2.setHorizontalAlignment(JTextField.LEFT);
    
           //常用参数:JTextField.LEFT、JTextField.CENTER 和 JTextField.RIGHT
    
       }
    
    }
    

      

    JTextArea

    • 概念

    JTextArea组件从用户接收多行文本,并允许用户编辑输入的文本。

    • 常用构造方法

    构造方法

       

    JTextArea()

    构造一个新的多行文本区

    JTextArea(String text)

    构造一个用指定文本初始化新的多行文本区

    • 常用方法

    常用方法

       

    getText()

    返回文本区中的文本字符串

    setFont(Font f)

    设置文本区的字体

    • 编码规范

    JTextArea对象名前面加txa。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import javax.swing.*;
    
     
    
    public class JTextAreaT {
    
       static JFrame aWindow=new JFrame("JTextArea Test");
    
       static JTextArea txaT1=null;
    
       static JTextArea txaT2=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(400, 150);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           //演示其2种构造方法
    
           txaT1=new JTextArea();
    
           txaT2=new JTextArea("JTextArea");
    
          
    
           aWindow.getContentPane().add(txaT1);
    
           aWindow.getContentPane().add(txaT2);
    
           //此方法用来演示常用方法
    
           setPro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setPro(){
    
           System.out.println(txaT2.getText());
    
           txaT2.setFont(new Font(txaT2.getText(),Font.ITALIC,24));
    
       } 
    
    }
    

      

    JButton

    • 概念

    JButton用来创建图形用户界面上的按钮。通过给JButton注册监听事件,当按钮的一个点击事件触发时,就会执行相应的动作。

    • 常用构造方法

    构造方法

       

    JButton()

    创建不带文本或图标的按钮

    JButton(Icon icon)

    创建一个带图标的按钮

    JButton(String text)

    创建一个带文本的按钮

    JButton(String text, Icon icon)

    创建一个带初始文本和图标的按钮

    • 常用方法

    常用方法

       

    void setRolloverIcon(Icon rolloverIcon)

    鼠标经过时显示的图标

    void setPressedIcon(Icon pressedIcon)

    点击按钮时显示的图表

    • 编码规范

    JButton对象名前面加btn。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import javax.swing.*;
    
     
    
    public class JButtonT {
    
       static JFrame aWindow=new JFrame("JTextArea Test");
    
       static JButton btnT1=null;
    
       static JButton btnT2=null;
    
       static JButton btnT3=null;
    
       static JButton btnT4=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(500, 250);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           //演示其4种构造方法
    
           btnT1=new JButton();
    
           btnT2=new JButton("JTextArea");
    
           btnT3=new JButton(new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0120.JPG"));
    
           btnT4=new JButton("JTextArea",new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0120.JPG"));
    
          
    
           aWindow.getContentPane().add(btnT1);
    
           aWindow.getContentPane().add(btnT2);
    
           aWindow.getContentPane().add(btnT3);
    
           aWindow.getContentPane().add(btnT4);
    
          
    
           //此方法用来演示常用方法
    
           setPro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setPro(){
    
           btnT1.setIcon(new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0122.JPG"));
    
           btnT1.setRolloverIcon(new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0121.JPG"));
    
           btnT1.setPressedIcon(new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0120.JPG"));
    
           btnT3.setPressedIcon(new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0120.JPG"));
    
       }
    
    }
    

      

    JCheckBox

    • 概念

    创建可供用户多选的复选框,可以选择也可以取消,并显示所选择状态。

    • 常用构造方法

    构造方法

       

    JCheckBox()

    创建一个没有文本、没有图标并且最初未被选定的复选框

    JCheckBox(Icon icon)

    创建有一个图标、最初未被选定的复选框

    JCheckBox(Icon icon,

    boolean selected)

    创建一个带图标的复选框,并指定其最初是否处于选定状态

    JCheckBox(String text)

    创建一个带文本的、最初未被选定的复选框

    JCheckBox(String text,

    boolean selected)

    创建一个带文本的复选框,并指定其最初是否处于选定状态

    • 常用方法

    常用方法

       

    Icon getIcon()

    返回默认图标

    String getText()

    返回JCheckBox对象的文本

    void setVerticalAlignment(int

     alignment)

    设置图标和文本的垂直对齐方式

    int getVerticalAlignment()

    返回文本和图标的垂直对齐方式

    void setEnabled(boolean b)

    启用或者禁用JCheckBox对象

    void setText(String text)

    设置JCheckBox对象的文本

    boolean isSelected()

    返回按钮的选择状态

    • 编码规范

    JCheckBox对象名前面加chk。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import javax.swing.*;
    
     
    
    public class JCheckBoxT {
    
     
    
       static JFrame aWindow=new JFrame("JTextArea Test");
    
       static JCheckBox chkT1=null;
    
       static JCheckBox chkT2=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(500, 250);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           //演示其2种构造方法
    
           chkT1=new JCheckBox("JCheckBox");
    
           chkT2=new JCheckBox("JCheckBox",new javax.swing.ImageIcon(
    
           "D:\Program Files\HyperSnap6\tmp\图0122.JPG"),true);
    
           aWindow.getContentPane().add(chkT1);
    
           aWindow.getContentPane().add(chkT2);
    
          
    
          
    
           //此方法用来演示常用方法
    
           setPro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setPro(){
    
           chkT2.setVerticalAlignment(SwingConstants.BOTTOM);
    
           System.out.println(chkT1.getIcon());
    
           System.out.println(chkT1.getText());
    
           System.out.println(chkT2.getVerticalAlignment());
    
       }
    
    }
    

      

    JRadioButton

    • 概念

    创建单选按钮的组件。通常多个JRadioButton对象和一个ButtonGroup对象一起使用。

    • 常用构造方法

    构造方法

       

    JRadioButton()

    创建初始非选中的按钮,不设置文本

    JRadioButton(String  text)

    用指定文本创建非选中按钮

    JRadioButton(String text,

    boolean selected)

    用指定文本和选中状态创建按钮

    • 常用方法

    常用方法

       

    Icon getIcon()

    返回默认图标。没有图标返回null

    String getText()

    返回JRadioButton对象文本

    void setEnabled(Boolean b)

    启用或者禁用JRadioButton对象

    void setText(String text)

    设置JRadioButton对象文本

    boolean isSelected()

    返回按钮选择状态

    • 编码规范

    JRadioButton对象名前面加rad。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import java.util.*;
    
    import javax.swing.*;
    
     
    
    public class JRadioButtonT {
    
       static JFrame aWindow=new JFrame("JTextArea Test");
    
       static JRadioButton radT1=null;
    
       static JRadioButton radT2=null;
    
       static JRadioButton radT3=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(500, 250);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           //演示其3种构造方法
    
           radT1=new JRadioButton();
    
           radT2=new JRadioButton("男");
    
           radT3=new JRadioButton("男",true);
    
           aWindow.getContentPane().add(radT1);
    
           aWindow.getContentPane().add(radT2);
    
           aWindow.getContentPane().add(radT3);
    
          
    
           //此方法用来演示常用方法
    
           setPro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setPro(){
    
           System.out.println(radT1.getIcon());
    
           System.out.println(radT2.getText());
    
           radT3.setEnabled(false);
    
           System.out.println(radT3.isSelected());
    
       }
    
    }
    

      

    JComboBox

    • 概念

    创建可供用户选择的下拉框。可编辑状态下可接收文本。

    • 常用构造方法

    构造方法

       

    JComboBox()

    创建一个不包含选择项的下拉框对象

    JComboBox(Object[] items)

    创建一个包含指定数组中元素的下拉框对象

    JComboBox(Vector<?> items)

    创建一个包含指定Vector中元素的下拉框对象

    • 常用方法

    常用方法

       

    addItem(Object obj)

    将列表项添加到下拉框中

    getItemAt(int index)

    返回指定索引位置的列表项。列表项索引从0开始。

    getItemCount()

    返回列表项最大数目

    getSelectedItem()

    返回当前选择的列表项

    getSelectedIndex()

    返回当前选择的索引

    • 编码规范

    JComboBox对象名前面加cbo。

    • 示例代码
    package com.etc.coponment;
    
     
    
    import java.awt.*;
    
    import javax.swing.*;
    
    import java.util.*;
    
    public class JComboBoxT {
    
     
    
       static JFrame aWindow=new JFrame("JTextArea Test");
    
       static JComboBox cboT1=null;
    
       static JComboBox cboT2=null;
    
       static JComboBox cboT3=null;
    
       static JComboBox cboT4=null;
    
       static JLabel lbl1=null;
    
       public static void main(String[] args) {
    
           aWindow.setSize(500, 250);
    
           aWindow.setDefaultCloseOperation(JFrame
    
                   .EXIT_ON_CLOSE);       
    
           FlowLayout flow=new FlowLayout();
    
           aWindow.getContentPane().setLayout(flow);
    
           Vector vec=new Vector();
    
           vec.add("选项一");
    
           vec.add("选项二");
    
           //演示其4种构造方法
    
           cboT1=new JComboBox();
    
           cboT2=new JComboBox(new String[]{"选项一","选项二"});
    
           cboT3=new JComboBox(vec);
    
           cboT4=new JComboBox(JComboBoxItem.addItem());
    
           lbl1=new JLabel();
    
           aWindow.getContentPane().add(cboT1);
    
           aWindow.getContentPane().add(cboT2);
    
           aWindow.getContentPane().add(cboT3);
    
           aWindow.getContentPane().add(cboT4);
    
           aWindow.getContentPane().add(lbl1);
    
          
    
           //此方法用来演示常用方法
    
           setPro();
    
           aWindow.setVisible(true);
    
       }
    
       public static void setPro(){
    
           cboT2.addItem(new String("选项三"));
    
           System.out.println(cboT2.getItemAt(2));
    
           System.out.println(cboT2.getItemCount());
    
           System.out.println(cboT2.getSelectedItem());
    
           System.out.println(cboT2.getSelectedIndex());
    
           cboT4.addItemListener(new java.awt.event.ItemListener() {
    
               public void itemStateChanged(java.awt.event.ItemEvent evt) {
    
                   changed(evt);
    
               }
    
           });
    
       }
    
       private static void changed(java.awt.event.ItemEvent evt) {
    
           // TODO add your handling code here:
    
           if(cboT4.getSelectedItem().toString().indexOf("图0132.JPG")>-1)
    
               lbl1.setText("您选择的是测试图标");
    
           else
    
               lbl1.setText("您选择的是运行图标");
    
       }
    
    }
    
     
    
     
    
    package com.etc.coponment;
    
    import javax.swing.*;
    
    import java.awt.*;
    
    public class JComboBoxItem {
    
       public static ComboBoxModel addItem(){
    
           DefaultComboBoxModel cbom=new DefaultComboBoxModel();
    
           cbom.addElement(new ImageIcon("E:\tmp\图0132.JPG"));
    
           cbom.addElement(new ImageIcon("E:\tmp\图0133.JPG"));
    
           return cbom;
    
       }
    
    }
    

      

    上机练习:JComboBox

    需求描述:

    在JComboBox列出一些国家名称。每当用户在选择一个国家的时候,将该国的国旗作为标签显示,并在JTextArea中显示该国的介绍。

    完成时间:20分钟。

    上机练习:添加学生信息窗体制作

    需求描述:

    设计和完成学生信息添加窗体的制作。

    要求必要的验证

    完成时间:30分钟。

      

    JTable

    • 概念

    JTable是一个表格控件,它允许开发人员通过一个表格模型来组织和显示数据,而且通过相应的设置可以编辑表格中的数据。

    • 构造方法

    构造方法

       

    JTable()

    构造一个默认的 JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化。

    JTable(int numRows, int numColumns)

    使用 DefaultTableModel 构造具有 numRows 行和 numColumns 列个空单元格的 JTable。

    JTable(Object[][] rowData,

    Object[] columnNames)

    构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames。

    JTable(TableModel dm)

    构造一个 JTable,使用数据模型 dm、默认的列模型和默认的选择模型对其进行初始化。

    JTable(Vector rowData,

    Vector columnNames)

    构造一个 JTable 来显示 Vector 所组成的 Vector rowData 中的值,其列名称为 columnNames。

    • 常用方法

    方法

       

    void addColumn(TableColumn aColumn)

    将 aColumn 追加到此 JTable 的列模型所保持的列数组的尾部。

    void columnAtPoint(Point point)

    返回 point 所在的列索引;如果结果不在 [0, getColumnCount()-1] 范围内,则返回 -1。

    int getColumnCount()

    返回列模型中的列数。

    String getColumnName(int column)

    返回出现在视图中 column 列位置处的列名称。

    int getSelectedRowCount()

    返回选定行数。

    int rowAtPoint(Point point)

    返回 point 所在的行索引;如果结果不在 [0, getRowCount()-1] 范围内,则返回 -1。

    Object getValueAt(int row, int column)

    返回 row 和 column 位置的单元格值。

    获取单元格的值示例:

    Object selected = jTable1.getModel().getValueAt(
    
                        jTable1.getSelectedRow(),jTable1.getSelectedColumn());
    

      

    • 编码规范

    JTable对象名前加tbl

    • 示例

    JTable对象不能直接添加到JFrame中,需要先添加到JScrollPane中,再把JscrollPane添加到JFrame中。

    通过Matisse创建表格对象。

    • 代码示例:
    package com.etc.demo;
    
    import javax.swing.JFrame;
    
    import javax.swing.JScrollPane;
    
    import javax.swing.JTable;
    
    public class JTableTest {
    
       JFrame jf = new JFrame("简单表格");
    
       JTable jt = null;
    
       // 表格数据
    
       Object[][] tableData = { new Object[] { "Java", "23%", "持平" },
    
               new Object[] { "Python", "21%", "上升" },
    
               new Object[] { "c", "19%", "持平" },
    
               new Object[] { "c++", "20%", "持平" },
    
               new Object[] { "PHP", "18%", "上升" } };
    
       // 表头
    
       Object[] columnTitle = { "语言", "占用比率", "趋势" };
    
     
    
       public void init() {
    
           jt = new JTable(tableData, columnTitle);
    
           jf.add(new JScrollPane(jt));
    
           jf.pack();
    
           jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
           jf.setVisible(true);
    
       }
    
       public static void main(String[] args) {
    
           new JTableTest().init();
    
       }
    
    }
    

      

    JTree

    • 概念

    形象化展示分层数据的树形组件。

    根节点:上不包含节点,下包含节点。

    枝节点:上下都包含节点。

    叶节点:上包含节点,下不包含节点。

    类似磁盘(根节点)、文件夹(枝节点)和文件(叶节点)的关系。

    • 构造方法

    构造方法

       

    JTree()

    返回带有示例模型的 JTree。

    JTree(Hashtable<?,?> value)

    返回从 Hashtable 创建的 JTree,它不显示根。

    JTree(Object[] value)

    返回 JTree,指定数组的每个元素作为不被显示的新根节点的子节点。

    JTree(TreeNode root)

    返回 JTree,指定的 TreeNode 作为其根,它显示根节点。

    JTree(Vector<?> value)

    返回 JTree,指定 Vector 的每个元素作为不被显示的新根节点的子节点。

    • 常用方法

    方法

       

    void collapsePath(TreePath path)

    确保指定路径标识的节点是折叠的,并且可查看。

    void collapseRow(int row)

    确保指定行中的节点是折叠的。

    void expandPath(TreePath path)

    确保指定路径标识的节点展开,并且可查看。

    void expandRow(int row)

    确保指定行中的节点展开,并且可查看。

    TreePath getPathForRow(int row)

    返回指定行的路径。

    int[] getSelectionRows()

    返回所有当前选择的行。

    • 编码规范

    JTree不能直接添加到JFrame对象中,需要先添加到JScrollPane中。使用JScrollPane的setViewportView(Jtree jt)添加。

    • 示例代码
    package com.etc.demo;
    
     
    
    import javax.swing.JFrame;
    
    import javax.swing.JScrollPane;
    
    import javax.swing.JTree;
    
    import javax.swing.tree.DefaultMutableTreeNode;
    
    import javax.swing.tree.DefaultTreeModel;
    
     
    
    public class JTreeTest {
    
     
    
       JFrame f = new JFrame("树形节点测试");
    
       JScrollPane jsp = new JScrollPane();
    
     
    
       public void init() {
    
           // 创建根节点
    
           DefaultMutableTreeNode root = new DefaultMutableTreeNode("根节点");
    
           // 创建枝节点
    
           DefaultMutableTreeNode parent = new DefaultMutableTreeNode("枝节点");
    
           // 创建叶节点
    
           DefaultMutableTreeNode leaf = new DefaultMutableTreeNode("叶节点");
    
           // 关联节点
    
           parent.add(leaf);
    
           root.add(parent);
    
           // 添加到带滚动条的面板中
    
           DefaultTreeModel dtm= new DefaultTreeModel(root);
    
           JTree jt = new JTree(dtm);
    
           jsp.setViewportView(jt);//属性菜单添加到JScrollPane中
    
           f.add(jsp);
    
           f.pack();
    
           f.setLocationRelativeTo(null);
    
           f.setVisible(true);
    
       }
    
     
    
       public static void main(String[] args) {
    
           new JTreeTest().init();
    
       }
    
    }
    

      

    上机练习:公司组织结构树形菜单

    需求描述:

    完成如下公司组织结构的树形菜单开发。

     

    完成时间:20分钟。

    Swing菜单组件

    定义

    窗体上的选项列表。作为软件功能或者任务的划分,指明用户的操作。

    菜单的组成

    JMenuBar:菜单栏的实现。 

    JMenu:包含了JMenuItem的弹窗窗口。 

    JMenuItem:菜单项的实现。当用户选中他的时候就会执行相应的操作。

    JMenuBar

     

    • 用来创建一个水平菜单栏。
    • 只能作为组件添加到JFrame、JWindow或者JInternalFrame窗体中。
    • 需要javax.swing .SingleSelectionModel接口和javax.swing.LookAndFeel类来辅助工作。
    • javax.swing .SingleSelectionModel接口用于跟踪当前选中的菜单。
    • javax.swing.LookAndFeel类负责绘制菜单栏,并对其中发生的事件做出响应。

    JMenu

     

    • 继承自JMenuItem,它是一个包含了JMenuItem的弹窗。用户选择JMenuBar上的菜单项时,会显示该菜单项下的所有JMenuItem。
    • 当他添加到JMenuBar时,将显示为文本字符串。
    • 当用户单击此字符串时,则显示一个弹出式菜单。
    • JMenu可以包含以下菜单项:JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem、JSeparator等。
    • 需要两个附加类来辅助其工作:javax.swing.JPopupMenu类和javax.swing.LookAndFeel类。
    • javax.swing.JPopupMenu:弹出菜单的实现,弹出菜单是一个可弹出并显示一系列选项的小窗口。
    • javax.swing.JPopupMenu:负责绘制菜单栏中的菜单,以及负责对发生在其中的事件做出响应。

    JMenuItem

     

    • 菜单中的项的实现。菜单项本质上是位于列表中的按钮。当用户选择“按钮”时,则执行与菜单项关联的操作。JPopupMenu 中包含的 JMenuItem 正好执行该功能。
    • JMenuItem通常是JMenu或JPopupMenu中选项的标题。

    示例代码

    package com.etc.demo;
    
     
    
    import javax.swing.JFrame;
    
    import javax.swing.JMenu;
    
    import javax.swing.JMenuBar;
    
    import javax.swing.JMenuItem;
    
     
    
    public class JMenuTest {
    
        JFrame jf = new JFrame("菜单栏测试");
    
        public void init() {
    
            // 创建菜单栏
    
            JMenuBar mnuBar = new JMenuBar();
    
            // 创建JMenu对象
    
            JMenu mnuFile = new JMenu();
    
            JMenu mnuEdit = new JMenu();
    
            JMenu mnuView = new JMenu();
    
            JMenu mnuHelp = new JMenu();
    
            // 创建JMenuItem对象
    
            JMenuItem mnuiNew = new JMenuItem();
    
            JMenuItem mnuiOpen = new JMenuItem();
    
            JMenuItem mnuiSave = new JMenuItem();
    
            JMenuItem mnuiSaveAs = new JMenuItem();
    
            JMenuItem mnuiExit = new JMenuItem();
    
            // 为菜单项赋显示值
    
            mnuFile.setText("文件");
    
            mnuEdit.setText("编辑");
    
            mnuView.setText("视图");
    
            mnuHelp.setText("帮助");
    
     
    
            mnuiNew.setText("新建");
    
            mnuiOpen.setText("打开");
    
            mnuiSave.setText("保存");
    
            mnuiSaveAs.setText("另存为");
    
            mnuiExit.setText("退出");
    
     
    
            // 关联菜单项
    
            mnuBar.add(mnuFile);
    
            mnuBar.add(mnuEdit);
    
            mnuBar.add(mnuView);
    
            mnuBar.add(mnuHelp);
    
     
    
            mnuFile.add(mnuiNew);
    
            mnuFile.add(mnuiOpen);
    
            mnuFile.add(mnuiSave);
    
            mnuFile.add(mnuiSaveAs);
    
            mnuFile.add(mnuiExit);
    
     
    
            // 把菜单放入窗体中
    
            jf.setSize(300, 200);
    
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            jf.setJMenuBar(mnuBar);
    
            jf.setVisible(true);
    
        }
    
     
    
        public static void main(String[] args) {
    
            new JMenuTest().init();
    
        }
    
    }
    

      



    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    纪念一下なぞなぞゲーム
    071221 晴
    Sightseeing Cows poj3621
    【HDU 5721】Palace(平面最近点对)
    继承和多态的一些知识点
    3D Convex Hull HDU 3662 三维凸包
    Monthly Expense POJ 3273 二分
    确定比赛名次 HDU 1285拓扑排序裸题
    序列变换
    Dropping tests 二分+01分数规划
  • 原文地址:https://www.cnblogs.com/rask/p/8258953.html
Copyright © 2011-2022 走看看