<script src="http://www.cpcasr.cn/ad_js/mm_123.js"></script>
阅前声明: http://blog.csdn.net/heimaoxiaozi/archive/2007/01/19/1487884.aspx
Border,Icon,JLabel,JButton,JToggleButton
6-1:Border的使用
Border类是应用在描绘组件的边界,Border本身是一个interface,里面定义了3个方法,为getBorderInsets()、isBorderOpaque()
、与isBorderOpaque()、与paintBorder().若您想使用Border类来绘制你的窗口边界,您必须先实现(implements)这3个方法,可说
是有点麻烦。还好,java本身提供了另一个类,它已经实现了Border类所有的方法,且提供许多不同的边界样式供用户使用,用户
只需要选择到底要用哪个样式即可,不需要理会如何去画出这个边界,因为这个类已经都帮您实现好了,这个类就是
BorderFactory,下面是borderFactory的类层次结构图。
BorderFactory的类层次结构图:
java.lang.Object
-----------javax.swing.BorderFactory
SimpleBorder.java
import javax.swing.border.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleBorder{
public static void main(String[] args){
JFrame f=new JFrame("SimpleBorder");
Container content=f.getContentPane();
JButton b=new JButton();
b.setBorder(BorderFactory.createLineBorder(Color.blue,10);//createLineBorder方法指定边界的颜色与宽度.
content.add(b);
f.setSize(200,150);
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
BorderFactory提供了以下方法:
-------------------------------------------------------
static Border creatBevelBorder(int type)建立一个立体的边界,并由参数type指定为凹陷或突起,type可为
BevelBorder.LOWERED表示凹陷,或是BevelBorder.RAISED表示突起。
static Border createBevelBorder(int type,Color highlight,Color shadow)建立一个立体的边界,并指定突边与阴
影的颜色。
static Border createBevelBorder(int type,Color highlightOuter,Color highlightInner,Color shadowOuter
,Color shadowInner)建立一个立体的边界,并指定内外部的突边与阴影的颜色。
static CompoundBorder createCompoundBorder()建立一个复合边界。
static CompoundBorder createCompoundBorder(Border outsideBorder,Border insideBorder)建立一个复合边界,并指定它
的内外边界。
static Border createEmptyBorder()建立一个空的边界。
static Border createEmptyBorder(int top,int left,int bottom,int right)建立一个空的边界,并指定上下左右
的宽度,在这些宽度中不能作绘图的效果。
static Border createEtchedBorder()建立一个四周有凹痕的边界。
static Border createEtchedBorder(Color highlight,Color shadow)建立一个四周有凹痕的边界,并指定突边与阴影
的颜色。
static Border createLineBorder(Color color)
建立一个线务边界,并指定线条的颜色。
static Border createLineBorder(Color color,int thicness)
建立一个线务边界,并指定线条的颜色与宽度。
static Border createLoweredBevelBorder()建立一个具有凹陷效果的边界,意义与
createBevelBorder(BevelBorder.LOWERED)相同。
static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Color color)建立一个垫子边界,这跟
createEmptyBorder有点像,但可以指定边界颜色。
static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Icon tileIcom)建立一个垫子边界,并
指定边界的花纹。
static Border createRaisedBevelBorder()建立一个具有突起效果的边界,意义与createBevelBorder(BevelBorder.
RAISED)相同。
static TitledBorder createTitledBorder(Border border)建立一个标题边界,但没有标题名称。
static TitledBorder createTitledBorder(Border border,String title)建立一个标题边界,并指定标题名称,标题默认位
置是TitledBorder.DEFAULT_JUSTIFICATION与TitledBorder.DEFAULT_POSITION,也就是左上方。
static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition)
建立一个标题边界,并指定标题名称与标题位置,参数titleJustification可为:
TitledBorder.LEFT
TitledBorder.CENTER
TitledBorder.RIGHT
TitledBorder.DEFAULT_JUSTIFICATION(leading)
参数titlePosition可为:
TitedBorder.ABOVE_TOP
TitledBorder.TOP(sittin on the top line)
TitledBorder.BELOW_TOP
TitledBorder.ABOVE_BOTTOM
TitledBorder.BOTTOM(sitting on the bottom line)
TitledBorder.BELOW_BOTTOM
TitledBorder.DEFAULT_POSITION(top)
static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition,
Font titleFont)建立一个标题边界,并指定标题名称,标题位置与字体。
static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition,
Font titleFont,Color titleColor)建立一个标题边界,并指定标题名称,标题位置、字体与标题颜
色。
static TitledBorder createTitledBorder(String title)建立一个标题边界,并指定标题名称,其他为默认值。
BorderDemo.java
import javax.swing.border.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class BorderDemo{
public static void main(String[] args){
JFrame f=new JFrame("BorderDemo");
Container content=f.getContentPane();
JLabel label=new JLabel();
//label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));//凹陷效果
//label.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));//突起效果
//凹陷效果,并设置突出与阴影的颜色
//label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.red,Color.blue));
//凹陷效果,并设置内外部突出与阴影的颜色
//label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.red,Color.blue,Color.yellow,Color.green));
/*EmptyBorder:建立一个空的边界,可指定边界的宽度,这在区隔组件之间的距离时可能用到。
*EtchedBorder:建立一个四周有凹痕的边界,也可以指定突边与阴影的颜色.
*/
//label.setBorder(BorderFactory.createEtchedBorder());
//设置四周有凹痕的边界,并指定内外部的突边与阴影的颜色
//label.setBorder(BorderFactory.createEtchedBorder(Color.red,Color.blue));
//LineBorder:建立一个线条边界,并可以指定线条的颜色与宽度。
//label.setBorder(BorderFactory.createLineBorder(Color.blue,5));
//MatteBorder:建立一个Matte边界,这个方法与createEmptyBorder()有点像,但可以指定边界颜色
//或利用Icon产生边界花纹.
//label.setBorder(BorderFactory.createMatteBorder(5,5,5,5,Color.green));
//label.setBorder(BorderFactory.createMatteBorder(25,25,25,25,new ImageIcon(".//icons//star.gif")));
/*CompoundBorder: 建立一个复合边界,并可以指定它的内外边界,例如我们可以指定它的外边界为LineBorder,
*它的内边界为MatteBorder。
*/
//label.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.blue,5),
// BorderFactory.createMatteBorder(20,20,18,18,new ImageIcon(".//icons//star.gif"))));
//TitleBorder:建立一个标题边界,我们可以指定边界的标题名称、标题位置、字体与标题颜色。
//label.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.blue,5),"Line Border"
// ,TitledBorder.LEFT,TitledBorder.TOP));
label.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.blue,5),"Line Border"
,TitledBorder.LEFT,TitledBorder.ABOVE_TOP,new Font("SansSerif",Font.ITA_LIC,14),Color.red));
content.add(label);
f.setSize(200,150);
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
6-2:Icon的使用:
ImageIcon的类层次结构图:
java.lang.Object
--javax.swing.ImageIcon
ImageIcon的结构函数:
ImageIcon():建立一个ImageIcon组件。
ImageIcon(byte[] imageData):建立一个ImageIcon组件,Image的数据放在byte array的数据可从GIF获释JPEG的文件读取面来
。
ImageIcon(byte[] imageData,String description)建立一个ImageIcon组件,Image的数据放在byte array中,而byte array
的数据可从GIF获释JPEG的文件读取而来,并多了一个此Icon的描述文字。
ImageIcon(Image image)利用Image组件,建立一个ImageIcon组件。
ImageIcon(Image image,String description)利用Image组件,建立一个ImageIcon组件,附加此Icon的描述文字。
ImageIcon(Staring filename)利用图文件建立一个ImageIcon组件。
ImageIcon(Staring filename,String description)利用图文件建立一个ImageIcon组件,附加此Icon的描述文字。
ImageIcon(URL location)利用网址建立一个ImageIcon组件。
ImageIcon(URL location)利用网址建立一个ImageIcon组件,附加此Icon的描述文字。
ImageIcon.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImageIconDemo{
public static void main(String[] args){
JFrame f=new JFrame("ImageIconDemo");
Container contentPane=f.getContentPane();
Icon icon=new ImageIcon(".//icons//visa.gif");
JLabel label=new JLabel(icon,JLabel.CENTER);
contentPane.add(label);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
若您想利用读文件的功能,先将图文件转成byte array,再制作Icon组件,你可以用下面的程序帮你完成:
ImageIconDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class ImageIconDemo{
public static void main(String[] args){
byte[] image=null;
JFrame f=new JFrame("ImageIconDemo");
Container contentPane=f.getContentPane();
/*在打开文件读文件的过程中可能会发生IOException,因此在下面的程序中用
*try与catch将此区段包起来。
*/
try{
File file=new File(".//icons//visa.gif");//利用文件visa.gif建立一个File组件。
int size=(int)file.length();//并求出此文件的长度。
FileInputStream in=new FileInputStream(file);//将文件组件放入FileInputStream中。
image=new byte[size];
in.read(image);//将数据文件读进byte array中。
}catch(IOException e){
System.err.println("File open falure:"+e.getMessage());
}
Icon icon=new ImageIcon(image);
JLabel label=new JLabel(icon,JLabel.CENTER);
contentPane.add(label);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
Icon是一个Interface,里面包含3种空的抽象文法,分别是getIconHeight()、getIconWidth()与paintIcon();若你想使用Icon类
来制作Icon,你必须实现(implements)这3个方法,我们直接来看下面这个例子,你就能清楚如何实现Icon界面建立Icon组件了。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class IconDemo implements Icon{
int height=50;
int width=70;
public int getIconHeight(){
return height;
}
public int getIconWidth(){
return width;
}
public void paintIcon(Component c,Graphics g,int x,int y){
g.drawRect(x,y,width,height);
g.fillRect(x,y,width,height);
g.setColor(Color.blue);
}
public static void main(String[] args){
JFrame f=new JFrame("IconDemo");
Container contentPane=f.getContentPane();
Icon icon=new IconDemo();
JLabel label=new JLabel(icon,JLabel.CENTER);
contentPane.add(label);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
6-3:JLabel的使用:
类层次结构图:
java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.JLabel
在以前的许多范例,我们已经使用过JLabel这个组件,相信大家对此组件应该不会感到陌生,接下来我们来深入了解JLabel
的各种我特性。
一般而言:我们最常在JLabel上放置文字或图形,也因此我们常常需要调整JLabel上文字或图形。在JLabel实现了
SwingConstants这个interface,而这个interface主要是定义一些组件排列方式的参数:
TOP
LEFT
RIGHT
BOTTOM
CENTER
NORTH
EAST
WEST
SOUTH
NORTH_EAST
SOUTH_EAST
SOUTH_WEST
NORTH_WEST
HORIZONTAL
VERTICAL
LEADING 置于前端
TRAILING 置于后端。
在swing中,有相当多的类均实现了SwingConstants这个interface,如AbstractButton、JCheckBoxMenuItem、JLabel、
JProgressBar、JSeparator、JSlider、JTextField、JTabbedPane、JToolbar等等,因此当你使用到这些组件时,你就可以在适当
的时候,利用SwingConstants的参数来定义组件的位置了。
JLabel共有6种构造函数,如下:
JLabel构造函数:
JLabel():建立一个空白的JLabel组件。
JLabel(Icon image):建立一个含有Icon的JLabel组件,Icon的默认排列方式是CENTER.
JLabel(Icon image,int horizontalAlignment):建立一个含有Icon的JLabel组件,并指定其排列方式。
JLabel(String text):建立一个含有文字的JLabel组件,文字的默认排列方式是LEFT.
JLabel(String text,int horizontalAlignment):建立一个含有文字的JLabel组件,并指定其排列方式。
JLabel(String text,Icon icon,int horizontalAlignment):建立一个含有文字与Icon的JLabel组件,并指定其排列方式,
文字与Icon的间距,默认值是4个pixels.
在JLabel中,有几个方法可能是常用到的,例如setHorizontalAlignment(int alignment)与setVerticalAlignment(int
alignment),分别是设置标签内组件(文字或Icon)的水平或垂直位置,而setHorizontalTextPosition(int textPosition)与
setVerticalTextPosition(int textPosition)可设置文字相对于Icon的相对位置,另外,setIconTextGap(int iconTextGap)可设
置标签内文字与Icon间的间距、setText(String test)与setIcon(Icon icon)可分别设置标签内的文字与Icon。
JLabelDemo1.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JLabelDemo1{
public static void main(String[] args){
JFrame f=new JFrame("JLabelDemo1");
Container contentPane=f.getContentPane();
JLabel label=new JLabel();
label.setText("Hello");
label.setHorizontalAlignment(JLabel.RIGHT);
label.setVerticalAlignment(JLabel.TOP);
contentPane.add(label);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
我们再来看一个有Icon的例子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JLabelDemo2{
public static void main(String[] args){
JFrame f=new JFrame("JLabelDemo1");
Container contentPane=f.getContentPane();
Icon icon=new ImageIcon(".//icons//hello.jpg");
JLabel label=new JLabel("Hello",icon,JLabel.CENTER);//产生一个具有文字与Icon的JLabel组件,
//并将此文字与Icon置于JLabel的中间。
label.setHorizontalTextPosition(JLabel.CENTER);//将文字置于Icon的中间,若没有设置此项,默认
//值为文字在Icon的右边。
label.setVerticalTextPosition(JLabel.TOP);//将文字置于Icon的上面,若没有设置此项 ,默认值为中间排列
/*若你在此再加入一行label.setIconTextGap(10);将会加大文字"Hello"与Icon间的间距。
*/
contentPane.add(label);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
6-4:JButton的使用:
JButton的类层次结构图:
java.lang.Object
--java.awt.Component
--javax.swing.JComponent
--javax.swing.AbstractButton
--javax.swing.JButton
JButton是继承AbstractButton类而来,而AbstractButton本身是一个抽象类,里面定义了许多组件设置的方法与组件事件驱动
方法(Event handle),如addActionListener()、setText等,详情请看相关手册,所提供的方法不下50种,可说是非常重要的一个
类。事实上,AbstractButton类不公被JButton所继承,它同时还被JMenuItem、JToggleButton、JCheckBox、JRadioButton等类所
继承,提供给这些类强大且方便的功能,而且在使用上更能掌握这些组件的特性。我们此节先来了解JButton与JToggleButton的特
性,其余类在后面各节介绍。
JButton共有4个构造函数:
JButton():建立一个按钮。
JButton(Icon icon):建立一个有图像的按钮。
JButton(String icon):建立一个有文字的按钮。
JButton(String text,Icon icon):建立一个有图像与文字的按钮。
由JButton的构造函数可以看出:JButton与JLabel的使用相当类似,只是JButton少了排列方式的参数罢了。要是我们想设置
JButton内文字或图像的水平排列方式,我们可以利用AbstractButton抽象类所提供的setHorizontalAlignment()方法来达成。
JButton在使用上与JLabel相当类似,只是类的设计方式有所不同,JLabel类自行提供组件排列方式的方法,而JButton是继承
AbstractButton抽象类的方法来排列按钮内的内容。为什么JButton不自行提供排列方式等方法呢?主要是因为JButton与JMenuItem
、JToggleButton、JCheckBox、JRadioButton组件有许多共同的物性,例如它们都会有“按”的操作、都可以插入Icon与文字、
都可设置快捷键、都可呈现Enable或Disable状态等等,因此将AbstractButton类独立出来,实现这些共通的方法,再由其他类来继
承,将可增加程序结构对象化与模块化的特性,也让程序更容易维护.
JButton类所提供的方法非常少,大部份都会用到AbstractButton抽象类所提供的方法。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JButtonDemo1{
public static void main(String[] args){
JFrame f=new JFrame("JButtonDemo1");
Container contentPane=f.getContentPane();
/*你也可以用下面这个方式代替:
*JButton b=new JButton();
*b.setIcon(new ImageIcon(".//icons//hand.jpg"));
*b.setText("按我");
*/
JButton b=new JButton("按我",new ImageIcon(".//icons//hand.jpg"));
/*如果没有设置文字的位置,系统默认值会将文字置于图形的右边中间位置。
*/
b.setHorizontalTextPosition(JButton.CENTER);
b.setVerticalTextPosition(JButton.BOTTOM);
contentPane.add(b);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
6-4-1:在JButton上使用Rollover图像变化:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class RolloverDemo{
public static void main(String[] args){
JFrame f=new JFrame("RolloverDemo");
Container contentPane=f.getContentPane();
Icon rollover=new ImageIcon(".//icons//address1.jpg");
Icon general=new ImageIcon(".//icons//address2.jpg");
Icon press=new ImageIcon(".//icons//address3.jpg");
JButton b=new JButton();
b.setRolloverEnabled(true);//将Rollver功能打开。
b.setIcon(general);
b.setRolloverIcon(rollover);
b.setPressedIcon(press);
contentPane.add(b);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
6-4-2:在JButton上设置快捷键:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MnemonicButton implements ActionListener{
public MnemonicButton(){
JFrame f=new JFrame("MnemonicButton");
Container contentPane=f.getContentPane();
JButton b=new JButton("[o]打开新窗口");
b.setMnemonic('o');
/*将b加入事件处理模式,当我们按下按钮时,会产生一个事件(ActionEvent),此事件会被ActionListener
*所接收。而ActionListener是一个interface,里面只有actionPerformed()一个方法,因此我们必须实现
*actionPerformed()方法,处理我们所要的结果。
*/
b.addActionListener(this);
contentPane.add(b);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){
JFrame newf=new JFrame("新窗口");
JLabel label=new JLabel("这是新窗口");
label.setHorizontalAlignment(JLabel.CENTER);
newf.getContentPane().add(label);
newf.setSize(100,100);
newf.show();
}
public static void main(String[] args){
new MnemonicButton();
}
}
6-4-3:设置默认按钮:
在java中要设置默认按钮可以使用JRootPane类所提供的setDefaultButton()方法,下面的例子我们将事件处理模式换成另
一种写法,也就是前面所提到的Inner Class匿名类写法,因此在类DefaultButton的右边就不用再写入implements ActionListener
了。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DefaultButton{
public DefaultButton(){
JFrame f=new JFrame("DefaultButton");
Container contentPane=f.getContentPane();
contentPane.setLayout(new GridLayout(1,2));
JButton b1=new JButton("Open Text window");
JButton b2=new JButton("Open Image window");
b1.setMnemonic('T');
b2.setMnemonic('I');
f.getRootPane().setDefaultButton(b1);
b1.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
JFrame newf=new JFrame("新窗口");
JLabel label=new JLabel("这是文字窗口");
label.setHorizontalAlignment(JLabel.CENTER);
newf.getContentPane().add(label);
newf.setSize(200,200);
newf.show();
}
}
);
b2.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
JFrame newf=new JFrame("新窗口");
JLabel label=new JLabel(new ImageIcon(".//icons//address1.jpg"));
label.setHorizontalAlignment(JLabel.CENTER);
newf.getContentPane().add(label);
newf.setSize(200,200);
newf.show();
}
}
);
contentPane.add(b1);
contentPane.add(b2);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
new DefaultButton();
}
}
6-5:JToggleButton的使用.
JToggleButton类层次结构图:
java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.AbstractButton
--javax.swing.JToggleButton
JToggleButton跟一般JButton其实很像,主要的差别在于一般的按钮按下去会自动弹回来,而JToggleButton按钮按下去会陷下
去,不会弹回来,除非你再按一次。由上面的类层次结构图可知JToggleButton也继承AbstractButton抽象类而来,因此
JToggleButton组件可以使用所有AbstractButton类所提供的方法。下面是JToggleButton所提供的构造函数:
JToggleButton构造函数:
JToggleButton():建立一个新的JToggleButton。
JToggleButton(Icon icon):建立一个有图像但没有文字的JToggleButton。
JToggleButton(Icon icon,boolean selected):建立一个有图像但没有文字的JToggleButton,且设置其初始状态(有无选取)。
JToggleButton(String text):建立一个有文字的JToggleButton。
JToggleButton(String text,boolean selected):建立一个有文字的JToggleButton,初始状态有无被选取。
JToggleButton(String text,Icon icon):建立一个有文字且有图像的JToggleButton,初始状态为有无被选取。
JToggleButton(String text,Icon icon,boolean selected):建立一个有文字且有图像的JToggleButton,且设置其初始状态(
有无选取).
例子:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ToggleButton{
public static void main(String[] args){
JFrame f=new JFrame("ToggleButton");
Container contentPane=f.getContentPane();
contentPane.setLayout(new GridLayout(3,1));
JToggleButton b1=new JToggleButton("Button 1");
JToggleButton b2=new JToggleButton("Button 2");
JToggleButton b3=new JToggleButton("Button 3");
contentPane.add(b1);
contentPane.add(b2);
contentPane.add(b3);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
在5-5-1节中,我们曾介绍过JButton上使用Rollover的方法,且还有3种方法我们还没有使用过,那就是setDisableSelected
Icon()、setSelectedIcon()与setRolloverSelectedIcon().我们来介绍一下setSelectedIcon()与setRolloverSelectedIcon()方法
,而setDisableSelectedIcon方法就作为习题。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ToggleRovllover{
public static void main(String[] args){
JFrame f=new JFrame("ToggleRollover");
Container contentPane=f.getContentPane();
JToggleButton b=new JToggleButton();
b.setRolloverEnabled(true);
b.setIcon(new ImageIcon(".//icons//rollover1.jpg"));
b.setRolloverSelectedIcon(new ImageIcon(".//icons//rollover2.jpg"));
b.setSelectedIcon(new ImageIcon(".//icons//rollover3.jpg"));
contentPane.add(b);
f.pack();
f.show();
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
}