JAVASE学习笔记:第十章 SWing常用控件类(三)

11、设置JFrame背景图片
         JPanel c= (JPanel)this.getContentPane(); //创建jpanel
         Toolkit t=Toolkit.getDefaultToolkit();
                //背景图片,将panel不透明设置为false
   c.setOpaque(false);
   JLabel label = new JLabel();  
   URL usrc=this.getClass().getClassLoader().getResource("\\images\\bg.JPG"); 
   ImageIcon icon = new ImageIcon(usrc);
   // 常规背景:图片原始大小
   label.setIcon(icon);      
   label.setBounds(0, 0, icon.getIconWidth(),icon.getIconHeight()); 
   //拉伸背景:适应窗体大小
   int w = this.getWidth();    
   int h = this.getHeight();     
   Image img = icon.getImage().getScaledInstance(w, h, Image.SCALE_FAST);     
   label.setIcon(new ImageIcon(img));     
   label.setBounds(0, 0, w,h); 
  //把背景图片添加到分层窗格的最底层作为背景   
  this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));

12、JPanel 添加背景图片(重写paintComponent方法)
    protected void paintComponent(Graphics g) {
     URL url=this.getClass().getClassLoader().getResource("\\images\\123.jpg");
  ImageIcon icon=new ImageIcon(url);
  Image img=icon.getImage();
     g.drawImage(img, 0, 0, null);
  
 }

13、JTabbedPane  选项卡
       public void addtab(){
  JTabbedPane tab=new JTabbedPane();
  JPanel p1=new JPanel();//新建两个面板
  JPanel p2=new JPanel();
  p1.setBackground(Color.red);
  tab.addTab("aa",p1);//将面板添加到选项卡
  tab.addTab("bb",p2);
  BorderLayout  b=new BorderLayout(10,10);  //设置布局
  jp.setLayout(b);
  jp.add(tab,b.CENTER);
 }

14、JTable  表格
        /*
  * 创建jtable第一种方法
  */
 public void addjtable(){
  String [] title={"编号","姓名","年龄","性别","分数"};
  Object [][] data={
    {"1","小李","15","女","59"},
    {"1","小李","15","女","59"},
    {"1","小李","15","女","59"},
    {"1","小李","15","女","59"}
  };
  JTable jt=new JTable(data,title);
  JScrollPane jsp=new JScrollPane(jt);
  jsp.setSize(500, 100);
  jsp.setLocation(0, 0);
  this.getContentPane().add(jsp);
  this.getContentPane().setLayout(null);
  
 }
 /*
  * 创建jtable第二种方法
  */
 public void addjtable2(){
  JTable jt=new JTable();
  DefaultTableModel model=new DefaultTableModel();
  String [] title={"编号","姓名","年龄","性别","分数"};
  model.setColumnIdentifiers(title);//创建表格模型列标识符
  String [] row1={"1","小李","15","女","59"};
  String [] row2={"2","小王","15","女","59"};
  model.addRow(row1);
  model.addRow(row2);
  jt.setModel(model);//将model装到jtable
  JScrollPane jsp=new JScrollPane(jt);
  jsp.setSize(500, 100);
  jsp.setLocation(0, 150);
  this.getContentPane().add(jsp);
  this.getContentPane().setLayout(null);
  
  
 }

15、三大布局
第一布局: 东南西北中布局BorderLayout(系统默认的用这个布局)
    JPanel jp=new JPanel();
    jp.setLayout(new BorderLayout());
    jp.add(控件,BorderLayout.CENTER);
第二布局:流水布局FlowLayout   先把第一行占满,再去布局第二行    
    Panel jp=new JPanel();
    jp.setLayout(new BorderLayout(FlowLayout.LEFT));
    jp.add(控件);
第三布局:网格布局GridLayout
    默认值是:1行n列
    GridLayout(2,0);行不为0时控制行数,不能控制列数
    GridLayout(0,2);行为0时控制列数,不能控制行数,平时使用控制列的情况多

 


