首页 >资讯 > > 正文

Java程序设计复习提纲(下:图形界面)

博客园 2023-05-19 21:41:34
目录

上:Java程序设计复习提纲(上:入门语法) - 孤飞 - 博客园 (cnblogs.com)

基本语法与编译运行

数据类型和关键字


(资料图)

常用语法

数组与字符串

异常处理

中:Java程序设计复习提纲(中:面向对象) - 孤飞 - 博客园 (cnblogs.com)

面向对象和类

下:本文

图形界面GUI概述

Java图形用户界面(GUI)设计主要是使用Swing和JavaFX这两个库。Swing是早期Java版本中使用的主要库,而JavaFX是后来引入的,提供了更多的功能和更好的性能。

以下是关于Java GUI设计的一些基本知识:

组件(Components):组件是GUI设计的基本元素,比如按钮、文本框、标签、复选框、下拉列表等。每一个组件都有很多属性可以设置,例如大小、位置、颜色等。

容器(Containers):容器是用来包含其他组件或容器的组件。例如,面板(Panel)和框架(Frame)就是两种常用的容器。容器也可以设置布局管理器(Layout Manager),用来控制其包含的组件如何排列。

事件处理(Event Handling):用户与GUI程序的交互主要通过事件(Event)来进行。例如,点击按钮、输入文本、选中复选框等操作都会产生事件。程序需要提供事件处理器(Event Handler)来响应这些事件。

绘图和动画:Java GUI程序可以使用2D绘图API来绘制各种图形(例如线、形状、文本等),并可以使用动画API来创建动画效果。

以下是一个简单的使用Swing库创建GUI的例子:

