Swing编程随笔

Swing编程

Swing	(轻轻级组件,纯java组件)——————通过javax.swing包--》创建GUI
Swing内容包含:
     容器---》包含Swing组件
     组件---》以图形表示的对象允许用户交互
     可改变的外观---》可更换图形界面的风格
     java2D图形绘制--》使用java2D绘制图形

Swing(与AWT相比)
优点:轻量级组件
     可改变的外观
     MVC结构 
     性能更稳定

Swing应用程序
主窗口(内容面板)顶层容器(每个应用程序至少有一个)主要显示区域包含GUI中的可视组件
创建顶层容器
创建容器
设置容器大小(对框架及面板而言)
设置容器可见度(对框架及面板而言)

Swing
javax.swing包常见容器
JFrame  1. 扩展 java.awt.Frame 类
2. 用于在 Swing 程序中创建窗口
3. 包含边框、标题和用于关闭和图标化窗口的按钮
JPanel
1.中间容器
2.用于将较小的轻量级组件组合在一起
3.与内容窗格相似,面板在默认情况下不透明
JScrollPane
1.管理视区,滚动条及可选的行和列的标题视区

Swing GUI组件
JLabel   JTexField   JComboBox    JCheckBox
JTexArea  JButton    JRadioButton

事件体系结构
EventObject<----AWTEvent<--(ActionEvent,AdjustmentEvent,ComponentEvent,ItemEvent,TextEvent)
<-------(ContainerEvent,FocusEvent,InputEvent,PaintEvent,WindowEvent)
<---(KeyEvent,MouseEvent).

事件处理程序
用户交互
单机鼠标   按下/释放鼠标按钮
对象状态改变
-------》🔺(事件)调用事件处理----》
确定发生的事件类型
确定生成的事件的组件
编写合适的代码处理事件

代理事件模型
源对象(Swing中的GUI组件)--传播--》监听器(适配器对象)
事件----》事件实例--传递途径---》方法----》监听器(适配器对象)

Event类                    接口
ActionEvent             ActionListener
AdjustmentEvent         AdjustmentListener
ComponentEvent          ComponentListener
FocusEvent              FocusListener
ItemEvent               ItemListener
WindowEvent             WindowListener
TextEvent               TextListener
MouseEvent              MouseListener,MouseMotionListener
KeyEvent                KeyListtener

布局管理器
用户界面上面的屏幕组件可以按照一定的格式布局
例如水平排列,或按网格方式排列
布局管理器类是一组类,它
   实现java.AWT.LayoutManager接口
   帮助在容器中放置组件
Java中可用的各种布局如下:
BorderLayout
FlowLayout
GridLayout

BorderLayout
North(上边的组件)
West(左边的组件)
East(右边的组件)
South(下边的组件)

BorderLayout
方法                    说明
BorderLayout()   创建新的BorderLayout,组件之间没有间距
setHgap(int hgap)  将组件间的水平间距设置为指定的值
setVgap(int vgap)  将组件的垂直间距设置为指定的值

FlowLayout
左上角
流布局是面板的默认布局管理器
依次排序的组件
垂直或水平间距
右下角
容器。
方法                            说明
FlowLayout()         构造新的中间对齐的FlowLayout,将垂直和水平间距保留为5个像素。
setAlignment(int align) 设置指定布局的对齐方式
setHgap(int hgap)       设置指定布局的水平间距
setVgap(int vgap)       设置指定布局的垂直间距

GridLayout
指定网格中的行数和列数,创建网格布局
列-------------------|组件大小相同
|重新调整组件大小以适合各自的单元
|
|
|
|
》行

指定网格中的行数和列数,创建网格布局
方法                             描述
GridLayout         创建网格布局,默认为每个组件占用一整列和一单行
GridLayout(int rows ,int cols) 用指定的行数和列数创建网格布局。
GridLayout(int rows,int cols,int hgap,int vgap)用指定的行数和列数,指定的水平和垂直间距创建网格布局
setColumns(int cols)  将相应布局中的列数设置为指定值
setHgap(int hgap)     将相应布局中的水平间距设置为指定值
setVgap(int vgap)     将相应布局中的垂直间距设置为指定值
setRows(int rows)     将相应布局中的行数设置为指定值

