【Java】_图形用户界面(GUI)

学习资料来源:斯坦福大学公开课编程方法cs106aJAVA

学习过程中使用的代码、笔记初稿(主要按顺序记录视频教程讲解内容)以及课程讲义已上传至下载中心(有兴趣者可自行下载学习),

学习过程中的大部分程序需要导入acm.jar包(已上传至下载中心,也可自行进入http://jtf.acm.org/ 进行下载),

GObject:

super()——调用父类构造函数

acm.graphics——添加进画布中的图形是有堆叠顺序的

GCanvas——拼贴画的背景画布

画布(GCanvas)和图形程序(GraphicsProgram)具有的方法:
        add(object)  向画布中添加对象
        add(object,x,y)  指定添加对象坐标
        remove(object)  移除对象
        getElementAt(x,y)-frontmost or null  根据坐标获取对象
        getHidth()  获取宽度
        getHeight()  获取高度
        setBackground(c)-color 设置画布背景颜色

图形程序独有的方法:
        pause(milliseconds) —— 暂停(单位为毫秒)  
        waitForClick() —— 等待鼠标点击事件

CObjects通用方法:
        setLocation(x,y) —— 设置坐标
        move(dx,dy) —— 偏移量 (dx为正向右移动,dx为负向左移动,dy为正向下移动,dy为负向上移动 )
        getX() getY() —— 返回对象的x和y坐标  
        getHidth() getHeight() —— 返回长和宽  
        contains(x,y) —— 返回真假(在特定的点处是否有存在对象)  
        setColor(c) getColor() —— 设置/获取对象颜色  
        setVisible(flag) —— 设置可视性(true/false)  
        isVisible() —— 如果对象可视visible返回true
        sendToFront() sendToBack() —— 改变z轴顺序(将指定对象移至z轴最前|最后位置)
        sendForward() sendBackward()——在z轴上移动对象

  GObject中的常用接口(Interface):
        填充接口:GFillable——setFilled(flag)  isFilled()  setFillColor(c)  getFillColor()
        设置对象窗口:CResizable——setSize(width,height)  setBounds(x,y,width,height)
        缩放接口:GScalable——scale(sf)   scale(sx,sy)-sx,sy为x,y上的缩放比例

与排版有关的与字符有关的线:
        基线(baseline)——字符出现位置的线(有些字符会超出)-下滑线
        字符串高度(height):是指两行基准线之间的距离
        上线(ascent)——指最高的字符——让字符居中显示时使用
        下线(decent)——指基线下字符最远能达到的距离

GPolygon——画出线段组成的对称图形
    需要有一个参考点(假想参考点)——一般是图形的中心点

用法:(绘制一个菱形)
            private GPolygon createDiamend(double width, double height){
                GPolygon diamend = new GPolygon();
                //diamend.addVertex(-width / 2, 0);
                diamend.addEdge(width/2,- height/2);
                //diamend.addVertex(0, -height / 2);
                diamend.addEdge(width/2, height/2);
                //diamend.addVertex(width / 2, 0);
                diamend.addEdge(-width/2, height/2);
                //diamend.addVertex(0, height / 2);
                diamend.addEdge(-width/2,- height/2);
                return diamend;
            }
            指定多边形顶点:
                addVertex(x,y)————x、y是相对于参考点的坐标
                addEdge(dx,dy)——添加一个顶点与前一个点有关

GCompound——画复合的图形-把几种图形复合在一起成为一个对象

事件驱动程序(Event-driven Programs)

监听器(listener)—impot java.awt.event.*;
            addMouseListeners() —— 鼠标监听器
            addKeyListeners() —— 键盘监听器

Mouse Events:
            mouseClicked(e)    ——点击
            mousePressed(e)    ——按着鼠标
            mouseReleased(e)   ——松开鼠标
            mouseMoved(e)      ——移动鼠标
            mouseDragged(e)    ——按着鼠标拖动

  Keyboard Events:
            keyPressed(e)    ——按着键盘中的某键
            keyReleased(e)   ——松开键盘中的某键
            keyTyped(e)      ——按下和释放的复合

用法:
            /*捕获鼠标的实时位置信息*/
            public class MouseTracker extends GraphicsProgram{

public void run(){
                    label = new GLabel("");
                    label.setFont("Times New Roman-36");//设置字体
                    add(label, 50, 50);
                    
                    addMouseListeners();//添加鼠标监听器
                }
                public void mouseMoved(MouseEvent e){//鼠标移动时执行的操作
                    label.setLabel("Mouse: ("+e.getX()+", "+e.getY()+")");//显示鼠标位置信息
                }
                
                private GLabel label;
            }

图形用户界面 —— GUI(Graphic User Interface)—— “Gooey”
import java.awt.event.*;——追踪事件
import javax.swing.*;——创建交互对象

组件:
        Button(按键)   
        Sliders(滑块)   
        Checkboxes(复选框)  
        Radio Bottons(单选框)   
        Combo box(组合框、下拉框)
        Text box(文本框)

J组件——交互式组件
    
    动作接收器:addActionlisteners();

    
    程序窗口
    分为五个部分:—— 边界布局(border layout)

交互式组件的使用:

Button:

public void init(){
                but = new JBtton(“Hi”);
                add(but, SOUTH);//将按钮添加至SOUTH中
                addActionListeners(); —— 动作接收器
            }

public void actionPerformed(ActionEvent e){//接收动作并执行相应操作
               String cmd = e.getActionCommend();//返回的是对象的值
              if( cmd.equals(“Hi”)){
                prinln(“Hello”);
              }
            或:
              if(e.getSource == but){//getSource返回的是对象
                prinln(“Hello”);
              }
            }
            
            private JButton but;//声明按钮组件

Checkbox:
            ……init() {
                check = new JCheckBox(“Front”);
                check.setSelcted(true); —— 设置默认为选定状态
                add(check,SOUTH); —— 添加复选框
            }
            private JCheckBox check;

RadioButton:
            private JRadioButton sm;
            private JRadioButton med;
            private JRadioButton lag;

sm = new JRadioButton(“small”);
            med = new JRadioButton (“medium”);
            lag = new JRadioButton (“large”);

ButtonGroup size = new ButtonGroup(); //将单选框合并到一个组内
            size.add(sm);
            size.add(med);
            size.add(lag);

med.setSelected(true); //设置默认选项
            add(sm, SOUTH);
            add(med, SOUTH);
            add(lag, SOUTH);

Combo box:
            pick = new JComboBox();
            pick.addItem(“Black”);//添加选项
            pick.addItem (“Blue”);
            ……
            pick.setEditable(False);//设定用户不能编辑
            pick.setSelectedItem(“Black”);//设定默认选项
            add(pick,SOUTH);

private JComboBox pick;
    
        文本框(Text Flied)
            JTextField tf = new JTextField(10);
            tf.addActionListeners(this);
            add(tf.SOUTH);

if(e.getSource == tf) {
              println(“hi” + tf.getText());//tf.getText()返回文本框中的内容
            }

布局(Layout)

边界布局(border layout)
    网格布局(Grid layout)—— 从左上角向右顺序添加元素,直到行尾,然后自动换行
    表格布局(table layout)—— 很像网格布局但更精确(不会让每个部件填充整个单元)

用法:
        setLayout(new GridLayout(2,3));//2行3列
        setLayout(new TableLayout(2,3));
        add(new JButton("button 1"));
        add(new JButton("button 2"));
        add(new JButton("button 3"));
        add(new JButton("button 4"));
        add(new JButton("button 5"));
        add(new JButton("button 6"));
        
组件和对应的容器 —— Component/Container

addComponentListener(this);//listeners for Components
    行分析函数:parseLine();

示例:(创建一个容器MyCanvas)

线程(Thread):启动同一个程序,可以同时运行多个进程(一个线程就相当于一个进程,多个线程互不干扰)

Runnable接口继承自Runnable接口的类都可以作为一个线程

 创建线程:(一个类)
        public class Myclass implement Runnable {
            public Myclass () {}
            public void run() {}
        }

调用线程:(通过thread.start()调用线程的执行方法)
        Myclass x = new Myclass();
        Thread t = new Thread(x);
        t.start();

框架(JFrame)—— 装窗口的框架

用法:(创建一个Graphical Hello框架)
    public class GraphicalHelloWorld {

public static void main(String[] args) {
            JFrame frame = new JFrame("Graphical Hello");//创建框架,并为其命名为—Graphical Hello
            //创建标签Hello world! 并使其剧中显示
            JLabel label = new JLabel("Hello world!",JLabel.CENTER);//center justifield
            //向框架中添加标签,设置框架尺寸
            frame.add(label);
            frame.setSize(500, 300);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户退出时结束进程
            frame.setVisible(true);//设置框架可视性
        }
    }
    

时间: 2024-10-03 13:46:19

【Java】_图形用户界面(GUI)的相关文章

java计算器 图形用户界面 升级版 v1.02

jsp页面: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.m

java计算器 图形用户界面 升级版v2.0 (限制位数显示+四舍五入的处理)

package com.rgy.entity; import java.awt.BorderLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.JButton; import java

图形用户界面 - GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口) python常用: Tkinter PyQt wxPython 其中Tkinter为python内置库 原文地址:https://www.cnblogs.com/id19910408/p/8343658.html

