Java编程——图形程序设计

Java编程——图形程序设计

目录:

  1. 基础知识
    1. 窗体组件类结构
    2. Swing和AWT对比
    3. 组件(Component & JComponent)
    4. 顶层窗体(Frame & JFrame)
    5. 工具类(Toolkit)
    6. 窗口(Window)
    7. 字体(Font)
    8. 图形(Graphics)
    9. 容器(Container)
    10. 按钮(JButton)
    11. 选择组件(多选按钮、单选按钮、下拉框)
    12. 对话框(JDialog)
    13. 下拉框(JComboBox)
    14. 文本输入(文本框、密码框、文本域、标签和标签组件)
    15. 事件处理(event)
    16. 设计模式
    17. 布局管理器

一、基础知识

1、窗体组件类结构:

  • java.lang.Object
    • java.awt.Component(图形对象)
      • java.awt.Container(容器对象)
        • javax.swing.JComponent(组件)
          • JPanel(面板,要放在窗体或对话框中)
          • JOptionPane(小对话框)
          • JButton(按钮)
          • JLabel(标签)
          • JTextField(文本框)
          • JTextArea(文本域)
          • JPassword(密码框)
          • JComBox(下拉框)
          • JList(列表框)
          • JCheckBox(多选按钮)
          • JRadioButton(单选按钮)
          • JList(列表框)
        • java.awt.Window(窗口)
          • java.awt.Dialog(对话框)
            • java.swing.JDialog(对话框)
          • java.awt.Frame(窗体)
            • java.swing.JFrame(窗体)

2、Swing和AWT对比:

  • AWT(Abstract Window Toolkit,抽象窗口工具箱):基本AWT库采用将处理用户界面元素的任务委派给每个目标平台(Windows等)的本地GUI工具箱的方式,由本地GUI工具箱负责用户界面元素的创建和动作。因此,观感的效果依赖于目标平台。
  • Swing提供能力更强大的用户界面组件,对底层平台依赖得很少,因此与平台相关的bug很少。Swing给予不同平台的用户一致的感觉。
  • Swing是指“被绘制的”用户界面类;AWT是指像事件处理这样的窗口工具箱的底层机制。

3、组件(Component & JComponent):

  • 常用方法:
    • Dimension getPreferredSize():覆盖这个方法,返回这个组件的首选大小
    • void setLocation(int x, int y)和setBounds(int x, int y, int width, int height):设置组件的位置
    • void repaint():重新绘制组件
    • void paintComponent(Graphics g):覆盖这个方法来描述应该如何绘制自己的组件
    • void setBackground(Color c):设置背景颜色
    • void setForeground(Color c):设置前景颜色
    • (JComponent)void revalidate():重新计算组件的位置和大小
    • void setFont(Font f):设置组件的字体

4、顶层窗体(Frame & JFrame):

  • 窗体被设计为放置组件的容器,可以将菜单栏和其他的用户界面元素放置在其中。
  • 常用方法:
    • void setLocation(int x, int y)和setBounds(int x, int y, int width, int height):设置框架的位置
    • JFrame void setDefaultCloseOperation(参数):
      • JFrame.HIDE_ON_CLOSE:隐藏窗体,但不停止程序
      • JFrame.DO_NOTHING_ON_CLOSE:无任何操作
      • JFrame.EXIT_ON_CLOSE:隐藏窗体,并停止程序
      • JFrame.DISPOSE_ON_CLOSE:释放窗体资源
    • void setIconImage(Image image):在标题栏、任务切换窗口等位置显示哪个图标
    • void setSize(int width, int height):设置窗体的大小,单位:像素(继承Window)
    • void setLocation(int width, int height):设置座标,单位:像素(继承Window)
    • void setBounds(int x, int y, int width, int height):设置窗体座标、大小,单位:像素(继承Window)
    • void setTitle(String s):改变标题栏的文字
    • void setResizable(boolean b):利用一个boolean值确定窗体的大小是否允许用户改变
    • Container getContentPane():返回这个JFrame的窗体容器对象
    • Component add(Component c):将一个给定的组件添加到该框架的内容窗格中

5、工具类(Toolkit):

  • static Toolkit getDefaultToolkit():返回默认的工具箱
  • Dimension getScreenSize():返回用户屏幕的尺寸

6、窗口(Window):

  • 常用方法:
    • void pack():调整窗口大小,要考虑到其他组件的首选大小
    • void toFront():将这个窗口显示在其他窗口前面
    • void toBack():将这个窗口移动到桌面窗口栈的后面,并相应地重新排列所有的可见窗口
    • void setLocationByPlatform(boolean b):该属性在窗口显示之前被设置,由平台选择一个合适的位置