使用布局管理器
public void btnNorth_actionPerformed(ActionEvent e){}
public void btnNorth_actionPerformed(ActionEvent e){
    txtMessage.setText("按下了按钮“北”);
}
public void btnWest_actionPerformed(ActionEvent e){
   txtMessage.setText("按下了按钮“西”“)}
public void btnSouth_actionPerformed(ActionEvent e){
   txtMessage.setText("按下了按钮 ”南“")
}
public void btnEast_actionPerformed(ActionEvent e){
    txtMessage.setText("按下了按钮 ”东”");
}

Code generated for actionPerformed method 为actionPerformed方法生成的代码
添加如下代码以便在txtMessage字段中显示消息
为btnWest的actionPerformed事件添加代码
为btnSouth的actionPerformed事件添加代码
为btnEast的actionPerformed事件添加代码
选择内容面板
在属性窗口中将内容面板的Layout属性选择为BorderLayout
从组件面板的Swing类别中选择JButton
将JButton添加至North
使用属性窗口更改属性
将JButton添加至内容面板的左边,下边和右边
从Swing容器类别中选择JPanel,并将其添加至内容面板中央
将JLabel添加至JPanel,并更改属性
将JTextField添加至JPanel,并更改属性
菜单显示一个项目列表,指明用户可以执行的各项操作
文件 编辑 格式(菜单 字体 段落  项目符号和编程 背景色(红色,绿色,黑色)

包含javax.swing包的菜单类的类层次结构
object---Component---Container-----JComponentp---
(JMenuBar ,JPopupMenu,AbstractButton|,JSeparator)
                                    |
                                    |
                                    |
(JMenu,JCheckboxMenultem,JRadioButtonMenultem)
只要选中JMenuItem,就会产生通过重写actionPerformed()方法进行处理的ActionEvent
JMenultem   JMenu
文件 编辑  格式  帮助
新建
打开
关闭

JMenuBar类
JMenubar类
   |
   |
   》
SingleSelectionModel
   |
   |
   》
跟踪当前选定的菜单
JMenu组件有两个用途
-当它添加至JMenuBar时,将显示为文本字符串
-当用户单击此菜单项时,则显示一个弹出式菜单
JCheckBoxMenultem  
              >
              |
              |
JMenultem《---JMenu------》JSeparator
              |
              |
              >
        JRadioButtonMenultem
JMenu类
               JMenu类
                 |
                 |
                 》
              JPopupMenu
                 |
                 |
                 >
              当用户单击JMenu时,
              显示JMenu的菜单项
JMenuItem类
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenultem;
public class MenuFrame extends JFrame{
   JPanel contentPane;
   JMenuBar mnuNotepad = new JMenuBar();
   JMenu    mnuFile = new  JMenu();
   JMenu    mnuEdit = new  JMenu();
   JMenu    mnuFormat=new  JMenu();
   JMenuItem mnuNew = new JMenuItem();
   JMenuItem mnuOpen = new JMenuItem();
   JMenuItem mnuSave = new JMenuItem();
   JMenuItem mnuSaveAs = new JMenuItem();
   JMenuItem mnuExit = new JMenuItem();
JMenu mnuHelp = new JMenu();
public MenuFrame(){
 try{ 
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 jbInit();
 
}catch(Exception exception){
   exception.printStackTrace();
}
}
private void jbInit() throws Exception{
   contentPane = (JPanel) getContentPane();
   contentPane.setLayout(null);
   this.setJMenuBar(mnuNotepad);
   setSize(new Dimension(400,300));
   setTitle("菜单");
   mnuFile.setText("文件");
   menuEdit.setText("编辑");
}      

mnuFormat.setText("格式");
mnuNew.setText("新建");
mnuOpen.setText("打开。。。");
mnuSave.setText("保存");
mnuExit.setText("退出");
mnuHelp.setText("帮助");
mnuNotepad.add(mnuFile);
mnuNotepad.add(mnuEdit);
mnuNotepad.add(mnuFormat);
mnuNotepad.add(mnuHelp);
mnuFile.add(mnuNew);
munFile.add(mnuOpen);
mnuFile.add(mnuSave);
mnuFile.add(mnuSaveAs);
mnuFile.add(mnuExit);

JPopupMenu
用于显示展开形式的菜单
可显示在屏幕的任何地方
通常是由单击鼠标右键触发的
激活弹出式菜单项之一所执行的操作总是依赖于上下文
可供JPopupMenu类使用的方法

方法                              说明
public  JMenuItem         将指定菜单项添加至菜单末尾
add(JMenuItem menuItem)
public JMenuItem add(String) 使用指定文件新建菜单项,并将其添加至菜单末尾
public  void show(Component c,int x,int y) 在组件“c”的坐标空间的(x,y) 位置显示弹出菜单
public  Boolean isPopupTrigger() 确定是否将鼠标事件看作是当前平台的弹出触发器

JCeckBoxMenuItem类
这个类是JMenuItem类的子类
使用这个类可实现复选框,默认情况下可为其分配选定标记或取消选定标记

JRadioButtonMenuItem类
在同一时刻只能选择一个菜单项

对话框
java中的对话框是一个容器,它充当父容器的子容器
JOptionPane这个类支持的功能有:
-布局标准对话框
-指定对话框的标题和文本
-提供图标和自定义按钮文本
“错误”对话框                     ERROR
“问题对话框“                     Question
"消息对话框"                     Message
JOptionPane可用于显示各种图标,如用于警告消息,问题,错误和信息等的图标

以下是一些可供JOpationPane类使用的构造方法:
-JOptionPane()
-JOptionPane(Object message)
-JOptionPane(Object message,int messageType)
-JOptionPane(Object message,int messageType,int optionType)
-JOptionPane(Object message,int messageType,int optionTyep,Icon icon)

对话框
showXxxDialog()方法的一些重载版本
JOptionPane类的showXxxDialog方法是显示模式对话框常用的方法
showXxxDialog
showMessageDialog()  showOptionDialog()
Methods                                       Description
void showMessageDialog(Component,parentComponent,Objectmessage,String title,int messageType)
                                             此方法使用由messageType参数确定的默认的图标来显示信息的对话框
void showMessageDialo(Component parentComponent,Object message,String title,int messageType,Icon icon)
                                             此方法显示用于消息和指定所有参数的对话框
 Method
 int shwoOptionDialog(Component parentComponent,Object message,String title,int optionType,int messageType,Icon icon,Object[] options,Object initialValue)
                                      此方法显示具有指定图标对话框,其中初始选项由initialValue参数决定,而选线的数目由optionType参数决定

对话框6-5
用于验证用户身份和显示相应消息的代码
验证用户身份的应用程序
-向工程中添加标题为”User_Login“的应用程序
-将JOptionPane拖放至该应用程序
-该应用程序将验证用户身份并显示相应消息

对话框6-6
public void btnOk_actionPerformed(ActionEvent e){
String user;
String password;
user=txtUserName.getText();
password=txtPassword.getText();
if(user.equals("admin")&& password.equals("aptech"))
{
dlgMessage.showMessageDialog(this,"您是授权用户","经验证的用户",JOptionPane.INFORMATION_MESSAGE);
}else{
dlgMessage.showMessageDialog(this,"非法用户名或密码""非法用户",JOptionPane.INFORMATION_MESSAGE);
}else{
dlgMessage.showMessageDialog(this,"非法用户名或密码","非法用户","JOptionPane.ERROR_MESSAGE");
txtUserName.setText("");
txtPassword.setText("");
txtsetName.setFocusable(true);
}

菜单的事件处理
JTable9-1
以表格方式维护大量数据比以列表方式更加方便
使用Swing中的JTable类可以创建表
显示数据并且允许用户对其进行编辑
            |
            |
            |
         JTable
对存储数值数据非常有用    它不存储数据,只提供数据的呈现方式

JTable9-2创建一个TableDemo工程
单击 "File"-->"New"
选择"Application",输入TableDemo作为应用程序的类名称
单击"Next",输入TableFrame作为框架的类名称,并输入"欢迎使用JTable"作为其标题
单击"Next"确保已选定"Crate Runtime Configuratio"选项
单机"Finish"
单击"Design"选项卡
选择组件面板中的"JTable",并将其拖入框架

JTable 9-4
JTable jTable1 = newJTable();
实例化JTable控件后将生成代码

JTable 9-5
Object[][] cells=
{
{"java",new Integer(01),new Integer(400)},
{"Oracle",new Integer(02),new Integer(500)},
{"C#",new Integer(03),new Integer(700)},
};
String [] colnames ={"课程名称""课程编号""学费(元)"}

JTable 9-6
JTable jTable1 = new JTable(cells,colums);
使用二维对象数组来传递构造函数以填充JTable实例

JTable 9-7
运行该工程
此刻创建的表无表头
要显示表头,请单击“Design”选项卡
选定该表,右击其中的表头属性
单击关联菜单中的“Expose as Class level varible”选项
此时将显示表头
运行该工程
为表头设置属性

JTable9-9
以下代码将在“Source”选项卡中自动生成
package tabledemo;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.swing.JFrame;
import java.swing.JPanel;
import javax.swing.JTable;
import java.awt*;
import javax.swing.*;
import javax.swing.table.JTableHeader;
public class TableFrame extends JFrame{
    JPanel contentPane;
    Object[][] cells=
    {
    {"Java",new Integer(01),new Integer(400)},
    {"Oracle",new Integer(02),new Integer(500)},
    {"C#"new Integer(03),new Integer(700)},
    
};
}

private void jbInit() throw Exception{
   contentPane =(JPanel) getContentPane();
   contentPane.setLayout(null);
   setSize(new Dimension(400,300));
   setTitle("欢迎使用 JTable");
   jTable1.setBackground(Color.yellow);
   jTable1.setBorder(null);
   jTable1.setGridColor(Color.black);
   jTable1.setSelectionBackground(Color.orange);
   jTable1.setBounds(new Rectangle(11,29,251,161));
   jTableHeader1.setBackground(Color.pink);
   jTableHeader1.setBounds(new Rectangle(10,10,252,20));
   contentPane.add(jTableHeader1);
   contentPane.add(jTable);
}

String[] colnames={"课程名称","课程编号","学费(元)"};
  JTable jTable1  =new JTable(cells,colnames);
  JTableHeader jTableHeader1 =jTable1.getTableHeader();
  public TableFrame(){
  try{
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  jbInit();
}cath(Exception exception){
  exception.printStackTrace();
}
}
/**
*初始化组件
*
*@throws java.lang.Exception
*/

图形处理
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Color;
import java.awt.Graphics
BufferedImage image=new BufferedImage(800,600)
BufferedImage.Type_INT_RGb);
Graphics gg;
gg.dispose();
FileOutputStream fw = new FileOutputStream("cc.JPG");
ImageIO.write(image,"JPG",fw);

总结
Swing菜单由JMenubar,JMenuItem和JMenu组成
AbstractButton 是JMenu类的父亲
创建JMenuBar的实例以创建菜单
与JMenuItem及其与菜单栏关联的子类不同,JPopupMenu可显示在屏幕的任何地方
JCheckBoxMenuItem和JRadioButtonMenuItem用于实现菜单栏中的复选框和单选按钮
JOptionPane类用于显示对话框


   


                                                                                                                           
       




   

                                    
 














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值