黑马程序员——图形用户界面(GUI)总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 什么是GUI? GUI就是计算机通过图形化界面与用户产生的交互. 注意:Java提供的GUI对象都存储在Java.Awt和Java.Swing包中 GUI的体系结构 容器的布局管理器 FlowLayout(流式布局管理器) 从左到右的顺序排列 Panel的默认布局管理器 BorderLayout(边界布局管理器) 东南西北中顺序排列 Frame默认布局管理器 GirdLayout(网格布局管理

Java基础学习总结 -- 图形用户界面GUI(持更)

虽然目前Java算不上前端开发的主力,但是作为Java入门基础的一部分,学习Java的GUI编程还是有必要的,而且可以做出一些小且有趣的图形程序来提高学习热情.本篇学习总结均为一个Beginner的笔记与心得,如有描述不到或错误之处,敬请指正. 1. JavaGUI主要开发工具 -- Swing类库的诞生与功能 一个合格的Java Developer,不仅要掌握技术,还要有一定的Java历史背景知识储备.所以先简要介绍一下用于JavaGUI开发的主要类库:Swing. 在Java 1.0时代便有

JAVA程序设计(15.1)----- 图形用户界面GUI 制作红绿灯~

GUI  Graphics User Interrface图形化的用户界面,让用户通过点击鼠标就能完成想要做的事情: 主要是练习界面设置 界面布局 添加组件 设置组件 接口 重写 监听器 制作一个信号灯,点击下面的单选按钮 指定的信号灯亮起,代码如下: package com.lovo.homework1; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ItemEvent; import java.a

java编写图形用户界面程序--实例2:母亲节快乐!^_^o~ 努力!

最近时间越来越少了,又要准备省赛,又要备考四级! 作为一个地地道道的"农村娃"."计算机渣",作为一个在外的大学生,没能为母亲在她的节日为送礼物.亲身陪着她,现在只能默默地编个小程序送上祝福, 最近时间很少,学到的东西不多^_^o~ 努力!,每一点的成长对我来说都是有价值的努力! import java.awt.*; import javax.swing.*; import java.awt.event.*; public class 简单实例2 { public

JAVA程序设计(15.3)----- 图形用户界面GUI 制作挂钟

1.自动读取系统时间转换成挂钟 ,随系统时间走秒的 设置字体 JFrame加入各种组件  初始化并调整组件 2D画笔 双缓冲 监听器 Timer  大概就这些练习吧-- package com.lovo.homework3; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import ja

图形用户界面GUI

1. 丰富的平台 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK平台,在linux上很流行. PyQt 使用Qt平台,跨平台. 2.wxpython 创建实例GUI 实例要求: 2.1 简单的示例程序: 1 2 3 >>> i