第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事件。
posted @ 2020-08-16 00:07  Littlejiajia  阅读(127)  评论(0编辑  收藏  举报