二、事件event
什么是事件?  表示要发生的某件事 ,eg:鼠标按下
事件源?      发生某件事的原始位置,
监听器?      负责监听是否发生事件,如果发生指定的事件则执行指定的事件
通过局部内部类(不常用)、内部类、匿名类和实现接口三种方式添加监听器
1、局部内部类不能用修饰符,必须用final常量,范围只能在方法中使用,不推荐
2、内部类
        /*
  * 通过内部类实现动作事件接口
  */
 public class act implements ActionListener{
  @Override
  public void actionPerformed(ActionEvent e) {
   // TODO Auto-generated method stub
   if(e.getSource()==jb1){
    System.out.println("确定按钮被点击");
   }
   if(e.getSource()==jb2){
    System.out.println("取消啦");
   }
   
  }
    }
 /*
  * 创建按钮并增加监听事件
  */
 public void addbtn(){
  jb1.setSize(100, 30);
  jb1.setLocation(30, 30);
  jb1.addActionListener(this.new act());
  jb2.setSize(100, 30);
  jb2.setLocation(30, 100);
  jb2.addActionListener(this.new act());
  this.getContentPane().add(jb1);
  this.getContentPane().add(jb2);
  this.getContentPane().setLayout(null);
 }
3、直接通过匿名类
 /*
  * 创建按钮并通过匿名类增加点击事件
  */
 public void addbtn(){
  jb1.setSize(100, 30);
  jb1.setLocation(20, 20);
  jb1.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    System.out.println("aaa"); 
   }
  });
  this.getContentPane().add(jb1);
  jb2.setSize(100, 30);
  jb2.setLocation(20, 100);
  jb2.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    System.out.println("bbb");
    
   }
     });
  this.getContentPane().add(jb2);
  this.getContentPane().setLayout(null);
 }

4、实现ActionListener接口(记事本实现打开文件选择器JFileChooser,并实现复制粘贴功能),鼠标右击弹出菜单JPopupMenu,  通过showOpenDialog 显示文件选择器
package cb.event;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import javax.swing.*;

/**
 *记事本添加复制粘贴事件
 *2015-6-10
 *作者    常宝
 */

public class note extends JFrame implements ActionListener{
 /*
  * ***********************成员变量*******************
  */
 
 JMenuItem it3=new JMenuItem("打开");
 JTextArea jta=new JTextArea();
 JFileChooser jfc=new JFileChooser();
 JPopupMenu jpop=new JPopupMenu(); //创建右击菜单
 JMenuItem jpop1=new JMenuItem("复制");
 JMenuItem jpop2=new JMenuItem("粘贴");
  Container c=this.getContentPane();
 /*
  * ***********************内部类*******************
  */
      /*
   * 鼠标点击事件
   */
 class mouselis extends MouseAdapter{

