Swing属于JFC(Java Foundation Classes)的一部分。JFC包含了AWT,Swing,辅助功能API,Java2D,拖放。Swing的出现是为了解决AWT(Abastract Window Toolkit)的移植性和提供更多的企业级应用程序所需要的功能。Swing建立在核心AWT库上,JDK1.2以及更高的版本已经包含了Swing库。
Swing内部采用了MVC体系结构(modle-view-controller)。modle负责存放Swing组件的状态(数据),controller负责处理事件,view负责绘制图形。Swing使用了简化的MVC变体,controller和view合并称为UI代理。这种设计使得一个modle可以对应多个UI代理,因此非常灵活。
我的这个Swing组件非常简单,只是一个toolbar。参考下面的实现代码:
package test1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author root
*/
public class ToolbarFrame extends Frame{
/** Creates a new instance of ToolbarFrame */
public ToolbarFrame() {
super("My Toolbar(Swing)");//通过调用基类Frame的构造函数初始化标题栏文字
setSize(450,250);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
注意红色代码是创建了一个内部类,该类是WindowAdapter的子类,并且重写了虚函数windowClosing。然后将该类的引用交由TollbarFrame管理,通过方法addWindowListener。
如果没有这步,我们的toolbar可以显示,但是用不会被关闭。
现在创建调用代码:
package test1;
/**
*
* @author root
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ToolbarFrame toolbar=new ToolbarFrame();
toolbar.setVisible(true);
}
}
调用代码只有两行,非常简单。现在我们来看看运行的效果,见下图:
由于没有设置窗口的起始位置,所以默认停留在屏幕左上方。
既然我们使用Net Beans来开发程序,Net Beans向导也可以为我做同样的事情。通过使用newJFrame Form来创建一个ToolbarFrame2类。我们获得下面的代码:
package test1;
/**
*
* @authorroot
*/
public class ToolbarFrame2 extends javax.swing.JFrame {
/** Creates new form ToolbarFrame2 */
public ToolbarFrame2() {
initComponents();
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc=" Generated Code ">
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ToolbarFrame2().setVisible(true);
}
});
}
我们获得了没有标题的ToolbarFrame2,并且已经可以响应关闭按钮。
注意,我们的ToolbarFrame2类从JFrame派生,而不是Frame。Frame是AWT的类,而JFrame是Swing提供的类。我们应该尽量使用Swing类。
private void initComponents() 方法的实现涉及到 GroupLayout类等细节,后面会逐渐介绍。关于JFrame类的文档请参考下面的链接:http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE)中,使用了类WindowConstants的公有静态整形常量,这些常量分别代表窗口关闭时的行为,具体可以参考
http://java.sun.com/docs/books/tutorial/uiswing/components/frame.html#windowevents。
我们可以通过调用JFrame的成员函数setTitle来设置标题。
在Net Beans IDE中,我们可以使用编辑器进行可视化编辑(通过Design视图),比如添加一个JButton。向导将为我们定义如下变量:
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
并且在private void initComponents() 方法中增加下面一行:
jButton1 = new javax.swing.JButton();
该方法可以添加事件的监听者,当有事件发生,Swing组件就会调用这些监听者的public void actionPerformed(java.awt.event.ActionEvent evt)方法。形成事件回调。我们可以利用Net Beans为我们创建这些注册的代码。右键点击JButton,然后选择events->action->actionPerformed,Net Beans将创建私有方法actionPerformed,然后在initComponents方法中增加下面的代码:
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
}
});
我们只需要将 我们的处理逻辑写到jButton1ActionPerformed私有方法中就可以响应事件了。
如果我们有两个JButton控件,Net Beans将为我们创建两个私有方法,并且创建两个继承自ActionListener的内部类,确保不会互相干扰。请看下面的实例代码:
private void initComponents() {
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("Button1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Button2");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
分享到:
相关推荐
基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统,小白必看! 基于Java Swing + MySQL的图书管理系统,优秀Java毕业设计系统...
Java Swing是目前图形界面设计的主流开发工具,《Java Swing图形界面开发与案例详解[1]》从实用的角度出发,通过大量实例全面介绍Java Swing中各种组件的应用及图形界面的开发技术。《Java Swing图形界面开发与案例...
java swing漂亮界面 超酷 javaswing教程
基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分通过项目,代码完整下载即用,无需修改确保可以运行。 基于Java Swing的物业管理系统源码+数据库(95分以上课程设计).zip 已获高分...
(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java swing毕业设计)学生信息管理(文档+视频+源码)(java ...
(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业设计)酒店管理系统(ppt+ER图+流程图+需求背景数据库+架构说明有lun文视频源码齐全)(java swing毕业...
基于Java Swing和MySQL的超市管理系统是一种用于超市或商场管理商品和订单信息的计算机软件系统。该系统使用Java Swing作为GUI编程工具,MySQL作为数据库,可以方便地进行商品管理、订单管理、库存管理和查询等操作...
本项目是一套java Swing mysql实现简单的购物系统,主要针对计算机相关专业需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、运行指导视频。 项目都经过严格调试,确保可以运行! 二、技术实现 后端:...
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
java Swing 上传文件-------------------------------------------------------------------------------------------------------------------------------------------------------
参考书籍用Java Swing 和 Mysql编写的图书管理系统。 功能多,分类明确,代码编写风格也很好。附上MYSQL的数据库文件,导入即可以用!参考书籍用Java Swing 和 Mysql编写的图书管理系统。 功能多,分类明确,代码...
java Swing panel button左右滑动效果
java Swing读取图片,并以友好的方式呈现个使用者
javaswing图书馆管理系统源代码+数据库模型 确保系统具有良好的系统性能,友好的用户界面。 较高的处理效率,便于使用和维护。 采用成熟技术开发,使系统具有较高的技术水平和较长的生命周期。 系统尽可能...
项目类型:Java Swing 开发语言:Java语言 运行环境:win7/win10/jdk1.8 开发工具:Eclipse 运行工具:Eclipse/MyEclipse,Eclipse最兼容 数 据 库:MySql5.x 是否有课程报告:暂无 适用场景:课程设计学习...
用JavaSwing写的测试版多人猜拳, 暂时不包含源代码
串口接收数据源码java swing技术,包含了打开串口,接收串口的数据,关闭串口,清空数据等功能,自己手动开发的,如果需要可以自行开发,也可以联系上品威客索取
java swing是目前图形界面设计的主流开发工具 本书从实用角度出发 通过大量实例介绍各种组件及图形界面的开发技术 几乎涵盖了图形开发必备的所有常用知识 丰富的实例 且实例均来自于工程实践 适合初学者阅读 也可供...
本项目是一套基于java Swing开发的学生成绩管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格...