java swing 组件技术(上)
2019独角兽企业重金招聘Python工程师标准>>>
第一次写自己的博客,明知道写得很水,还是努力去写了,希望踏出第一步之后,能有着更好的发展。这几天看了一些资料,总结了一下自己所学的关于java swing的知识。
一、 java swing 组件技术简介
1.swing的特性
l 是AWT的扩展,swing比AWT提供了更多的组件和外观
l 它是纯java代码编写(除了JFrame、JDialog、JApplet),因此与平台无关
2.AWT的缺点
组件少而且是本地代码实现(无法实现跨平台)
3.swing 和 AWT相比
一个重要的的改进在于swing把一个组件的处理分为图形部分和数据处理部分(MVC模型)
l 图形部分由编程环境统一处理(View)
l 数据部分由一个数据处理模型进行处理(Model)
4.swing编程应注意的问题
l swing和AWT组件不要混合使用,可能会导致不能正常显示的错误
l 正确理解轻量级组件与重量级组件的不同
轻量级组件——swing组件,由纯java代码实现,占用系统资源少
重量级组件——AWT组件,有本地c代码实现,占用系统资源多
(注:JFrame、JDialog、JApplet(顶层容器)是重量级组件)
二、 swing的“外观和感觉”(LookAndFeel)
1.swing中常见的“LookAndFeel”
l Metal风格 (默认)
javax.swing.plaf.metal.MetalLookAndFeel
l Windows风格
com.sun.java.swing.plaf.windows.WindowsLookAndFeel
l Windows Classic风格
com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
l Motif风格
com.sun.java.swing.plaf.motif.MotifLookAndFeel
l Mac风格 (需要在相关的操作系统上方可实现)
com.sun.java.swing.plaf.mac.MacLookAndFeel
l GTK风格 (需要在相关的操作系统上方可实现)
com.sun.java.swing.plaf.gtk.GTKLookAndFeel
l 可跨平台的默认风格
UIManager.getCrossPlatformLookAndFeelClassName()
l 当前系统的风格
UIManager.getSystemLookAndFeelClassName()
意义:通过LookAndFeel机制,我们可以是程序的设计者任意转换程序的人机界面来对应不同的操作系统
2.设置swing的LookAndFeel
在swing中,采用UIManager类来管理swing界面的LookAndFeel,UIManager类提供静态方法setLookAndFeel()来设置界面的LookAndFeel,该方法是一个重载方法,提供两个重载方式:
setLookAndFeel(LookAndFeel newLookAndFeel)
setLookAndFeel( String className)
其中:参数newLookAndFeel表示组件的某种外观,className表示组件某种外观的名字
2-1.设置方法(静态设置,动态设置)
静态设置——设计时指定LookAndFeel
eg1:
String lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";
UIManager.setLookAndFeel(lookAndFeel);
eg2:
String lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
UIManager.setLookAndFeel(lookAndFeel);
动态设置——运行时指定LookAndFeel
eg:
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
//运行时动态更新外观
SwingUtilities.updateComponentTreeUI(this)
附:SwingUtilities.updateComponentTreeUI(Component c)
对组件c重新设置外观
注:由于JFrame、JDialog、JApplet(顶层容器)为重量级组件,因此他们的外观只与操作系统平台有关系,在相同的操作系统平台下表现相同的外观
2-2.程序代码
import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class LookAndFeelDemo2 extends JFrame {private JRadioButton radio1 = new JRadioButton("Metal");private JRadioButton radio2 = new JRadioButton("Windows");private JRadioButton radio3 = new JRadioButton("Motif");private JPanel panelNorth = new JPanel();private JPanel panelSouth = new JPanel();private JTextArea area = new JTextArea(6, 20);private JButton btn = new JButton("button");private JCheckBox chk = new JCheckBox("checkBox");private JComboBox cmbLookAndFeel = new JComboBox(new String[] { "Metal","Widows", "Motif", "GTK" });public LookAndFeelDemo2(String title) {super(title);Container contentPane = this.getContentPane();ButtonGroup group = new ButtonGroup();group.add(radio1);group.add(radio2);group.add(radio3);panelNorth.add(radio1);panelNorth.add(radio2);panelNorth.add(radio3);panelSouth.add(btn);panelSouth.add(chk);panelSouth.add(cmbLookAndFeel);contentPane.add(panelNorth, BorderLayout.NORTH);contentPane.add(area, BorderLayout.CENTER);contentPane.add(panelSouth, BorderLayout.SOUTH);pack();setVisible(true);setSize(300, 400);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 监听Item事件radio1.addItemListener(new MyItemListener());radio2.addItemListener(new MyItemListener());radio3.addItemListener(new MyItemListener());}private class MyItemListener implements ItemListener {public void itemStateChanged(ItemEvent e) {// 取得点击按钮的名字String itemName = ((JRadioButton) e.getSource()).getText();changeLookAndFeel(itemName);}}// 设置外观的private类型方法private void changeLookAndFeel(String name) {String lookAndFeel = "";if (name.equals("Metal")) {lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";} else if (name.equals("Windows")) {lookAndFeel = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";} else if (name.equals("Motif")) {lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";}else{//取得默认的metal外观lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";}try {UIManager.setLookAndFeel(lookAndFeel);// 运行时指定LookAndFeel,需要SwingUtilities.updateComponentTreeUI(Component// c)实现动态的更新SwingUtilities.updateComponentTreeUI(this);area.setText("当前外观类名:\n" + lookAndFeel);} catch (Exception ex) {ex.printStackTrace();}}public static void main(String[] args) {new LookAndFeelDemo2("LookAndFeel");}
}
三、 swing组件
1.swing组件的分类
2.往swing容器里添加组件
对于swing顶层容器(JFrame,JDialog,JApplet),在添加组件时,不能直接调用容器的add()方法。
往顶层容器添加组件可用以下方法:
a) 通过getContentPane()方法获得当前容器的内容面板对象,在调用容器的add()方法加入各个组件
b) 先利用JPanel类生成一个内容面板对象panel,再将各个组件加入到panel中,然后调用的容器的setContentPane()方法,将panel加入到当前容器中
3.使用swing组件的基本规则
a) 把swing组件放入一个顶层容器中
b) 避免使用非swing的重量级组件
c) 往swing顶层容器添加组件时,不能直接调用add()方法
d) 内容面板缺省的布局策略是BorderLayout,不能对顶层容器进行布局
四.swing的事件处理
a) Swing组件可以产生AWT包中的事件
b) 有自己的事件包(javax.swing.event)
c) Component类的五种事件
d) 能激活Container类的ContainerEvent事件的Swing组件
Swing组件中的容器(如:JFrame, JPane)
复合组件(如:JComboBox)
转载于:https://my.oschina.net/jingxintianya/blog/137443
java swing 组件技术(上)相关推荐
- 博为峰Java技术题 ——JavaSE Java Swing组件类的层次
2019独角兽企业重金招聘Python工程师标准>>> 博为峰小博老师: 下图讲述Swing组件类的层次,如图: 从以上的结构示意图中可以知道,Swing组件可以分成两种类型,一种是 ...
- java Swing组件总结
文章目录 Jframe JDialog JPanel和JScrollPane容器 文本组件 按钮组件 1.JCheckBox 2.JRadionButton JComboBox组件 菜单组件 1.下拉 ...
- JAVA Swing 组件演示***
下面是Swing组件的演示: package a_swing;import java.awt.BorderLayout; import java.awt.Color; import java.awt. ...
- Java EE组件技术
组件是Java EE应用的基本单元.Java EE 6提供的组件主要包括三类:客户端组件.Web组件和业务组件. 1.客户端组件 用户通过客户端组件与企业应用进行交互.Java EE客户端既可以是一个 ...
- java swing 组件渲染过程_Java Swing无法正确渲染
我一直在做一个项目 . 在项目的一部分,我需要在JPanel上绘制 . Graphics2D对象被传递给框架的模型部分,模型将绘制在该实例中绘制的任何内容 . 问题是JFrame未正确呈现 . 它看起 ...
- java jpanel调用构造函数的时候就开始执行repaint_在Java Swing组件中劫持`repaint()`调用...
我正在编写一个在无头环境中运行的应用程序,需要输出到Buffered Image而不是屏幕.我有一个管理BufferedImage的Display类.我的应用程序扩展了JPanel,为了在组件更新时自 ...
- java swing组件_Java -- Swing 组件使用
1. 示例1 public class Main { JFrame f = new JFrame(); Icon okIcon = new ImageIcon("/home/test/sta ...
- java背景图片加上组件_关于 java swing组件加背景图片的问题
最近自己做了一个小的进销存软件,背景图片加上后不能最大化.尝试了好几种方法 最后终于把问题解决了.下面把自己写的实例 分享一下: 一个是在JFrame窗体中加如背景图片 一个是在Jpanel 面板中加 ...
- java swing 控件_Java Swing组件
一. java swing 组件技术简介 1.swing的特性 l 是AWT的扩展,swing比AWT提供了更多的组件和外观 l 它是纯java代码编写(除了JFrame.JDial ...
最新文章
- Kafka学习-复制
- 老李分享:Web Services 组件 1
- bin文件用cad打开_dwg文件怎么打开?CAD看图,360°精确识别CAD图块,细节见真章...
- (超详细版)Linux下Hadoop2.7.1集群环境的搭建(3台为例)
- 【渝粤教育】国家开放大学2018年春季 3896T人文英语1 参考试题
- C++ 中vector的嵌套使用
- POJ1993+矩阵相乘
- 这个 80 后 IT 男厉害了!他用北京蜗居的首付在东京海淘了一栋楼!
- VS2013、VS2015中,新建项目没有看到解决方案的问题(已解决)
- excel自动排班表_18个施工进度计划横道图,Excel版自动生成表,操作简单明了
- 配置管理工具SVN的使用
- java识别手写文字_Java 实现OCR 识别图像文字(手写中文)----tess4j
- elementui下载到本地
- 数据挖掘--数据流挖掘
- XSSFWorkbook 设置单元格样式_这个 Excel 技巧太实用了,如何快速套用自定义的单元格样式?...
- python爬取携程景点_python爬取携程景点评论信息
- ps4玩android游戏,PS4更新7.0系统:手机秒变手柄,远程遥控畅玩游戏
- Java 命名规范---阿里Java开发手册
- 计算机组成原理中的主机,计算机组成原理-pc机的主机
- 说说 jBPM 工作流的定时器
热门文章
- Matlab | Matlab中使用imaqtool工具箱获取摄像头数据及如何安装(摄像头)硬件适配器的图像采集支持包
- 4由通道检测_十堰城区108处桥隧通道接受全面“体检”将持续至8月底
- VC用MFC开发的圆形进度条控件
- 总谐波失真80_谐波平衡法仿真(ADS)
- while(getchar()=='\n')continue;为什么作用是清空行
- 【学术相关】作者解读ICML接收论文:如何使用不止一个数据集训练神经网络模型?...
- 【学术相关】人工智能顶会审稿现状—理想中的审稿人vs实际审稿人
- 【NLP】NLP实战篇之bert源码阅读(run_classifier)
- 学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!附下载链接!...
- 【机器学习基础】数学推导+纯Python实现机器学习算法15:GBDT