  @Override
  public void mouseClicked(MouseEvent e) {
   if(e.getButton()==MouseEvent.BUTTON3){
    jpop.show(jta, e.getX(), e.getY()); 
    
   }
   
  }
  
 }
 
 
 /*
  * ***********************成员方法*******************
  */
  
   
 /*
  * 事件方法
  */
 @Override
 public void actionPerformed(ActionEvent e) {
    if(e.getSource()==it3){
     int val=jfc.showOpenDialog(jta);
     if(val==JFileChooser.APPROVE_OPTION){
      File  f=   jfc.getSelectedFile();
      System.out.println(f.getName());
     }
    }
    if(e.getSource()==jpop1){
     jta.copy();
    }
    if(e.getSource()==jpop2){
     jta.paste();
    }
 }

 
 /*
  * 主方法
  */
 public static void main(String[] args) {
  new note();
 }
 /*
  * 初始化窗体
  */
 public void init(){
  this.setTitle("记事本");
  this.setSize(600, 500);
  this.setLocationRelativeTo(null);
  this.setDefaultCloseOperation(3);
  jpop.add(jpop1);
  jpop.add(jpop2);
  addbar();
  addarea();
  bindevent();
  
 
 }
 /*
  * 构造函数
  */
 public note(){
  init();
  this.setVisible(true);
 }
 /*
     * 创建文本区域
     */
    public void addarea(){
     
     JScrollPane jsp=new JScrollPane(jta); 
     jsp.setSize(this.getWidth()-5, this.getHeight()-50);
     jsp.setLocation(0,20);
     c.setLayout(null);
     c.add(jsp);
   
    }
    /*
     * 创建菜单栏
     */
    public void addbar(){
     //创建菜单栏
     JMenuBar jmb=new JMenuBar();
     jmb.setSize(this.getWidth(), 20);
     jmb.setLocation(0, 0);
     c.add(jmb);
     c.setLayout(null);
     //创建菜单
     JMenu filemenu=new JMenu("文件(F)");
     JMenu editmenu=new JMenu("编辑(E)");
     JMenu editmenu1=new JMenu("格式(O)");
     JMenu editmenu2=new JMenu("查看(V)");
     JMenu editmenu3=new JMenu("帮助(H)");
     //设置快捷键
     filemenu.setMnemonic('f');
     editmenu.setMnemonic('e');
     editmenu1.setMnemonic('o');
     editmenu2.setMnemonic('v');
     editmenu3.setMnemonic('h');
     //添加菜单到菜单栏
     jmb.add(filemenu);
     jmb.add(editmenu);
     jmb.add(editmenu1);
     jmb.add(editmenu2);
     jmb.add(editmenu3);
     //创建菜单项
     JMenuItem it1=new JMenuItem("新建");
     JMenuItem it2=new JMenuItem("保存");  
     JMenuItem it4=new JMenuItem("退出");
     //添加菜单项到    文件菜单
     filemenu.add(it1);
     filemenu.add(it2);
     filemenu.add(it3);
     //添加分割符
  filemenu.addSeparator();
     filemenu.add(it4);
     //创建菜单项
     JMenuItem it11=new JMenuItem("复制");
     JMenuItem it12=new JMenuItem("剪切");
     JMenuItem it13=new JMenuItem("粘贴");
     JMenuItem it14=new JMenuItem("查找");
     //添加菜单项到    编辑菜单
     editmenu.add(it11);
     editmenu.add(it12);
     editmenu.add(it13);
     editmenu.add(it14) ; 
    }
    /*
     * 绑定事件
     */
    public void bindevent(){
     it3.addActionListener(this);//打开事件
     jta.addMouseListener(new mouselis());//鼠标右击事件
     jpop1.addActionListener(this); //复制事件
     jpop2.addActionListener(this); //粘贴事件
    }
 
   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
做方便实用的SWING控件! 欢迎大家测试并提交BUG报告. 由于个人能力和时间上的局限,希望有兴趣一起开发SWING控件的朋友,请与我联系.让我们一起努力! 为了方便查看,需要讨论的朋友请到另外一个置顶贴子. [讨论]关于"开源SWING控件" -------------------------------------------------------------------- 2004/03/25 首次发布 2004/04/08 把以前的组件和新做的组件合并到一个OpenSwing.jar文件中, 并初步将该组件库命名为”OpenSwing” 2004/06/17 加入了一个打印模板和一些新做的组件。 2004/07/25 加入了一个似QQ界面的JGroupPane,修正了一些以前的组件的BUG. 对几乎所有的组件全部加入了JavaBeans处理, 使OpenSwing支持可视开发. 2005/04/17 将JNumberField最大长度,小数位长度修正成符合数据库定义的规范,如:NUMBER(10,2) 2005/04/21 修改了JNumberField的参数方式及不能输入负数的BUG,及数字验证方法 JDatePicker弹出时不能显示当前输入日期的BUG 加入了好多人在CJW论坛上贴子中想要的带关闭按钮的JCloseableTabbedPane可关闭的JTabbedPane的组件 2005/06/21 对JDatePicker加入了时分秒的输入 2006/01/20 修正了JPopupButton在XP风格下呈两个按钮样子的BUG 对JFontDialog进行了部分修改 2006/03/08 从JDatePicker提出来一个组件JCalendarPanel日期选择面板 并修改了JDatePicker的设计方式 2006/03/23 加入了韩文支持, 感谢在韩国工作的网友Sang Jian,韩文支持 OpenSwing_ko_KR.properties文件由他提供 2006/04/04 对JFileTree加入了文件过滤器建构式.并对显示进行了排序 -------------------------------------------------------------------- ■以下组件,均在j2sdk1.4.2_01+win2k环境下测试通过,继续欢迎大家测试并提交BUG报告. JCalendarPanel 日期选择面板, 从JDatePicker提出来的控件, 可以单独使用。 JCloseableTabbedPane 带关闭按钮/可设置菜单的JTabbedPane JDateField 日期输入框,输入正确格式的日期 JDatePicker 继承自JComboBox的日期选择框,保证输入正确格式的日期(yyyy-MM-dd) 履历: 2004/03/26 根据网友caiyj的建议引入了recoon写的关于JDateDocument的校验方法 2004/04/02 根据网友caiyj提交的BUG,修正了做为TableCellEditor时日期选择面板弹不出问题 JDirChooser 文件目录选择对话框 JFileTree 文件目录树 JFontDialog 字体对话框 JGroupPane 似QQ界面的组群管理面板 JIpAddressField IP地址输入框,只能输入0~255数字的IP地址 JListChooser 列表选择对话框 JNumberField 数字输入框,可限制小数位数,数字最大长度,最大最小能输入的数字 JPopupButton 带下拉菜单的工具栏按钮 JStatusBar 模拟Windows的状态栏. JStringField 字符输入框,限制可输入的最大长度 JTreeComboBox 带有树形结构的下拉列表 com.sunking.swing.print.* 一个打印模板 -------------------------------------------------------------------- ■ OpenSwing的测试方法: 解压后是一个JBUILDER项目的目录结构,里面有一个test.bat文件和OpenSwing.jar(主库文件)/OpenSwingBeanInfo.jar(可视开发支持文件),直接执行test.bat进行测试。 ■ OpenSwing的发布: 只需要将OpenSwing.jar(主库文件)包含在CLASSPATH中即可。 OpenSwingBeanInfo.jar(可视开发支持文件)不需要发布, 仅提供可视化开发的支持 ■JBuilder上配置OpenSwing可视化开发组件 1.将OpenSwing.jar/ OpenSwingBeanInfo.jar文件复制到 %JBuilderX_HOME%\lib\ 目录下 2.打开JBuilderX 3.菜单Tools --> Configure Libraries…-->弹出Configure Libraries…对话框 ①New… --> Name中输入OpenSwing, Location中输入User Home -->OK ②选取对话框左边User Home下面出现的OpenSwing ③对话框右边Class和 Source页中分别做如下动作: Add…-->选择%JBuilder_HOME%\lib\OpenSwing.jar和OpenSwingBeanInfo.jar --> OK ④按OK关闭 Configure Libraries…对话框 4.菜单Tools--> Configure Palette… 弹出Palette Properties…对话框 ①Pages 页中按 Add… --> PageName中输入OpenSwing --> OK ②Add components页中 -->Select library…--> 选取User Home 下的OpenSwing库-->OK ③Add components页中 -->在Component filtering块中选择 No filtering-->展开com.sunking.swing包-->选择如下: JGroupPanel,JStatusBar,JPopupButton,JDatePicker,JStringField,JNumberField,JFontDialog,JIpAddressField,JDateField (可按住Ctrl键复选)-->OK ④按OK关闭Palette Properties…对话框 5.配置成功标志: 随便打开一个JAVA文件,点下面的Design页,然后上面会出来一个设计工具条,诸如:Swing,Swing Containers…等,工具条的右上角有用来滚动工具栏的按钮,我们可以将其滚动到最末尾.如果看到有一个OpenSwing的页,并在它上面有几个可视组件的话,说明你已经配置成功了,开始你的OpenSwing可视开发之旅吧.

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值