Java基础篇——Gui编程
AWT
抽象窗口工具
组件:按钮(button) 文本域(textarea)
标签(label) 容器(container)...
Frame窗口
Frame frame = new Frame();
//设置窗口可见性
frame.setVisible(true);
//设置窗口大小,并固定不变(不可拉伸)
frame.setSize(width,height);
frame.setResizable(false);
//窗口颜色
frame.setBackground(new Color(219, 232, 84));
//窗口弹出位置
frame.setLocation(x,y);
//frame.setBounds(x,y,width,height)一次性设置位置和大小
Panel面板
面板不能单独存在
Panel panel = new Panel();
frame.setLayout(null);//开启窗口布局
...//panel布局方法和frame窗口类似
frame.add(panel);
布局模式
流式布局
//在布局方法调用时,显式声明为流式布局
frame.setLayout(new FlowLayout());
//FlowLayout参数中可以声明为左/右对齐或者居中
//比如,左对齐:frame.setLayout(new FlowLayout(FlowLayout.LEFT));
东西南北中布局
frame.add(Component i,BorderLayout.SOUTH);//第一个参数是一个Component对象,右边是BorderLayout的属性,可以选择将对象放到(东西南北中)对应的位置
表格布局
frame.setLayout(new GridLayout(2,1));//将frame窗口分割为两行一列的表格
//参数内容 行数、列数、(行间距、列间距)
事件监听
frame窗口的监听
frame.addWindowListener(new WindowAdapter(){
...//设置监听事件,例如
public void windowClosing(WindowEvent e) {//窗口关闭监听
System.exit(0);
}
//窗口关闭时关闭程序
//也可以重写其他窗口监听方法,比如窗口激活..
});
组件的监听
//以按钮Button的监听为例
button.addActionListener(new ActionListener(){
...//监听事件
});
监听的类也可以通过接口实现类实现
画笔方法
Frame类里的paint方法传输了一个画笔型的参数,该类型提供了很多画图方法,可以直接使用,举个例子:
public void paint(Graphics e){//画笔型的参数
e.setColor(Color.BLUE);//设置画笔颜色
e.drawOval(100,100,200,200);//画一个圆形
e.setColor(Color.RED);
e.drawRect(100,100,200,200);//画一个矩形
}
鼠标监听
frame.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {//重写鼠标点击触发事件
...
}
});
键盘监听
frame.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();//getKeyCode方法捕获键盘码
...//键盘码为KeyEvent内部属性
//比如KeyEvent.VK_UP是上键
}
});
Swing
JFrame窗口
JFrame jFrame = new JFrame("My JFrame");
//JFrame提供了更便捷的窗口关闭方法
JFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//JFrame的方法大多与Frame相同,但设置背景颜色这里,JFrame引入了容器的概念,将窗口视作一个容器,只能修改容器的颜色来达到修改背景颜色的目的
Container container = jFrame.getContentPane();
container.setBackground(Color.YELLOW);
JDialog弹窗
//弹窗的初始化方法和窗口类似,可用触发事件触发弹窗,弹窗默认可关闭
setTitle(String s);//设置弹窗名字
setVisible(true);//设置弹窗可见
setBounds(300,300,200,200);//设置位置和大小
add(new JLabel("你点击了按钮",SwingConstants.CENTER));//添加标签
动态追踪文本域的内容
利用获取的Document对象,来添加一个DocumentListener监听器。因为该监听器就可以实现动态的跟踪文本框的输入内容。实现DocumentListener接口,必须重写该接口中的三个方法
public class test implements DocumentListener { private JTextField textField; public void init() {
textField = new JTextField();
//获取与编辑器关联的模型
Document doc = textField.getDocument(); //添加DocumentListener监听器
doc.addDocumentListener(this);
} //该方法可以跟踪文本框中输入的内容
public void insertUpdate(DocumentEvent e) {
Document doc = e.getDocument();
String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
} //该方法可以跟踪文本框中移除的内容,例如:在文本框中点击Backspace
public void removeUpdate(DocumentEvent e) {
Document doc = e.getDocument();
String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
} //该方法可以跟踪当文本框中已存在的内容改变时,获取相应的值
public void changedUpdate(DocumentEvent e) {
Document doc = e.getDocument();
String s = doc.getText(0, doc.getLength());//返回文本框输入的内容
} }
Icon图标
图标绘制:
class MyIcon extends JFrame implements Icon{
private int width;
private int height; public void init(){//初始化方法
MyIcon myIcon = new MyIcon(15, 15);
//创建标签的同时加入Icon图标
JLabel jLabel = new JLabel("标签",myIcon,SwingConstants.CENTER);
...//设置窗口属性
Container container = this.getContentPane();
container.add(jLabel);//向容器中加入带有图标的标签
}
...//构造方法
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.fillOval(x,y,width,height);
}//绘制图标
@Override
public int getIconWidth() {
return width;
}
@Override
public int getIconHeight() {
return height;
}
}
图片加载(加载目标图片作为图标)
public class SecondIconTest extends JFrame{
public SecondIconTest() {
JLabel jLabel = new JLabel("图片Icon");
//获得该类当前路径下名为img.png文件的路径
URL url = SecondIconTest.class.getResource("img.png");
jLabel.setIcon(new ImageIcon(url));//向标签中加入图片Icon
jLabel.setToolTipText("这是个图标");//设置鼠标悬停显示
...//添加标签
...//设置窗口属性
}
}
单选框、多选框
//单选按钮
JRadioButton button1 = new JRadioButton("Button1");
JRadioButton button2 = new JRadioButton("Button2");
//将按钮分到一组,不然可以多选
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(button1);
buttonGroup.add(button2);
...//向容器加入按钮
//复选框
JCheckBox button1 = new JCheckBox("Button1");
JCheckBox button2 = new JCheckBox("Button2");
...//向容器加入复选框
下拉框,列表框
//下拉框
JComboBox jComboBox = new JComboBox();
//可以用jComboBox.addItem()方法加入选项
//列表框
JList list = new JList();//直接向构造器里丢入集合对象即可
Java基础篇——Gui编程的更多相关文章
- java基础篇---网络编程(TCP程序设计)
TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSo ...
- java基础篇---网络编程(IP与URL)
一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一 ...
- java基础篇---网络编程(UDP程序设计)
UDP程序设计 在TCP的索引操作都必须建立可靠地连接,这样一来肯定会浪费大量的系统性能,为了减少这种开销,在网络中又提供了另外一种传输协议---UDP,不可靠的连接,这种协议在各个聊天工具中被广泛的 ...
- Java 基础篇之编程基础
基本数据类型 java 是强类型语言,在 java 中存储的数据都是有类型的,而且必须在编译时就确定其类型. 基本数据类型变量存储的是数据本身,而引用类型变量存的是数据的空间地址. 基本类型转换 自动 ...
- 黑马程序员:Java基础总结----GUI图形化界面
黑马程序员:Java基础总结 GUI图形化界面 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! GUI(Graphical User Interface)图形化界 ...
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 小白—职场之Java基础篇
java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...
- java基础篇---I/O技术
java基础篇---I/O技术 对于任何程序设计语言而言,输入输出(I/O)系统都是比较复杂的而且还是比较核心的.在java.io.包中提供了相关的API. java中流的概念划分 流的方向: 输 ...
- 黑马程序员:Java基础总结----GUI&网络&IO综合开发
黑马程序员:Java基础总结 GUI&网络&IO综合开发 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络架构 C/S:Client/Server ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
随机推荐
- linux 自动备份mysql数据库
今天一早打开服务器.13W个木马.被爆破成功2次,漏洞3个.数据库被删.这是个悲伤的经历 还好之前有备份,服务器也升级了安全机制,只是备份是上个月的备份.所以想写个脚本,试试自动备份数据库. 1. 先 ...
- DevOps|1024程序员节怎么做?介绍下我的思路
1024,祝每个程序员小哥哥小姐姐节日快乐. 因为在研发效能部门,我支持过几次 1024 程序员节的活动,所以经常有朋友问我1024 程序员节怎么做,本篇就是简单介绍下我的思路,希望对你有用. 102 ...
- 9.pygame-键盘捕获
创建英雄类 """英雄精灵""" class Hero(GameSprite): def __init__(self): # 调用父类方法, ...
- 十七、Job与Cronjob
Job 与 Cronjob 一.Job Job 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束. 特殊说明: 1.spec.template 格式同 Pod 2 ...
- 十六、资源控制器之DaemonSet
资源控制器之DaemonSet DaemonSet 确保全部(或者一些) Node上运行一个 Pod 的副本,当有 Node 加入集群时,也会为他们新增一个 Pod,当有 Node 从集群移除时,这些 ...
- Istio(十一):向istio服务网格中引入虚拟机
目录 一.模块概览 二.系统环境 三.虚拟机负载 3.1 虚拟机负载 3.2 单网络架构 3.3 多网络架构 3.4 Istio 中如何表示虚拟机工作负载? 四.实战:向istio Mesh中引入虚拟 ...
- Java 动态代理原理图解 (附:2种实现方式详细对比)
动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 ...
- 如何在CentOS7上搭建自己的GitLab仓库
序言 各位好啊,我是会编程的蜗牛,作为java开发者,在团队开发中,一般都是需要使用git及git仓库来管理我们的代码的,这非常方便.我以前在小公司的时候,基本都是一个人开发一个项目,所以也没有怎么接 ...
- nginx安装及相关操作
工作中经常用到nginx,今天写个自动部署nginx的脚本.nginx版本选用:1.20.2 1.创建nginx安装脚本(nginx.sh) [root@iZ2ze7uphtapcv51egcm7rZ ...
- 2022春每日一题:Day 36
题目:[JLOI2013]删除物品 直接做显然比较复杂,这个题是说对顶栈,但是可以把两个栈拼在一起,记录一下栈顶的下标,然后这样这题就可以转化为线性上的操作查询了,用树状数组简单维护一下就ok了(某个 ...