import javax.swing.JFrame;import javax.swing.JButton;public class SimpleGUI {    public static void main(String[] args) {        // Create a new frame (a window)        JFrame frame = new JFrame("My First GUI");        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setSize(300, 200);        // Create a new button        JButton button = new JButton("Click me!");        // Add the button to the frame        frame.getContentPane().add(button);        // Make the frame visible        frame.setVisible(true);    }}

在这个例子中,我们创建了一个新的窗口,然后在窗口中添加了一个按钮。当运行这个程序时,你将会看到一个窗口,窗口中有一个可以点击的按钮。

容器

在Java GUI编程中,容器(Container)是一个可以包含其他组件(如按钮、标签、文本框等)和其他容器的组件。以下是Java中主要的容器类:

JFrame:这是一个顶层容器,通常作为应用程序的主窗口。一个JFrame对象有标题栏、最小化/最大化/关闭按钮、状态栏等。它可以包含其他容器和组件。默认情况下,关闭JFrame窗口不会终止程序,需要通过调用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法设置当关闭窗口时终止程序。
JFrame frame = new JFrame("Title");  // create a new frame with the title "Title"
JPanel:JPanel是一种通用的轻量级容器,可以用于组织其他组件和容器。通常,你会在一个JFrame窗口中添加一个或多个JPanel,然后在JPanel中添加按钮、标签等组件。
JPanel panel = new JPanel();         // create a new panel
JDialog:JDialog是一种顶层容器,通常用于创建弹出窗口。一个JDialog可以是模态的(当打开JDialog时,用户不能与其他窗口交互)或非模态的。
JDialog dialog = new JDialog(frame, "Dialog", true); // create a new modal dialog with the title "Dialog"
JScrollPane:JScrollPane是一种特殊的容器,可以为其包含的组件提供滚动条。当组件的大小超过JScrollPane的大小时,滚动条会自动出现。
JScrollPane scrollPane = new JScrollPane(textArea);  // create a new scroll pane that contains a text area

容器的布局可以通过布局管理器(Layout Manager)来管理。布局管理器可以控制容器中的组件如何排列和调整大小。Java提供了几种内置的布局管理器,如FlowLayout、BorderLayout、GridLayout、BoxLayout等。

添加组件到容器通常通过调用容器的add方法实现。例如,frame.add(button)将一个按钮添加到一个框架中。

组件

在Java图形用户界面(GUI)编程中,组件(Component)是构成用户界面的基本元素,例如按钮、文本框、标签、菜单、滑块等。下面列出了一些常见的Java GUI组件:

JButton:按钮组件,常用于触发某种行为或命令。
JButton button = new JButton("Click me!");
JLabel:标签组件,用于显示文本或图像。
JLabel label = new JLabel("Hello, World!");
JTextField:文本字段组件,用于输入和编辑单行文本。
JTextField textField = new JTextField(20); // 20 columns wide
JTextArea:文本区域组件,用于输入和编辑多行文本。
JTextArea textArea = new JTextArea(5, 20); // 5 rows and 20 columns
JCheckBox:复选框组件,允许用户选择多个选项。
JCheckBox checkBox = new JCheckBox("Check me");
JRadioButton:单选按钮组件,允许用户从多个选项中选择一个。
JRadioButton radioButton = new JRadioButton("Select me");
JComboBox:下拉列表框组件,允许用户从下拉列表中选择一个选项。
String[] choices = {"Choice 1", "Choice 2", "Choice 3"};JComboBox comboBox = new JComboBox(choices);
JSlider:滑块组件,允许用户通过拖动滑块选择一个值。
JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 50, 25); // min: 0, max: 50, initial: 25
JMenu, JMenuItem, JMenuBar:菜单组件,用于创建菜单栏和菜单项。
JMenuBar menuBar = new JMenuBar();JMenu menu = new JMenu("Menu");JMenuItem menuItem = new JMenuItem("Menu Item");menu.add(menuItem);menuBar.add(menu);

所有的这些组件都是从javax.swing.JComponent类继承的,这意味着他们都有一些公共的属性和方法,例如背景色、前景色、字体、工具提示文本等。另外,这些组件都可以注册事件监听器,以响应用户的输入(如点击、键入等)。

布局

在Java GUI编程中,布局管理器(Layout Manager)决定了容器中的组件如何定位和调整大小。以下是Java中常见的布局管理器:

FlowLayout:这是默认的布局管理器,将组件从左到右、从上到下排列,类似于英文文本的阅读顺序。
FlowLayout flowLayout = new FlowLayout();container.setLayout(flowLayout);
BorderLayout:将容器分为5个区域:North(上)、South(下)、East(右)、West(左)和Center(中)。
BorderLayout borderLayout = new BorderLayout();container.setLayout(borderLayout);
GridLayout:将容器分为等大小的网格(行和列),每个组件填充一个网格单元。
GridLayout gridLayout = new GridLayout(3, 2); // 3 rows and 2 columnscontainer.setLayout(gridLayout);
BoxLayout:将组件沿一个方向(水平或垂直)排列。
BoxLayout boxLayout = new BoxLayout(container, BoxLayout.X_AXIS); // horizontal layoutcontainer.setLayout(boxLayout);
GridBagLayout:这是最灵活的布局管理器,允许组件跨多个行和列,并可以指定组件的填充和间距。但是,这也是最复杂的布局管理器。
GridBagLayout gridBagLayout = new GridBagLayout();container.setLayout(gridBagLayout);

每个容器都有一个默认的布局管理器,例如JFrame和JDialog默认使用BorderLayout,而JPanel和JApplet默认使用FlowLayout。你可以通过调用容器的setLayout方法更改布局管理器。

布局管理器不是必需的。你可以通过将容器的布局管理器设置为null,然后手动指定每个组件的大小和位置来进行绝对定位。但是这种方法通常不推荐,因为它不能适应窗口大小的变化和不同平台的显示差异。

事件监听与处理

在Java GUI编程中,事件监听和处理是非常重要的概念。事件是用户与应用程序交互的方式,例如点击按钮、键入文本、移动鼠标等。事件监听器(Event Listener)是一个接口,包含了响应特定事件的方法。当事件发生时,事件源(Event Source,如按钮或文本框)会调用监听器的方法。

以下是Java中常见的事件和对应的监听器:

ActionEvent:当用户对具有动作的对象(如按钮或菜单项)进行操作时,就会发生此事件。对应的监听器是ActionListener
button.addActionListener(new ActionListener() {    @Override    public void actionPerformed(ActionEvent e) {        // handle the button click    }});
MouseEvent:当用户对鼠标进行操作(如点击、移动或拖动)时,就会发生此事件。对应的监听器是MouseListenerMouseMotionListener
button.addMouseListener(new MouseAdapter() {    @Override    public void mouseClicked(MouseEvent e) {        // handle the mouse click    }});
KeyEvent:当用户对键盘进行操作(如按键或释放键)时,就会发生此事件。对应的监听器是KeyListener
textField.addKeyListener(new KeyAdapter() {    @Override    public void keyPressed(KeyEvent e) {        // handle the key press    }});
ItemEvent:当用户对可选项目(如复选框或列表)进行操作时,就会发生此事件。对应的监听器是ItemListener
checkBox.addItemListener(new ItemListener() {    @Override    public void itemStateChanged(ItemEvent e) {        // handle the item state change    }});
WindowEvent:当用户对窗口进行操作(如打开、关闭或最大化)时,就会发生此事件。对应的监听器是WindowListener
frame.addWindowListener(new WindowAdapter() {    @Override    public void windowClosing(WindowEvent e) {        // handle the window closing    }});

注意:MouseAdapterKeyAdapterWindowAdapterMouseListenerKeyListenerWindowListener的适配器类。适配器类是空实现了监听器接口的类,这样你可以只覆盖你感兴趣的方法,而不是所有的方法。例如,如果你只关心鼠标点击,那么你可以只覆盖mouseClicked方法,而不需要覆盖mouseEnteredmouseExitedmousePressedmouseReleased方法。

处理事件的代码通常会改变应用程序的状态或进行某种操作。例如,当用户点击按钮时,你可能会保存数据、打开新窗口或显示消息等。

例子

我们使用上面提到的容器、组件、布局和事件监听处理来实现一个简易加减法计算器

效果:

程序代码:

import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Calculator {    public static void main(String[] args) {        // 创建一个新的JFrame实例作为主窗口        JFrame frame = new JFrame("Simple Calculator");        // 创建一个新的JPanel实例作为主面板        JPanel panel = new JPanel();        // 设置主面板的布局为GridLayout        panel.setLayout(new GridLayout(2, 3, 10, 10));        // 创建组件        JTextField textField1 = new JTextField(10);        textField1.setFont(new Font("Arial", Font.PLAIN, 20));        JTextField textField2 = new JTextField(10);        textField2.setFont(new Font("Arial", Font.PLAIN, 20));        JButton addButton = new JButton("+");        addButton.setFont(new Font("Arial", Font.PLAIN, 30));        JButton subtractButton = new JButton("-");        subtractButton.setFont(new Font("Arial", Font.PLAIN, 30));        JTextField resultField = new JTextField(10);        resultField.setFont(new Font("Arial", Font.PLAIN, 20));        resultField.setEditable(false);        // 添加组件到主面板        panel.add(textField1);        panel.add(textField2);        panel.add(resultField);        panel.add(addButton);        panel.add(subtractButton);        // 添加事件监听器到加号按钮        addButton.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                try {                    int num1 = Integer.parseInt(textField1.getText());                    int num2 = Integer.parseInt(textField2.getText());                    int sum = num1 + num2;                    resultField.setText(Integer.toString(sum));                } catch (NumberFormatException ex) {                    JOptionPane.showMessageDialog(frame, "Invalid input. Please enter only integers.");                    textField1.setText("");                    textField2.setText("");                }            }        });        // 添加事件监听器到减号按钮        subtractButton.addActionListener(new ActionListener() {            @Override            public void actionPerformed(ActionEvent e) {                try {                    int num1 = Integer.parseInt(textField1.getText());                    int num2 = Integer.parseInt(textField2.getText());                    int diff = num1 - num2;                    resultField.setText(Integer.toString(diff));                } catch (NumberFormatException ex) {                    JOptionPane.showMessageDialog(frame, "Invalid input. Please enter only integers.");                    textField1.setText("");                    textField2.setText("");                }            }        });        // 将主面板添加到主窗口        frame.add(panel);        // 设置主窗口的大小、位置和关闭操作        frame.setSize(600, 200);        frame.setLocationRelativeTo(null);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        // 显示主窗口        frame.setVisible(true);    }}
上一篇:【全球新视野】*ST富吉:今年确认收入约为1.52亿元 如何扭亏、新募投项目进展等引关注|直击业绩会 下一篇:最后一页
x
推荐阅读

Java程序设计复习提纲(下:图形界面)

2023-05-19

【全球新视野】*ST富吉:今年确认收入约为1.52亿元 如何扭亏、新募投项目进展等引关注|直击业绩会

2023-05-19

着凉引起的感冒吃什么药_大人着凉感冒吃什么药

2023-05-19

世界实时:支付宝余额宝收益怎么算

2023-05-19

王府井:从目前看,有税业务预计年内能恢复到正常水平

2023-05-19

为何出资百亿成立两只产业基金,贵州茅台业绩说明会回应这些热点

2023-05-19

焦点精选!RCEP|通俗解读RCEP和CPTPP

2023-05-19

平桥水库将按计划于6月底向安龙县城供水 焦点热讯

2023-05-19

天天头条:游戏仍无消息 《Dark and Darker》推出定制咖啡套装

2023-05-19

热头条丨解剖屎山,寻觅黄金之第二弹

2023-05-19

神州租车开放端午租车预订通道-世界速读

2023-05-19

回家的地址却是记忆中的老房子,警民携手护送迷途阿婆平安回家

2023-05-19

【全球快播报】美元指数18日显著上涨

2023-05-19

8轮0球0助攻!三占薰被当地媒体批评:他看起来好累的样子 微速讯

2023-05-19

末节狂砍23分!掘金同城NFL球队明星四分卫发推:穆雷暴走了!

2023-05-19

厦门多条公交线路20日起调整

2023-05-19

北航与北京协和医学院联合成立“协和医班”,每年招约30名本科生

2023-05-19

富士胶片集团发布2022财年财务报告 环球报资讯

2023-05-19

联络乡情合作共赢 龙湾成立海外侨领联谊会-最新资讯

2023-05-19

联想笔记本电脑开机黑屏怎么办_联想笔记本电脑开机黑屏的方法-每日看点

2023-05-19

天天热资讯!境外金矿遇袭致2死14伤!紫金矿业:强烈谴责!

2023-05-19

金泰熙主演电视剧大全(金泰熙的电视剧有哪些简介介绍)-简讯

2023-05-19

苹果发布 tvOS 16.5 更新,引入“多视图体育”功能:同时播放 4 个直播源

2023-05-19

世界聚焦:第五届中原美术、设计学院院长论坛在安阳林州举行

2023-05-19

手机怎么登网页版qq_手机怎么用网页登QQ简介介绍|当前热议

2023-05-19

焦点报道:今日回家的路有多远大结局小小认妈妈_回家的路有多远大结局

2023-05-19

【焦点热闻】理文造纸(02314.HK):5月18日南向资金增持164.7万股

2023-05-19

环球今头条!伦敦奥运会体操女团比赛_伦敦奥运会体操女团

2023-05-19

新易盛:目前公司800G光模块产品仍处于小批量出货阶段 今日热搜

2023-05-18

超酷网页视频播放器加载失败怎么解决_超酷网页视频播放器加载失败

2023-05-18

焦点快看:长期占用绿色泊位?潮新闻联合杭州公安交警发起文明倡议

2023-05-18

阿克苏:环塔之外也精彩——新疆旅游玩出新花样⑭

2023-05-18

全球今亮点!女士手表品牌500-800元_女士手表品牌

2023-05-18

美国经济风险仍居高不下 5月18日吉盟首饰黄金583元/克_焦点热议

2023-05-18

速讯:ST实华:公司今年以来与茂名市晶惠石油化工有限公司没有业务往来

2023-05-18

【世界播资讯】摩根士丹利:上调腾讯音乐(TME)目标价至10.5美元 评级增持

2023-05-18

天天看热讯:2023合肥包河区旅游日活动汇总

2023-05-18

热议:干粉灭火器用什么表示_干粉灭火器的指针指在哪个位置表示正常

2023-05-18

贵州贵定:肥料发放暖民心 增产增收有保障

2023-05-18

天天播报:iPhone 15 Pro Max 摄像头重新排列以容纳潜望镜镜头

2023-05-18

2023长沙县初中插班生什么时候报名登记_全球头条

2023-05-18

当日快讯:创业板指跌超1%,大消费 新能源权重持续走弱

2023-05-18

【全球快播报】“小作文”引爆!涨停潮来了

2023-05-18

焦点热讯:5月18日上证指数早盘上涨0.78%,创业板指下跌0.34%

2023-05-18

你好律师,去年在芜湖中介安排的去了厂里上班两个月被厂里辞退了问过中介说差价有的|全球快看

2023-05-18

方琦、亓艳被查!广发银行:目前经营管理稳定

2023-05-18

众捷汽车资产负债率偏高远超同行,与大客户存纠纷汇兑损失加剧

2023-05-18

离岸人民币年内首次破"7" 汇率怎么走?

2023-05-18

当前观察:旺旺表情含义图解_旺旺表情

2023-05-18

【新西2】英雄介绍--不死战神

2023-05-18

环球热推荐:俄布里亚特共和国今年已对华出口2100多吨亚麻籽

2023-05-18

Mansory 认为劳斯莱斯幻影需要改造

2023-05-18

中通快递:一季度调整后净利润同比增长82.1%至19.2亿元|世界新消息

2023-05-18

粤s是哪里的车牌号码_粤s车牌号所属地区

2023-05-18

每日看点!赦免火鸡什么意思_赦免火鸡解释

2023-05-18

【天天热闻】芬兰外交部:芬兰驻俄罗斯大使馆银行账户被冻结

2023-05-18

【全球新视野】在曼联没做到桑切斯在国米做到了

2023-05-18

自制饺子皮的做法和配方_饺子皮的做法和配方

2023-05-18

微资讯!博物馆日来了,盘点山东小众有趣的博物馆

2023-05-17

各地出台举措落实落细就业优先政策 青年就业形势有望逐步改善_天天速递

2023-05-17

香港警方捣破网恋诈骗集团 涉案骗款2100万港元-全球快播

2023-05-17

六年级上册数学分数乘法计算题100道极答案_六年级上册数学分数乘法计算题100道

2023-05-17

荣信文化(301231.SZ):公司产品暂不涉及ChatGPT的应用

2023-05-17

俄媒:普京同托卡耶夫通话,并祝后者生日快乐

2023-05-17

每日焦点!直流屏报价表_直流屏 直流屏的生产厂家

2023-05-17

西安,准备好了陕西频道_全球观天下

2023-05-17

【环球报资讯】“20万科03”将赎回并摘牌 “20万科04”将付息

2023-05-17

当日快讯:上汽集团:子公司拟49.99亿元参与投资合伙企业,主要投资汽车产业链创新发展相关企业 当前快播

2023-05-17

天天最资讯丨怀柔区九渡河镇四渡河村新时代文明实践志愿服务分队

2023-05-17

世界微动态丨武科大获捐资2000万

2023-05-17

2022~2023年成都锦江区五险一金缴费标准基数及比例 成都锦江区五险一金最少要交多少钱一个月?_全球消息

2023-05-17

山东2023年成考报名费用是多少什么时候交 看热讯

2023-05-17

天天热消息:北京市文化和旅游局坚决依法依规严肃查处“笑果脱口秀”涉案公司及个人

2023-05-17

当前热文:加湿器有必要买电加热的吗_加湿器有必要买吗

2023-05-17

【当前热闻】预售价13.98-14.98万元 北京现代MUFASA定名沐飒

2023-05-17

全球新消息丨PS2光头平衡齿在哪_ps2光头

2023-05-17

5月20日浏阳烟花表演时间是几点?|环球聚看点

2023-05-17

怀柔等4区有雷阵雨! 北京市气象局:雷云回波向东南缓慢移动 最新快讯

2023-05-17

厦门制造再升级 “隐形冠军”企业增至47家

2023-05-17

国家统计局:4月份一线城市新房售价同比上涨2%,二手房涨0.9% 天天微头条

2023-05-17

辽宁省丹东市2023-05-17 09:08发布大雾橙色预警|环球速讯

2023-05-17

环球微动态丨东方财富证券:维持百奥家庭互动(02100)“增持”评级 后续新游上线将贡献增量

2023-05-17

统计局:2023年4月份,70个大中城市中商品住宅销售价格环比上涨城市个数减少 每日观察

2023-05-17

焦点热讯:入团申请书 入团申请书正规范文

2023-05-17

云南本土野生菌逐步上市 鸡枞菌价格腰斩 动态

2023-05-17

两部门:加快推进充电基础设施建设 更好支持新能源汽车下乡和乡村振兴

2023-05-17

说法迥异!俄称使用高超音速导弹打击基辅,乌称所有导弹都被拦截 全球报资讯

2023-05-17

朗·霍华德将拍摄黑色喜剧风格生存电影《物种起源》 演员阵容强大 当前速读

2023-05-17

通易航天张欣戎:“膜法”铺就快速发展之路

2023-05-17

安能物流(09956.HK):5月16日南向资金增持115.1万股-世界今日报

2023-05-17

恒瑞医药出手12亿,葛兰醒醒,医药板块该崛起了

2023-05-17

环球百事通!期货市场锻造农业“硬脊梁”

2023-05-16

国家统计局:4月汽车类零售额同比增长38.0% 每日关注

2023-05-16

他是英国人用英语怎么说_英国人用英语怎么说

2023-05-16

虚增研发费用超千万,康缘药业收警示函,前董秘也被点名_要闻

2023-05-16

全球快报:今天最新消息 周强:加强司法交流合作 积极服务构建更加紧密的上海合作组织命运共同体

2023-05-16

航天宏图(688066)4万股限售股将于5月16日解禁上市,占总股本0.02%|每日报道

2023-05-16

世界快播:手机无广告提现的传奇游戏推荐 有红包的游戏

2023-05-16

外媒:俄凌晨对基辅实施“异常密集”空袭,乌军称拦截全部导弹

2023-05-16

东方国信:在大模型领域一直同步国际前沿技术,目前已完成内部测试

2023-05-16