7、字体(Font):

  • 常用方法:
    • Font(String name, int style, int size):创建一个新字体对象,style如PLAIN、BOLD、ITALIC、BOLD+ITALIC等

8、图形(Graphics):

  • 常用方法:
    • void setFont(Font font):设置当前的字体,这种字体被应用于后续的文本绘制操作中。
    • void drawString(String str, int x, int y):采用当前字体和颜色绘制一个字符串。
    • boolean drawImage(Image img, int x, int y, ImageObserver observer):绘制一幅非比例图像。
    • boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer):绘制一幅比例图像。系统按照比例将图像放入给定宽和高的区域。
    • void copyArea(int x, int y, int width, int height, int dx, int dy):拷贝屏幕的一块区域。

9、容器(Container):

  • 常用方法:
    • void setLayout(LayoutManager m):为容器设置布局管理器
    • Component add(Component c):将组件添加到容器中
    • void remove(Component comp):删除组件
    • void validate():验证容器中的组件(刷新)
    • void setBackground(Color c):设置背景颜色(继承Component)

10、按钮(JButton):

  • 常用方法:
    • void setEnabled(boolean b):按钮不可点击为false,可点击为true

11、选择组件:

  • 多选按钮(JCheckBox):
    • 用户通过点击某个多选按钮来选择相应的选项,再点击则取消复选。当多选按钮获得焦点时,用户也可以通过按空格键来切换选择。
    • 常用方法:
      • boolean isSelected():获取多选按钮的选择状态(继承AbstractButton类)
      • void setSelected(boolean b):设置多选按钮的选择状态(继承AbstractButton类)
  • 单选按钮(JRadioButton):
    • 为单选钮组构造一个ButtonGroup对象。然后,再将JRadioButton类型的对象添加到按钮组中。按钮组负责在新按钮被按下时,取消前一个被按下的按钮的选择状态。
    • ButtonGroup g = new ButtonGroup();
    • g.add(new JRadioButton("按钮1", false));第二个参数false表明这个按钮初始状态是不被选择
  • 下拉框(JComboBox):
    • 当用户点击下拉框时,用户可以从中进行选择。
    • 常用方法:
      • comboBox.addItem("身份证");
      • comboBox.addItem("户口簿");
      • void removeItem(Object item):从选项列表中删除一个选项
      • 或者使用数组:JComboBox<String> combox = new JComboBox<>(items);//items为String数组
      • 或者创建下拉列表模型,然后向列表中添加数据模型:ComboBoxModel cm = new DefaultComboxModel<>(items); combox.setModel(cm)
      • comboBox.setBounds(10,10, 80, 20):设置下拉列表座标和大小
      • c.add(comBox);
      • combox.setEditable(true):设置下拉框可编辑

12、对话框(JDialog):

  • 常用方法:
    • Container getContentPane():返回这个JDialog的窗体容器对象
    • 构造方法:JDialog(Frame owner, String title, boolean modal):参数一:父窗体对象;参数二:对话框标题;标题三:是否阻塞父窗体

13、列表框(JList):

  • 常用方法:
    • DefaultListModel<String> model = new DefaultListModel<>();//列表框数据模型
    • for(String tmp:items){model.addElement(tmp);//向数据模型添加元素}
    • 设置选择模式:
      • jl.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION):随便选
      • jl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION):单选
      • jl.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION):只能选择相邻的元素
    • 为列表框添加滚动条:JScrollPane js = new JScrollPane(jl)
    • js.setBounds(10, 10, 100, 100):设置座标和大小
    • jl.getSelectedValuesList():获取列表框中选中的所有元素

14、文本输入:

  • 文本框(JTextField):
    • 只能接收单行文本的输入
    • 常用方法:
      • void setColumns(int columns):设置文本框长度
      • void setFont(Font f):设置字体格式
      • void setText(String t):设置文本(继承JTextComponent)
      • String getText():获取文本框中的内容
  • 密码框(JPasswordField):
    • 只能接收单行文本的输入,但不会将输入的内容显示出来。每个输入的字符都用回显字符(echo character)表示。
    • 常用方法:
      • void setColumns(int columns):设置密码框长度
      • void setFont(Font f):设置字体格式
      • void setEchoChar(char c):设置回显字符
      • char[] getPassword():获取密码的字符数组,String str = new String(ch),将字符数组转换为String
  • 文本域(JTextArea):
    • 能接收多行文本的输入
    • 常用方法:
      • void setFont(Font f):设置字体格式
      • void setColumns(int columns):设定列数,使用setColumns方法改变了一个文本域的大小之后,需要调用包含这个文本框的容器的revalidate方法。调用该方法后,布局管理器会重新设置容器的大小。
      • void setRows(int rows):设定行数
      • void setText(String t):设置文本(继承JTextComponent)
      • void append(String str):添加内容
      • void insert(String str, int pos) :插入内容,在第pos个位置之后插入内容
      • void setLineWrap(boolean wrap):设置换行特性,true为换行
      • JScrollPane js = new JScrollPane(textArea);//给文本域添加滚动条
  • 标签和标签组件(JLabel):
    • 标签时容纳文本的组件,它们没有任何的修饰,也不能响应用户输入。可以利用标签来标识组件。
    • 常用方法:
      • void setText(String text):更改标签内容
      • void setFont(Font font):设置字体(继承JComponent)
      • void setIcon(Icon icon):设置图片

