SwingHacks学习笔记(2)-----自定义JLabel,JButton

关键字: swinghacks,swing

接着上次的进度,上次写完了背景,

SwingHacks学习笔记(1)-----自定义JPanel(一个以图像填充的组件)

现在可以考虑标签和按钮了。

这个标签是位于背景上的某个位置的静态图像。

例1.3:一个图像标签类

package  org.component;

import  javax.swing.ImageIcon;
import  javax.swing.JLabel;

/**
 *
 * 
@author  root
 
*/
public   class  ImageLabel  extends  JLabel {
    
     
public  ImageLabel(String img) {
        
this ( new  ImageIcon(img));
        System.out.print(img);
    }


    
public  ImageLabel(ImageIcon icon)
    {
        
// 得到的是图像的长和宽
        setSize(icon.getImage().getWidth( null ),icon.getImage().getHeight( null ));
        setIcon(icon);   
// 设置图像
        setIconTextGap( 0 );   // 设置文本间隙
        setBorder( null );   // 设置边框和文本为null,这样可以消除图像周围的多余空间。
        setText( null );
        setOpaque(
false );   // 告诉标签不要绘制自己的背景。即可以变成透明的。
    }
    
}

写完上面的代码后就可以在ImageTest 的main 方法里加入下面这段代码:
ImageLabel2 label  =   new  ImageLabel2( new  ImageIcon(ImagePanelTest. class .getResource( " /images/stop.png " )));
 
label.setLocation(
130 40 );
panel.add(label);

测试一个效果:(这次换个背景,原来的背景太鲜艳了,这次换个淡点的。 )

注意红色的stop图表:


既然ImageLabel 效果有了,现在开始写ImageButton了


package  org.component;

import  java.awt.Insets;
import  javax.swing.ImageIcon;
import  javax.swing.JButton;

/**
 *
 * 
@author  root
 
*/
public   class  ImageButton  extends  JButton {
    
    
public  ImageButton(String img) {
        
this ( new  ImageIcon(img));
        System.out.print(img);
    }

    
public  ImageButton(ImageIcon icon) {
        setSize(icon.getImage().getWidth(
null ),icon.getImage().getHeight( null ));
        setIcon(icon);
        setMargin(
new  Insets( 0 0 0 0 ));  // 设置按钮边框和标签之间的空白
        setIconTextGap( 0 );    // 设置文本间隙
        setBorderPainted( false );  // 设置是否允许绘制边框
        
        setBorder(
null );  
        setText(
null );
    }
    
}

为ImageButton 添加互动和其他状态,幸运的是,这项工作不需要自己编写,JButton 已经为表示滚动,按下,选中,失效和失效选中状态的图像提供了支持。可通过普通的set方法添加各种选中状态:

在ImageTest 的main 方法里加入

 
       
final  ImageButton button  =   new  ImageButton( new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure1.png " )));
        button.setLocation(
180 80 );
        button.setPressedIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure3.png " )));
        button.setRolloverIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure-Rollover.png " )));
        button.setSelectedIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure3.png " )));
        button.setRolloverSelectedIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure-rolloverselected.png " )));
        button.setDisabledIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure-disable.png " )));
        button.setDisabledSelectedIcon(
new  ImageIcon(ImagePanelTest. class .getResource( " /images/sure-disable.png " )));
        
         button.addActionListener(
new  ActionListener() {
            
public   void  actionPerformed(ActionEvent evt) {
                button.setSelected(
! button.isSelected());
                System.out.println(
" selecting " );
            }            
        });

 panel.add(button);      

  看看效果图:



现在添加一个可以控制按钮是否可用的方法。我们可以借助JCheckBox 来实现

在ImageTest main 方法里添加以下代码:

   final  JCheckBox checkbox  =   new  JCheckBox( " Disable " );
        checkbox.setLocation(
180 , 150 );
        checkbox.setOpaque(
false );
        checkbox.setSize(checkbox.getPreferredSize());
        panel.add(checkbox);
        checkbox.addActionListener(
new  ActionListener() {
            
public   void  actionPerformed(ActionEvent evt) {
                button.setEnabled(
! checkbox.isSelected());
            }
        });
       

然后在进行测试 ,效果如下:

 

项目里的所需的图片文件都在附件里 点击这里下载


你可能感兴趣的:(SwingHacks学习笔记(2)-----自定义JLabel,JButton)