zoukankan      html  css  js  c++  java
  • 第10章 图形用户界面设计

    GUI构造格式

    1)导入若干有关的包
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    2)public class 类名 extends JFrame implements{
      数据区:添加到窗体中的各组件的引用
    
      public 构造方法名(){
        super(窗体的标题);
        Container  container=getContentPane();
        container.setLayout(new FlowLayout());//布局设置
    
        生成各组件对象,并进行必要的设置
          container.add(各组件);
        有关组件进行事件处理;  //下面进行
               bt1.addActionListener(this);
               public void actionPerformed( ActionEvent e)
              {
                  if(e.getSource==bt1){}
                  if(e.getSource==bt2){}    
              }
    
        setSize(int width,int height);//设置窗体大小
        setVisible(true);//设置窗体可见
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//点击右上角关闭窗体
        }
    }

    AWTSWING组件

    java.awt

    • 组件Component是抽象类,定义了所有组件所具有的通用特性和行为,并派生出其他所有的组件。
    • 容器ContainerComponent的子类,它具有组件的所有性质,同时又具有容纳其它组件和容器的功能。

    java.swing

    SwingAWT的扩展,Swing组件以“J”开头

    从功能上分:
    (1)顶层容器:JFrame,JApplet,JDialog,JWindow共4个
    (2)普通容器:JPanel,JScrollPane,JSplitPane,JToolBar
    (3)特殊容器:在GUI起特殊作用的中间层JInternalFrame,JLayeredPane,JRootPane.
    (4)基本控件:实现人际交互的组件,如JButton,JComboBox,JList,JMenu,JSlider,JTextField
    (5)向用户显示不可编辑信息的组件.例如JLabel,JProgressBar,ToolTip
    (6)向用户显示能被编辑的格式化信息的组件.如JColorChooser, JFileChooser,JTable,JTextArea

    Swing组件添加

    AWT组件不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(content pane)上。
    例如,对JFrame顶层容器而言,添加组件有两种方式:
    方式1:用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent);
    方式2:建立一个JPanel中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
        JPanel contentPane=new JPanel( )……//把其它组件添加到JPanel中;frame.setContentPane(contentPane);

    容器面板

    JFrame

    1. Container getContentPane():获得内容面板。
    2. void setContentPane(Container):设置内容面板。
    3. void setMenuBar(JMenuBar):设置菜单条。
    4. void setTitle(String title):将窗口标题设置为指定的字符串。
    5. void setVisible(boolean b):根据参数b 的值显示或隐藏此组件。
    6. void setSize(Dimension d):设置窗口的大小,宽度d.width,高度d.height。
    7. void pack():窗体调整到足够显示所有组件。
    8. void validate():验证此容器及其所有子组件。
    9. void setLocation(int x, int y):将窗体移到新位置。
    10. void setResizable(boolean):设置窗体是否允许拖动以调整大小

    void setDefaultCloseOperation(int operation):设置用户在此窗体上发起 “close” 时默认执行的操作。Operation的值必须指定:
    WindowConstants.DO_NOTHING_ON_CLOSE
    WindowConstants.HIDE_ON_CLOSE(默认值):
    WindowConstants.DISPOSE_ON_CLOSE
    JFrame .EXIT_ON_CLOS

    JPanel

    • void setBorder(Border border):设置组件外围的边框
    • void setTooltipText(String text):为组件设置对用户有帮助的提示信息。
    • protected void paintComponent(Graphics g)调用repaint()方法可间接调用paintComponent方法以达到重新绘图的目的。
    • void setOpaque(boolean isOpaque):isOpaque true时,表示组件为不透明(绘制组件时将清除组件的背景);否则该组件为透明(绘制组件时不清除组件的背景)。默认值为 false。

    内容组件

    命令按钮(JButton)

    1.创建按钮对象

    JButton类常用的一组构造方法:

    • new JButton(String text):创建一个带文本的按钮。
    • new JButton(Icon icon) :创建一个带图标的按钮。
    • new JButton(String text, Icon icon) 创建一个带文本和图标的按钮。 

    2.按钮对象的常用方法

    • getLabel( ):返回按钮的标签字符串;
    • setLabel(String s):设置按钮的标签为字符串s。

    标签JLabel

    JLabel标签是用户不能修改只能查看其内容的文本显示区域,它起到信息说明的作用。JLabel对象可以显示文本和图像。

    JLabel类常用的构造方法

    • new JLabel(String text):创建一个带文本的标签
    • new JLabel(Icon image) :创建一个带图像的标签
    • new JLabel(String text, int horizontalAlignment)HorizontalAlignment值(水平对齐方式):SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADINGSwingConstants.TRAILING
    • new JLabel(String text, Icon icon,int horizontalAlignment)创建具有指定文本、图像和水平对齐方式的JLabel对象,该标签在其显示区内垂直居中对齐。文本位于图像的结尾。 

    设置或读取JLabel对象属性的常用方法

    • 设置或读取JLabel显示的文本:setText(String text) 、String getText()
    • 设置或读取JLabel显示的图像:setIcon(Icon image)、getIcon()
    • 设置JLabel显示文本的前景色和背景色:setForeground(Color c)、setBackground(Color c)
    • 设置JLabel显示的文本字体:setFont(Font f)

    例:创建文本内容为“照片”, 图像是czims.jpg,且整个标签水平靠左对齐的JLabel实例语句:
      Icon bug = new ImageIcon (getClass().getResource("czims.jpg" ));
      label2 = new JLabel("照片", bug,SwingConstants.LEFT );

    单行文本框(JTextField、JPasswordField)

    允许编辑单行文本,JTextField显示用户输入的内容,JPasswordField隐藏用户实际输入的内容。

    常用的构造方法

    • new JTextField():构造一个内容为空的JTextField
    • new JTextField(int columns):内容为空,有指定列宽;new JTextField(String text):显示指定文本。
    • new JTextField(String text, int columns):有一个指定文本和列宽。
    • setEditable(boolean b):指定文本框的可编辑性

    多行文本域(JTextArea)

    • new JTextArea(int rows,int cols):构造rows行和cols列的文本区
    • getText()setText(String s):取得文本区内容和设置文本区
    • append(String s):追加文本

    滚动条面板(JScrollPane)

    • JScrollPane是带滚动条的面板。它是一个容器组件,其作用是通过滚动条在一个较小的区域显示较多大的内容。
    • JScrollPane的构造方法:new JScrollPane(Component view)——box.add( new JScrollPane( textArea1 ) ); 
    • 创建一个显示指定组件内容的 JScrollPane,只要组件的内容超过视图大小就会显示水平和垂直滚动条。 

    复选框按钮JCheckBox)

    创建一个带文本和图标的复选框,并指定其最初是否处于选定状态,没有指定默认未选中。

    • JCheckBox(String text)
    • JCheckBox(String text, boolean selected)
    • JCheckBox(Icon icon, boolean selected)
    • JCheckBox(String text, Icon icon, boolean selected)

    单选按钮JRadioButton)

    创建一个具有指定的文本、图像和选择状态的单选按钮。
    单选按钮与ButtonGroup对象配合使用,可创建一组单选按钮,用户一次只能选择其中的一个。

    • JRadioButton(String text)
    • JRadioButton(String text, boolean selected)
    • JRadioButton(Icon icon)
    • RadioButton(String text, Icon icon, boolean selected)

    布局管理器

    标准布局管理器类:FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout、BoxLayout,其中前5个布局管理器类在java.awt包中,而BoxLayoutjavax.swing包中。

    设定容器的布局管理器,用Container类的方法:setLayout(LayoutManage layoutmanage)

    • JFrame容器的默认布局管理器BorderLayout
    • getContentPane()容器的默认布局管理器是BorderLayout
    • JPanelJApplet容器的默认布局管理器FlowLayout

    FlowLayout布局管理器

    • 将组件按加入的顺序,将它们从左向右、从上至下(一行放不下,就放入下一行)地放置在容器中,并允许设定组件的纵横间隔和水平对齐方式
    • void setAlignment(int align):设置此布局的对齐方式。
    • void layoutContainer(Container target):以FlowLayout的对齐方式重新布置容器。

    BorderLayout布局管理器

    • 使用地理上的五个方向:NORTH、SOUTH、WEST、EAST、CENTER来确定组件添加的位置,每个方位区域只能放一个组件。
    • BorderLayout():构造一个新的边界布局,组件中没有间距。
    • BorderLayout(int hgap, int vgap):构造一个边界布局,组件间指定水平间距和垂直间距。
    • container.setLayout(new BorderLayout());container.add(new Button(“North"),BorderLayout.NORTH)

    GridLayout布局管理器

    将容器划分为网格,以便在行列中放置组件。GridLayout中的每个Component都有相同的宽度和高度。

    添加到GridLayout中的组件会依序从左至右、由上至下地填充到每个格子。

    • GridLayout():创建一个1行1列的网格布局。
    • GridLayout(int rows, int cols):用指定的行数和列数创建一个网格布局。
    • GridLayout(int rows, int cols, int hgap, int vgap):用指定的行数和列数创建一个网格布局,并指定网格单元间水平间距和垂直间距。

    不使用布局管理器

    • 调用容器的setLayout(null)将布局管理器设置为空。调用组件的setBounds()方法设置组件的位置和大小
    • setBounds(int x,int y,int width,int height)x/y设置组件的位置,width/height设置组件的宽度和高度

    菜单

    1.创建菜单栏JMenuBar

    JMenuBar bar = new JMenuBar();     //创建空的菜单栏
    JMenuBar meunBar=new JMenuBar(new JMenu("File")); //创建一个带有菜单的菜单栏语句
    创建完菜单栏,使用JAppletJFrame类的setJMenuBar方法将菜单栏添加到窗体中。

    2.创建多个JMenu菜单并加入到菜单栏中

    JMenu fileMenu = new JMenu( "File" );
    bar.add(fileMenu);

    3.创建菜单项JMenuItem加入菜单中

    为每个菜单(JMenu)创建其所包含的子菜单或菜单项,并把子菜单或菜单项加入到菜单中。   
    JMenuItem、JCheckBoxMenuItem(复选菜单项)、JRadioButtonMenuItem(单选菜单项)
    例如,创建2个JMenuItem对象并加入菜单fileMenu中。
    JMenuItem aboutItem = new JMenuItem( "About..." );
    JMenuItem exitItem = new JMenuItem( "Exit" );
    fileMenu.add( exitItem );fileMenu.add( aboutItem );

    事件监听

    监听器是一个对象,具有监听接口

    • 构造监听内部类,生成监听对象,给事件源注册监听器(对象)
    private Handler h;///声明监听对象
    h=new Handler();///创建监听对象
    btExit.addActionListener(h);///给事件源注册监听器
    private class Handler implements ActionListener{///构造内部监听类
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(Test.this,''Byes~'');///弹出提示框
            dispose();
        }
    }
    内部监听类
    • 自身类做监听类(声明接口),不需要建立监听器对象,给事件源注册监听器(this
    public class Test extends implements ActionListener{
        ....
        btExit.addActionListener(this);///给事件源注册监听器
        public void actionPerformed(ActionEvent e){///实现抽象方法
            JOptionPane.showMessageDialog(///弹出提示框
            dispose();
        }
    }
    自身作为监听类
    • 监听类是匿名类,创建匿名类的同时给事件源注册监听器,事件源即监听对象。
    btExit.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            JOptionPane.showMessageDialog(///弹出提示框
            dispose();
        }
    });///创建匿名类使用接口/父类名,创建类同时创建对象
    匿名监听类
    • ActionPerformed内判断事件来源
    if(e.getSource()==bt1){}///按下bt1按钮
    if(e.getSource()==bt2){}///按下bt2按钮

    ActionEvent事件响应

    • 点击JButton事件响应;点击JMenuItem事件响应
    • (构造监听类),给事件源注册事件监听器,为这个接口的actionPerformed(ActionEvent e)方法编写方法体。
    • e.getSource( ):获取引发动作事件的按钮对象引用。e.getActionCommand( ):获取按钮的标签。
    • 当用户在文本框JTextField中按回车键时,将引发ActionEvent动作事件。JTextArea却不能产生ActionEvent事件。
    越努力越幸运!
  • 相关阅读:
    SQL 取日期
    myeclipse 8.5 安装jbpm3.2开发插件
    持续感悟
    程序员应该读的书与经常上的网站
    java连接ms sql server各类问题解析
    怎么实现Redis的高可用?(主从、哨兵、集群)
    Web系统突然爆”Asp.net ajax客户端框架未能加载“的一种可能原因(误改服务器系统时间)
    【转】Skyline软件介绍
    ArcSDE启动遇到ORA12560: TNS: 协议适配器错误解决办法
    开放源代码GIS资源集锦
  • 原文地址:https://www.cnblogs.com/Littlejiajia/p/13509731.html
Copyright © 2011-2022 走看看