15、事件处理(event):

  • 事件委托模型(event delegation model)在AWT所知的事件范围内,完全可以控制事件从事件源(event source)到事件监听器(event listener)的传递过程,并将任何对象指派给事件监听器。
  • AWT事件处理机制:
    • 监听器对象是一个实现了特定监听器接口的类的实例。
    • 事件源是一个能够注册监听器对象并发送事件对象的对象。
    • 当事件发生时,事件源将事件对象传递给所有注册的监听器。
    • 监听器对象将利用事件对象中的信息决定如何对事件做出响应。
  • 事件监听器对象通常需要执行一些对其他对象可能产生影响的操作。可以策略性地将监听器类放置在需要修改状态的那个类中。
  • java.awt.event将事件分成底层事件(low-level)和语义事件(semantic)
    • 语义事件:表示用户动作的事件。(点击按钮、调节滚动条)
    • 底层事件:形成那些事件的事件。(按下鼠标、拖动鼠标、在按钮区中拾起鼠标)
  • 常用的5个底层事件:
    • KeyEvent:一个键被按下或释放
    • MouseEvent:鼠标键被按下、释放、移动或拖动
    • MouseWheelEvent:鼠标滚轮被转动
    • FocusEvent:某个组件获得焦点或失去焦点
    • WindowEvent:窗口状态被改变
  • 常用的语义事件:
    • ActionEvent:对应按钮点击、菜单选择、选择列表项或在文本框中Enter
    • AdjustmentEvent:用户调节滚动条
    • ItemEvent:用户从复选框或列表框中选择一项

16、设计模式:

  • 容器和组件:组合模式(composite)
  • 带滚动条的面板:装饰器模式(decorator)
  • 布局管理器:策略模式(strategy)
  • 模型-视图-控制器模式(model-view-controller)
    • 模型:存储内容,必须实现改变内容和查找内容的方法。
    • 视图:显示内容,每个视图可以显示全部内容的不同部分或不同形式。
    • 控制器:处理用户输入事件,然后决定是否把这些事件转化成对模型或视图的改变。

17、布局管理器:

  • 通常,组件放置在容器中,布局管理器决定容器中的组件具体放置的位置和大小。
    • 绝对定位:不使用任何布局管理器
      • frame.setLayout(null)
    • 流布局管理器(Flow Layout manager):面板的默认布局管理器,将维持每个组件的最佳尺寸。默认是居中布局
      • c.setLayout(new FlowLayout(FlowLayout.Right, 20, 20)):给容器设置流布局,右对齐,左右间隔20,上下间隔20。
    • 边界布局管理器(Border Layout manager):JFrame窗体的默认布局管理器,分为东西南北中(EAST、WEST、SOUTH、NORTH、CENTER常量),默认添加到CENTER区。同一区域的组件会覆盖。边框布局会扩展所有组件的尺寸以便填满可用空间。
      • frame.add(component, BorderLayout.SOUTH)
    • 网格布局管理器(Grid Layout manager):按照行列排列所有的组件,每个单元大小都是一样的。
      • panel.setLayout(new GridLayout(4, 4, 1, 2)):4行4列,水平间距为1像素,垂直间距为2像素。如果组件数目多于网格数,网格自动扩展。
    • 网格组布局管理器(GridBag Layout manager):
      • GridBagLayout gridBag= new GridBagLayout();
      • 容器对象.setLayout(grifBag);
      • GridbagConstraints 约束对象 = new GridbagConstraints();组件的约束
      • 容器对象.add(组件对象, 约束对象);
      • GridBagConstraints常用属性:
        • gridx, gridy:组件所在的位置
        • gridwidth, gridheight:组件占用的行数和列数
        • anchor:组件所在的方位
        • fill:组件的填充方式,NONE,HORIZONTAL,VERTICAL,BOTH
        • insets:组件与单元格边缘的最小距离,top, left, bottom, right
        • ipadx, ipady:组件的首选大小
        • weightx, weighty:一个单元格的最大宽高

参考文献:

[1]Cay S. Horstmann. Java核心技术 卷Ⅰ基础知识(原书第10版). [M]北京:机械工业出版社,2016.09;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章