当前位置:文档之家› Swing组件及应用

Swing组件及应用

Swing组件及应用
Swing组件及应用

Swing组件及应用

Swing组件是Java推出的一套新的图形用户界面开发工具包,它简化了基于图形界面的窗口系统的开发。使用Swing可以方便地选择与设计自己需要的GUI风格,带来了更多的灵活性和更强大的功能。

Swing是建立在AWT之上的,它利用了AWT的下层组件,包括图形、颜色、字体、布局管理器和工具包,也使用了AWT的事件处理机制,但基本上没有使用AWT的基本组件。Swing提供了几十个组件,数倍于AWT,增加了Windows环境下几乎所有的控件,极大的方便了图形用户界面的设计。Swing组件几乎都是轻量组件,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。

主要介绍Swing组件的基本思想及一些常用的Swing组件的功能与用法,并讲述了利用JBuilder进行图形用户界面设计的基本过程。

1 Swing简介

1.1 Swing窗口的层次

Swing窗口建立时,其中包含了五个层次,远比AWT的窗口复杂。

顶层容器Top Level Container:

顶层容器Top Level Container是一个窗口容器对象,在这样的一个对象里可以再加入其他的窗口对象。JFrame、JApplet、JDialog等就可以作为顶层容器Top Level Container。

根面板Root Pane:

根面板Root Pane:是顶层容器Top Level Container中所包含的最内层,通常我们无法在这一层做操作与处理。

层次面板Layered Pane:

加入在层次面板Layered Pane中对象可以设定其层次,而不会被内容面板Content Pane 中对象屏蔽。层次高的对象和层次低的对象重叠时,层次低的对象会被屏蔽。

内容面板Content Pane:

大部分的可视对象都放在内容面板Content Pane中,一般在程序中必须用getContentPane()方法来获取窗口容器,然后将其加到这一层中。

玻璃面板Glass Pane:

在玻璃面板Glass Pane这一层次上主要用来产生绘图效果,以及触发窗口程序的各种事件。

1.2 Swing包简介

Swing包是JFC(Java Foundation Classes)的一部分,由许多包组成。表1列出了一些常用的包。其中包javax.swing包含了图形用户界面所需的基本组件和工具。

表1 Swing包简介

1.3 Swing组件

Swing提供了40多个组件,其组件名均以J开头,表2列出了Swing组件极其描述,并给出了与之对应的AWT组件。

表2 Swing组件简介

2 Swing常用组件(一)

2.1 窗口JFrame

JFrame是带标题的顶层窗口,它是从java.awt.Frame继承而来的,因此Frame的所有方法,JFrame都可以用。JFrame的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--java.awt.Window

|

+--java.awt.Frame |

+--javax.swing.JFrame

1. 构造函数

JFrame 的构造函数有两个: JFrame()

功能:建立一个无标题的JFrame 。 JFrame(String title)

功能:建立一个标题为title 的JFrame 。 JFrame(GraphicsConfiguration gc)

功能:建立一个无标题但要求指定配置显示设备的JFrame 。 JFrame(String title ,GraphicsConfiguration gc)

功能:建立一个标题为title 、显示设备配置为gc 的JFrame 。 2. 常用方法

因为JFrame 继承了Frame ,所以Frame 的几乎所有方法,JFrame 都具有(参见表9.1)。此外,JFrame 还增加了自己的一些方法,表3列出了一些常用的方法。

表3 JFrame 增加的一些常用方法

3. 示例

【例1】建立一个JFrame 对象,运行的结果为图1,比较例9.1,注意程序及运行结果的差异。程序为:

import java.awt.*; import javax.swing.*;

//用到Swing 组件,必须引用java.swing 包 public class MyJFrame

{ public static void main(String args[])

图10.1

{ JFrame fr=new JFrame();

//创建一个无标题的JFrame对象fr

fr.setTitle("这是一个JFrame,它不同于AWT的Frame");

//将fr的标题设为"这是一个JFrame,它不同于AWT的Frame "

FlowLayout fl=new FlowLayout();

//创建一个布局管理器FlowLayout的对象fl

fr.getContentPane().setLayout(fl);

//设定窗口fr的布局管理器为fl

//注意:这里必须先用getContentPane()方法,这是与Fame不同的

fr.setSize(400,300);

//设定fr的宽度为400,高度为300

fr.getContentPane().setBackground(Color.green);

//设定fr的背景色为绿色。

//注意:这里应该先用getContentPane()方法,

//否则设置的颜色看不到,这是与Fame不同的

fr.setLocation(300,500);

//设定fr左上角的初始位置为(300,500)

fr.setResizable(true);

//设定fr为可调整大小

fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设定窗口可以关闭。而在AWT的Frame中,需要注册监听器等一系列的代码

fr.setVisible(true);

}

}

2.2 容器JPanel

JPanel是一个通用容器,它没有边框或其他可见的边界,不能移动、放大、缩小或关闭,无法单独显示,必须放到JFrame或JApplet中。JPanel的默认布局管理器是FlowLayout。它的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.JPanel

1.构造函数

JPanel的构造函数常用的有两个:

JPanel()

功能:建立一个JPanel对象。

JPanel(LayoutManager layout)

功能:建立一个JPanel对象,其布局管理器为layout。

2.常用方法

JPanel一般只用它父类的方法,它自己几乎没有增加或重写父类的方法。

3. 示例

【例2】建立一个JFrame对象和JPanel对象,运行的结果为图2,和AWT的Frame及Panel 相比,注意程序及运行结果的差异。程序为:

import java.awt.*;

import javax.swing.*;

public class MyJPanel

{ public static void main(String args[])

{ JFrame fr=new JFrame();

fr.setTitle("JPanel的用法");

BorderLayout bl=new BorderLayout();

//创建一个布局管理器BorderLayout的对象bl

fr.getContentPane().setLayout(bl);

//设定窗口fr的布局管理器为bl

//注意:这里必须先用getContentPane()方法

JPanel jp=new JPanel(new GridLayout(2,2));

//创建一个面板容器JPanel的对象jp,其布局管理器为2行2列的GridLayout

fr.getContentPane().add("Center",jp);

//将容器jp加到窗口fr的中央

JLabel jl=new JLabel("this is a test");

//创建一个标签JLabel的对象jl,其标题为"this is a test"

fr.getContentPane().add("South",jl);

//将标签jl加到窗口fr的南部,这里必须先用getContentPane()方法

JLabel l1=new JLabel("First",JLabel.CENTER);

jp.add(l1);

//将标签jl加到容器jp中

JLabel l2=new JLabel("Second",JLabel.CENTER);

jp.add(l2);

JLabel l3=new JLabel("Third",JLabel.CENTER);

jp.add(l3);

Font ft=new Font("Serif",Font.BOLD,18);

//定义一个字体对象ft

jl.setFont(ft);

//设定jl的字体

l1.setFont(ft);

l2.setFont(ft);

l3.setFont(ft);

fr.getContentPane().setBackground(Color.green);

//设定fr的背景色为绿色

fr.setLocation(300,500);

//设定窗口的初始显示位置

fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设定窗口可以关闭

fr.setSize(400,300);

fr.setResizable(true);

fr.setVisible(true);

}

}

3 Swing常用组件(二)

3.1 标签JLabel

标签JLabel与AWT中的Label功能相似,但除了可显示文字外,还可以用来显示图形,这是与AWT中的Label的主要差别。JLabel的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.JLabel

1. 构造函数

JLabel的构造函数有六个:

JLabel ()

功能:建立一个没有标题、没有图标的JLabel对象。

JLabel (String txt)

功能:建立一个JLabel对象,其初始标题为txt,没有图标。

JLabel (String txt,int halign)

功能:建立一个JLabel对象,其初始标题为txt,水平对齐方式为halign,没有图标。其中halign的值为LEFT、RIGHT、CENTER分别代表左对齐、右对齐、居中。

JLabel (Icon ico)

功能:建立一个JLabel对象,其初始图标为ico,没有标题。

JLabel (String txt, Icon ico ,int halign)

功能:建立一个JLabel对象,其初始标题为txt,初始图标为ico,水平对齐方式为halign。

JLabel (Icon ico,int halign)

功能:建立一个JLabel对象,其图标为ico,水平对齐方式为halign,没有标题。

2. 常用方法

表4列出了标签JLabel类的几个常用的方法。

表4 JLabel的常用方法

3. 常用事件

与标签JLabel关联的事件一般是:MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。

多数情况下,标签JLabel仅用于显示文字和图形,不需要响应用户的操作,因此不需要给JLabel注册监听器。

3.2 命令按钮JButton

命令按钮JButton与AWT中的按钮Button类似,但在按钮上还可以再显示一张图片,使得制作的按钮丰富多彩。鼠标落在、离开、按住按钮都可以通过不同的图片来反映,并可以为按钮提供提示信息。JButton的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.AbstractButton

|

+--javax.swing.JButton 1. 构造函数

JButton的构造函数常用的有四个:

JButton ()

功能:建立一个没有标题、没有图标的JButton对象。

JButton(String txt)

功能:建立一个标题为txt的JButton对象,没有图标。

JButton(Icon ico)

功能:建立一个JButton对象,图标为ico,没有标题。

JButton(String txt ,Icon ico)

功能:建立一个JButton对象,标题为txt,图标为ico。2.常用方法

表5列出了按钮JButton类的常用方法。

表5 JButton的常用方法

3.常用事件

与按钮JButton关联的事件一般是:ActionEvent、MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。通常处理ActionEvent就可以了。

4.示例

【例3】下面的例子演示了带图标的JButton和JLabel的用法,运行界面入图3所示,当鼠标落在按钮或标签上时,将显示一行提示信息。当鼠标落在左边的按钮上时,在按钮上将显示一幅图片,离开按钮则恢复正常。当鼠标按住左边的按钮时,在按钮上将显示另一幅图片,松开则显示前面的一幅图片(即鼠标落在按钮上显示的图片)。程序为:

图10.3

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MyJButton

{ JFrame fr=new JFrame();

JLabel jl=new JLabel("在标签上显示图片");

Icon ico1=new ImageIcon("b3.gif");

//创建一个图片对象ico1

Icon ico2=new ImageIcon("b4.gif");

Icon ico3=new ImageIcon("b11.gif");

Icon ico4=new ImageIcon("b12.gif");

Icon ico5=new ImageIcon("b9.gif");

Icon ico6=new ImageIcon("bgif");

JButton b1=new JButton("显示第一幅图片");

JButton b2=new JButton("显示第二幅图片",ico4);

//创建一个命令按钮b2,上面有一幅图片ico4

JPanel p=new JPanel(new GridLayout(1,2,20,5));

Font ft=new Font("Serif",Font.BOLD,18);

//定义一个字体对象ft

public static void main(String args[])

{ MyJButton that=new MyJButton();

that.go();

}

void go()

{

fr.setTitle("JButton和JLabel的用法");

BorderLayout br=new BorderLayout();

fr.getContentPane().setLayout(br);

fr.getContentPane().add("Center",jl);

//将标签jl加到窗口的中央

fr.getContentPane().add("South",p);

//将容器p加到窗口的底部

b1.setToolTipText("点击该按钮,将显示第一幅图片");

//设置按钮b1的提示信息,当鼠标落在b1上时自动显示

b1.setPressedIcon(ico5);

//设置按钮b1被鼠标按住时显示的图片为ico5

p.add(b1);

//将按钮b1加到容器p中

b2.setToolTipText("点击该按钮,将显示第二幅图片");

//设置按钮b2的提示信息,当鼠标落在b2上时自动显示

p.add(b2);

jl.setToolTipText("点击下面的按钮,将在此区域显示图片");

//设置标签jl的提示信息,当鼠标落在jl上时自动显示

jl.setFont(ft);

b1.setFont(ft);

b2.setFont(ft);

fr.setLocation(300,500);

fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

b1.addActionListener(new ButtonH1());

//将按钮b1注册监听器ButtonH1中

b1.addMouseListener(new MouseH(1));

//将按钮b2注册监听器MouseH中,以捕获鼠标进入和离开按钮的动作b2.addActionListener(new ButtonH2());

b2.addMouseListener(new MouseH(2));

fr.setSize(400,300);

fr.setResizable(true);

fr.setVisible(true);

}

public class ButtonH1 implements ActionListener

{ public void actionPerformed(ActionEvent e)

{ jl.setIcon(ico1);

//设置标签jl的显示图片

}

}

class ButtonH2 implements ActionListener

{ public void actionPerformed(ActionEvent e)

{ jl.setIcon(ico2);

//设置标签jl的显示图片

}

}

class MouseH extends MouseAdapter

//监听器MouseH实现了接口MouseListener,可以捕获鼠标进入和离开按钮的动作{ int sel;

MouseH(int select)

{ sel=select;}

public void mouseEntered(MouseEvent e)

//当鼠标进入按钮时

{ b1.setIcon(ico6);

//当鼠标落在按钮b1上时,将b1的图片改为ico6

}

public void mouseExited(MouseEvent e)

//当鼠标离开按钮时

{ b1.setIcon(null);

//当鼠标离开按钮b1时,将b1的图片改为空

}

}

}

3.3 单行文本编辑框JTextField

单行文本编辑框JTextField类似于AWT中的TextField,提供了用户输入或编辑一行文字的基本途径,但不能用于口令输入,且不再限定输入字符的个数。JTextField的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.text.JTextComponent

|

+--javax.swing.JTextField

1. 构造函数

JTextField的构造函数常用的有四个:

JTextField()

功能:建立一个初始文字为空的JTextField对象。

JTextField (String txt)

功能:建立一个初始文字为txt的JTextField对象。

JTextField (int len)

功能:建立一个列数为len个字符的JTextField对象。

JTextField (String txt,int len)

功能:建立一个初始文字为txt、列数为len个字符的JTextField对象。

2.常用方法

表6列出了JTextField类的几个常用的方法。

表6 JTextField的常用方法

3

与单行文本编辑框TextField关联的事件一般是:TextEvent、ActionEvent、MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。

3.4 多行文本编辑框JTextArea

多行文本编辑框JTextArea类似于AWT中的TextArea,提供了让用户输入或编辑多行文字的基本途径。但它不能提供水平滚动条和垂直滚动条,需用JScrollPane。JTextArea的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.text.JTextComponent

|

+--javax.swing.JTextArea

1. 构造函数

JTextArea的构造函数常用的有四个:

JTextArea()

功能:建立一个初始文字为空的JTextArea对象。

JTextArea(String txt)

功能:建立一个初始文字为txt的JTextArea对象。

JTextArea (int rows,int cols)

功能:建立一个rows行、cols列的JTextArea对象。

JTextArea (String txt,int rows,int cols)

功能:建立一个初始文字为txt、rows行、cols列的JTextArea对象。

2.常用方法

表7列出了JTextArea类的几个常用的方法。

表7 JTextArea的常用方法

3.常用事件

与多行文本编辑框JTextArea关联的事件一般是:TextEvent、MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。

3.5口令输入框JPasswordField

口令输入框JPasswordField是从单行文本编辑框JTextField扩展而来的,专门用于用户口令等需要保密的文字输入。JPasswordField的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.text.JTextComponent

|

+--javax.swing.JTextField

|

+--javax.swing.JPasswordField

1. 构造函数

JTextField 的构造函数常用的有四个: JPasswordField()

功能:建立一个初始文字为空的JPasswordField 对象。 JPasswordField (String txt)

功能:建立一个初始文字为txt 的JPasswordField 对象。 JPasswordField (int len)

功能:建立一个列数为len 个字符的JPasswordField 对象。 JPasswordField (String txt,int len)

功能:建立一个初始文字为txt 、列数为len 个字符的JPasswordField 对象。 2.常用方法

表8列出了JPasswordField 类的几个常用的方法。

表8 JPasswordField 的常用方法

3. 常用事件

与口令输入框JPasswordField 关联的事件一般是:TextEvent 、ActionEvent 、MouseEvent 、MouseMontionEvent 、KeyEvent 、FocusEvent 、ComponentEvent 。 4. 示例

【例4】下面的例子演示了单行编辑框JTextField 、口令输入框JPasswordField 、多行编辑框JTextArea 的基本用法,运行结果界面如图4所示。输入用户名、口令后按回车键,将在多行编辑框显示输入的结果。注意口令的获取应用getPassword()方法,该方法的返回值是一个字符数组,不是字符串,要用相应的方法转换。程序为:

import java.awt.*;

import java.awt.event.*; import javax.swing.*; public class JPassword

{ private JFrame f= new JFrame("单行编辑框中、口令输入框、多行编辑框的用法"); private JTextField user=new JTextField(20);

图10.4

//定义一个单行编辑框JTextField用于输入用户名

private JPasswordField pwd=new JPasswordField(10);

//定义一个口令框JPasswordField用于输入口令

private JTextArea ta=new JTextArea(5,10);

//创建一个多行编辑框JTextArea,用来显示输入结果

Font ft=new Font("Serif",Font.BOLD,28);

JPanel jp=new JPanel(new GridLayout(2,2,10,10));

//定义一个容器,有2行2列,间隔为10

public static void main(String args[])

{ JPassword that=new JPassword();

that.go();

}

void go()

{ f.getContentPane().setLayout(new BorderLayout(0,10));

f.getContentPane().add("North",jp);

//将容器jp添加到窗口f的北面

JLabel u1=new JLabel("用户名:",JLabel.RIGHT);

jp.add(u1);

jp.add(user);

JLabel p1=new JLabel("口令:",JLabel.RIGHT);

jp.add(p1);

jp.add(pwd);

f.getContentPane().add("Center",ta);

//将多行编辑框ta添加到窗口f的中央

ta.setFont(ft);

//设置多行编辑框ta的字体

user.setFont(ft);

pwd.setFont(ft);

u1.setFont(ft);

p1.setFont(ft);

user.addActionListener(new TextHandler(1));

//将单行编辑框user注册到监听器TextHandler上,

//监听器TextHandler是用户写的一个类,它实现了接口ActionListener,

//当按了回车键时触发,参见表9.9和表9.10。

pwd.addActionListener(new TextHandler(2));

//将口令输入框pwd注册到监听器TextHandler上

f.addWindowListener(new WindowHandler());

//将窗口f注册到监听器WindowHandler上,

f.setSize(450,250);

f.setResizable(true);

f.setVisible(true);

}

class TextHandler implements ActionListener

//监听器TextHandler实现了接口ActionListener,必须实现方法actionPerformed,

//当按了回车键时立刻调用该方法,参见表9.9和表9.10。

{ int sel;

TextHandler(int sel)

{ this.sel=sel;}

public void actionPerformed(ActionEvent e)

{ String uname,upass;

uname= user.getText();

//取输入的用户名

upass= new String(pwd.getPassword());

//取输入的口令,这里应该用getPassword()方法,而不是getText()

//getPassword()方法的返回值是一个字符数组,要转换为字符串

ta.setText("你输入的用户名是:"+uname+"\n"+"你输入的口令是:"+upass);

//在多行编辑框中显示输入结果

}

}

class WindowHandler extends WindowAdapter

{ public void windowClosing(WindowEvent e)

{ System.exit(1); }

}

}

3.6 开关按钮JToggleButton

开关按钮JToggleButton有两种状态,鼠标点击时自动在两种状态之间切换,如图5所示,左边的按钮处于未选状态,右边的按钮处于选中状态。也可以在开关按钮JToggleButton 上显示一幅图片。开关按钮JToggleButton的类层次关系为:

图10.5 JToggleButton的两种状态

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.AbstractButton

|

+--javax.swing.JToggleButton

1. 构造函数

开关按钮JToggleButton的构造函数常用的有七个:

JToggleButton()

功能:建立一个无标题、无图片的开关按钮。

JToggleButton(String txt)

功能:建立一个标题为txt但没有图片的开关按钮。

JToggleButton(Icon ico)

功能:建立一个图片为ico但没有标题的开关按钮。

JToggleButton(String txt, Icon ico)

功能:建立一个标题为txt、图片为ico的开关按钮。

JToggleButton(String txt,boolean stat)

功能:建立一个标题为txt但没有图片的开关按钮,其初始选择状态由stat指定。

JToggleButton(Icon ico,boolean stat)

功能:建立一个图片为ico但没有标题的开关按钮,其初始选择状态由stat指定。

JToggleButton(String txt, Icon ico,boolean stat)

功能:建立一个标题为txt、图片为ico的开关按钮,其初始选择状态由stat指定。2.常用方法

表9列出了开关按钮JToggleButton类的常用方法。

表9 开关按钮JToggleButton的常用方法

3. 常用事件

与开关按钮JToggleButton关联的事件一般是:ActionEvent、MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。通常处理ActionEvent就可以了。

4.示例

例如,在程序中可以用一个JToggleButton按钮表示“打开”、“关闭”两种操作,在该按钮的ActionEvent事件中我们可以编写如下程序:

if(jtogglebutton.isSelected())

//如果按钮处于选中状态

{ jtogglebutton.setText(“打开”);

//将按钮的标题改为“打开”

……..

//处理“打开”时要做的程序代码

}

else

//如果按钮处于未选状态

{ jtogglebutton.setText(“关闭”);

//将按钮的标题改为“关闭”

……..

//处理“关闭”时要做的程序代码

}

3.7 复选按钮JCheckBox

复选按钮JCheckBox是开关按钮JToggleButton扩展而来的,用于实现多选操作,按钮选中时有一个“ ”标记,类似于AWT中的Checkbox,但在JCheckBox上还可以显示一幅图片。复选按钮JCheckBox的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.AbstractButton

|

+--javax.swing.JToggleButton

|

+--javax.swing.JCheckBox

1. 构造函数

复选按钮JCheckBox的构造函数常用的有七个:

JCheckBox ()

功能:建立一个无标题、无图片的复选按钮。

JCheckBox (String txt)

功能:建立一个标题为txt但没有图片的复选按钮。

JCheckBox (Icon ico)

功能:建立一个图片为ico但没有标题的复选按钮。

JCheckBox (String txt, Icon ico)

功能:建立一个标题为txt、图片为ico的复选按钮。

JCheckBox (String txt,boolean stat)

功能:建立一个标题为txt但没有图片的复选按钮,其初始选择状态由stat指定。

JCheckBox (Icon ico,boolean stat)

功能:建立一个图片为ico但没有标题的复选按钮,其初始选择状态由stat指定。

JCheckBox (String txt, Icon ico,boolean stat)

功能:建立一个标题为txt、图片为ico的复选按钮,其初始选择状态由stat指定。2.常用方法

复选按钮JCheckBox的常用方法和开关按钮JToggleButton相同,见表9。

3.常用事件

与复选按钮JCheckBox关联的事件一般是:ItemEvent、MouseEvent、MouseMontionEvent、KeyEvent、FocusEvent、ComponentEvent。

3.8 单选按钮JRadioButton

单选按钮JRadioButton是开关按钮JToggleButton扩展而来的,用于实现单选操作,类似于AWT中的Checkbox和CheckboxGroup,但在JRadioButton上还可以显示一幅图片。不过,一般是将几个单选按钮作为一组,加到某个ButtonGroup中,否则单选按钮之间不能关联,各自是独立的。单选按钮JRadioButton的类层次关系为:

https://www.doczj.com/doc/df3305017.html,ng.Object

|

+https://www.doczj.com/doc/df3305017.html,ponent

|

+--java.awt.Container

|

+--javax.swing.JComponent

|

+--javax.swing.AbstractButton

|

+--javax.swing.JToggleButton

|

+--javax.swing.JRadioButton

1. 构造函数

单选按钮JRadioButton的构造函数常用的有七个:

JRadioButton ()

功能:建立一个无标题、无图片的单选按钮。

JRadioButton (String txt)

功能:建立一个标题为txt但没有图片的单选按钮。

JRadioButton (Icon ico)

跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

1.1跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例 1.1.1表格控件JTable 1、JTable表格控件的主要功能 JTable顾名思义就是一个将数据以表格显示的组件,它提供以行和列的方式来显示数据,并且可以拖动列。如下示图为应用JTable表格控件所创建出的数据表格。 JTable的数据选项不仅仅是可以显示字符串,还可以显示Checkbox选择框、下拉列表框或者图片等内容。如下为Sun 公司的Swing 教程中的TableDialogEditoDemo 应用程序的执行结果示图,在该示例的数据表格中显示Checkbox选择框、下拉列表框和图片等内容。

2、JTable类的API功能说明 (1)JTable类的API功能说明 如下示图为JDK API文档中对JTable类的API功能说明的相关信息。 如果需要对数据表格中的表头数据列和数据单元格中的数据列进行定制,则需要通过继承封装表头数据列JTableHeader类或者继承封装数据列的TableColumn类。如下为JTableHeader类和TableColumn类的功能说明。 (2)表头数据列JTableHeader类的功能说明

(3)数据列TableColumn类的功能说明 TableColumn 类封装表示JTable中数据列的所有属性,如宽度、大小可调整性、最小和最大宽度。 3、JTable表格控件中的数据可以以多种不同的方式被选中 (1)选中某一数据行

(2)选中连续的多行数据行

(3)选中不连续的多行数据行

4、JTable类的构造函数定义 可以通过JTable(Object[][] rowData, Object[] columnNames)形式的构造方法创建出数据表格组件,该JTable组件将用来显示一个二维数组rowData 中的值(它是一个行数组),其列名称为columnNames所代表的数组。JTable类的其它形式的构造函数定义如下:

java swing 组件大全

import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.table.*; /** * Swing 组件测试程序 * 测试Swing所有组件及其相应的事件 * @author 天翼.李 2003.4.17 晚23:14 * @link https://www.doczj.com/doc/df3305017.html, * @link robococde@https://www.doczj.com/doc/df3305017.html, */ public class SwingT est extends JFrame { /** * 主模块,初始化所有子模块,并设置主框架的相关属性 */ public SwingTest() { // 初始化所有模块 MenuTest menuTest = new MenuTest(); LeftPanel leftPanel = new LeftPanel(); RightPanel rightPanel = new RightPanel(); BottomPanel bottomPanel = new BottomPanel(); CenterPanel centerPanel = new CenterPanel(); // 设置主框架的布局 Container c = this.getContentPane(); // c.setLayout(new BorderLayout()) this.setJMenuBar(menuTest); c.add(leftPanel,BorderLayout.WEST); c.add(rightPanel,BorderLayout.EAST); c.add(centerPanel,BorderLayout.CENTER); c.add(bottomPanel,BorderLayout.SOUTH); // 利用无名内隐类,增加窗口事件 this.addWindowListener(new WindowAdapter() { public void WindowClosing(WindowEvent e)

java swing常用的9种组件.

需要注意的是,取得文本框中的文本时,使用方法getText(),该方法返回的是一个String类型的对象;而要取得密码框中的文本,使用方法getPassword(),该方法返回的是一个char数组。 例如,创建了一个密码框: JPasswordField txtPwd=new JPasswrodField(20); 设定该密码框的回显字符为'#': txtPwd.setEchoChar('#'); 取得密码框中的内容: char []pwd=txtPwd.getPassword(); 也可以方便地将char数组转化为String类型的对象: String pwdStr=new String(txtP.getPassword()); 3.菜单 (1)菜单也是一种常用的GUI组件,菜单采用的是一种层次结构,最顶层是菜单栏(JMenuBar);在菜单栏中可以添加若干个菜单(JMenu),每个菜单中又可以添加若干个菜单选项(JMenuItem)、分隔线(Separator)或是菜单(称之为子菜单)。 (2)构建应用程序的菜单时,先创建一个菜单栏: JMemuBar menuBar=new JMenuBar(); 通常使用框架的setJMenuBar(JMenuBar aMenuBar)方法将菜单栏置于框架中:frame.setJMenuBar(menuBar); 随后,创建所需要的各菜单并逐个添加到菜单栏中,例如: JMenu menuDBAccount=new JMenu("电表出帐(C)"); ... JMenu menuSysConfig=new JMenu("系统设置(X)"); menuBar.add(menuDBAccount); ... menuBar.add(menuSysConfig); 最后,向各个菜单中添加菜单选项、分隔线或是子菜单,如图所示的系统设置菜单为例: //创建菜单选项或是子菜单 JMenuItem sysConfigItem=new JMenuItem("参数设置(S)..."); JMenu viewMenu=new JMenu("外观设置"); JRadioButtonMenuItem metalItem=new JRadioButtonMenuItem("金属外观"); JRadioButtonMenuItem classicItem=new JRadioButtonMenuItem("传统外观"); JRadioButtonMenuItem modernItem=new JRadioButtonMenuItem("现代外观"); JMenuItem cascadeItem=new JMenuItem("层叠窗口(C)"); JMenuItem iconifyItem=new JMenuItem("排列图标(I)"); //将三个单选按钮添加到一个按钮组 ButtonGroup group=new ButtonGroup(); group.add(metalItem); group.add(classicItem); group.add(modernItem); //构建子菜单 viewMenu.add(metalItem);

(总结)Swing组件的使用

(总结)Swing组件的使用 Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件.Swing 的基本组件:1.按钮(JButton): Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。 (1).JButton 常用的构造方法。 JButton(String text):按钮上显示字符。 JButton(Icon icon) :按钮上显示图标。 JButton(String text, Icon icon):按钮上既显示图标又显示字符。 (2).常用方法: b1.setEnabled(false); //使按钮当前不可用 b1.setToolTipText("..."): //设置按钮提示文本 b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键(3).案例代码: [java] view plain copy print?public class JButtonExample3 extends JPanel implements ActionListener { protected JButton b1, b2, b3; public JButtonExample3() { ImageIcon

leftButtonIcon = createImageIcon("right.gif"); ImageIcon middleButtonIcon = createImageIcon("middle.gif"); ImageIcon rightButtonIcon = createImageIcon("left.gif"); b1 = new JButton("失效中间按钮(D)", leftButtonIcon); b1.setVerticalTextPosition(AbstractButton.CENTER);// 水平中间对齐 b1.setHorizontalTextPosition(AbstractButton.LEADING);// 相当于LEFT b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键b1.setActionCommand("disable"); b2 = new JButton("M中间按钮", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M);// 将b2邦定alt+M键b3 = new JButton("E激活中间按钮", rightButtonIcon); b3.setMnemonic(KeyEvent.VK_E);// 将b3邦定alt+E键 b3.setActionCommand("enable"); b3.setEnabled(false); // 给1和3添加事件监听b1.addActionListener(this); b3.addActionListener(this); // 设置按钮提示文本b1.setToolTipText("点击这个按钮,

Java Swing中处理各组件事件的一般步骤

Java Swing中处理各组件事件的一般步骤是: 1.新建一个组件(如JButton)。 2.将该组件添加到相应的面板(如JPanel)。 3.注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。 4.定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。 以上步骤我们可以用多种方法实现。但人们通常用二种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。 为了说明如何使用上述三种方法实现事件的处理方法,我们建立一个简单的应用程序。该程序界面有两个按钮,当用户点击相应的按钮,就会弹出一个对话框显示相应的内容。通过这个简单程序,你可以实现自己更多、更复杂的用户界面程序。 首先,我们利用单个监听器来实现该程序。我们定义一个名为Simple1的类来包括所有代码。所有的用户行为(如点击按钮)由一个监听器SimpleListenner中的actionPerformed方法来处理。以下是代码: import java.awt.*; import javax.swing.*; public class Simple1 {

private static JFrame frame; // 定义为静态变量以便main使用 private static JPanel myPanel; // 该面板用来放置按钮组件 private JButton button1; // 这里定义按钮组件 private JButton button2; // 以便让ActionListener使用 public Simple1() // 构造器, 建立图形界面 { // 新建面板 myPanel = new JPanel(); // 新建按钮 button1 = new JButton("按钮1"); // 新建按钮1 button2 = new JButton("按钮2"); SimpleListener ourListener = new SimpleListener(); // 建立一个actionlistener让两个按钮共享 button1.addActionListener(ourListener); button2.addActionListener(ourListener); myPanel.add(button1); // 添加按钮到面板 myPanel.add(button2); } private class SimpleListener implements ActionListener { public void actionPerformed(ActionEvent e) {

Swing组件的各种面板(JRootPane根面板,JLayeredPane层面板等)

主要参考文现: [美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月 孙卫琴 《Java 面向对象编程》 出版社及日期不详 java API 开发人员文档 本文作者:黄邦勇帅 本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。 Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等) 第一部分:JFrame 中各面板间的关系,透明性与可见性问题 注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。注意窗格与窗体是不一样的。 在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。而containPane 和glassPane 没有专门对应的类。 1、各种面板(或称窗格)的关系及作用: JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。 JLayeredPane 层面板:该面板是其他所有面板的父级,在JRootPane 面板的上面,他再次覆盖窗体的整个表面,内容面板和JMenuBar 菜单栏被添加到层面板上。当添加了菜单栏时,菜单栏被添加到JLayeredPane 面板的顶部,剩下的部分被内容面板填充。层面板是分很多层的,每一层使用一个相应的数字来表示,而内容面板就位于层面板中的某一层,在后面的内容中我们可以看到层面板可以让你设计出相互重叠的内部窗体,层面板将负责管理各种内部窗体的叠放问题,对于层面板的每一层都相当于是一个容器,因此可以直接向层面板中添加组件。层面板的内容后面会作具体介绍。 containPane 内容面板:由层面板的介绍可知,内容面板是层面板中的某一层。默认的内容面板是不透明的,而且是一个JPane 对象。该面板在窗体中起着工作区的作用,当我们向窗体添加组件时就应该添加到这一层上,而不能像AWT 那样直接添加到窗体上,若你那样做了,实际上该组件也是被添加到内容面板上的,若窗体未设置内容面板,则组件无法显示。比如要添加按钮jb 则正确的方式为,Container p=jframe.getContentPane(); p.add(jr); 或jframe.getContentPane().add(jr); 其中getContentPane()是JFrame 类中的方法,该方法将反回内容面板的引用,这是访问默认的内容面板的方法,因为默认的内容面板没有特定的名字,因此应使用该方法。 glassPane 玻璃面板:该面板总是存在的,而且他位于最上面,默认情况下玻璃面板是不可见的,玻璃面板用于接收鼠标事件和在其他组件上绘图。 2、各面板中使用的布局管理器: 在内容面板上使用的布局管理器默认是BorderLayout 。 在根面板上使用的布局管理器是一个自定义的LayoutManager(布局管理器),他的作用是布局根面板之上的其他面板。很明显如果你要向根面板中添加组件就应使用setLayout 方法为其设置合适的布局管理器或自已设定组件的大小和显示

Swing组件大全

一抛砖引玉 本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。你能举一返三是作者最开心的事情。小程序演示了Java Swing 大部分组件。最后附上了全部代码及详细的注释说明。希望本文能对大家学习Java有所帮助。 随着Java风潮席卷国内,学习Java的方法和路径越来越多。而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。。。。。。然而所有的这些都或多或少的离不开J2SE。万丈高楼平地起。J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。而不像后台编程做完了都感受不到效果。而好的界面也是你测试你其他程序的基础。 界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。 Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。下面我们就以Swing为基础来说说整个Java的界面设计。 二感受效果 在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。如下图所示,这就是我们设计的界面,它包括了Swing中大部分

swing组件总结认识

JFrame是主窗口,它和JDialog,JApplet的地位并列。但是,一个JFrame可以添加JDialog和JApplet进去它的内容面板,而反过来就不行。 2、JLabel JLabel是一标签,在它的文本里嵌入html标签,可以简单实现一个超链接组件 3、JTextField 一个文本框 4、JTextArea 文本区域,与文本框不同的是它是多行的 5、JPasswordField 6、JPanel 一个面板.一般用作控制组件的布局. 7、JCheckBox 复选框 8、JRadioButton 单选按钮.单选按钮要用到ButtonGroup.添加到同一个ButtonGroup的单选按钮表示在它们之间只可选其一.不同ButtonGroup里的单选按钮相互之间的选择不受影响. 9、JScrollPane JScrollPane由四个角,两个头部,和一个视口组成.四个角和两个头部都是由Component组成.四个角并不是总是显示出来的.左上角只有当两个头部同时存在才显示,右下角只有两个滚动条同时出现才会出现.其他两个角可同理知道什么时候会出现.视口是显示内容的部分,由JViewport对象表示.而真正显示的内容,由JV iewport的view表示 10、JList JList是一个列表.这里将首次引入Model这个概念,中文翻译是模型,不好理解,其实就是数据的意思.JList用ListModel保存它的数据.简单应用可以用实现了ListModel的AbstraceListModel的子类DefaultListModel来保存它的数据(尽管它的名字有Default,但是只有你使用了它创建JList,它才存在.即如果你没有用DefaultListModel创建JList,则你用getModel()返回的ListModel不能强制转换为DefaultListModel). 11、JComboBox 组合框和JList很相似,它们都是用ListModel来保存数据.默认它是使用实现了ListModel的子接口ComboBoxModel的DefaultComboBoxModel来保存数据的.与JList的情况不同,一个JComboBox总是有一个Model来保存数据的,而JList则不然. 12、JFileChooser JFileChooser代表一个打开/保存文件对话框 13、JColorChooser 一个颜色选择器.它的构造方法有: JColorChooser(),JColorChooser(Color initialColor),JColorChooser(ColorSelectionModel model) 创建了对象以后,可以调用将它添加到JFrame,JPanel等其他容器里面. 14、JSlider JSlider是一个滑动条.其实它还是比较容易使用的 15、JLayeredPane JFrame,JApplet,JDialog,JInternalFrame其实是由好几部分组成的 16、JInternalFrame JFrame不能添加JFrame到自已的内容面板.那么,如何实现多文档程序呢?用JInternalFrame

第8章_Swing组件[1]

第8章Swing组件 在第7章中,介绍了用AWT创建图形用户界面的基本原理。在java.awt包中,提供了各种具体的组件,如Frame、Panel、Button、Label等。AWT组件的优点是简单、稳定,同时兼容于任何JDK版本,缺点是依赖于本地操作系统的GUI,缺乏平台的独立性。为了实现跨平台,使得用java创建的图形界面在不同操作系统中保持相同的外观,从JKD1.2版本开始引入了Swing组件,这些组件位于javax.swing包中, Swing GUI组件定义了相对于java.awt 包更多、更强的功能,可以使用户更加灵活方便的进行GUI的设计。 Swing组件时用纯Java语言编写的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。独立于本地平台的Swing组件被称为轻量级组件,而依赖于本地平台的AWT组件被称为重量级组件。 多数Swing组件的父类为javax.swing.JComponent,JComponent 的直接父类为java.awt.Container,与AWT中的Window与Panel处于同一个继承类层次。多数Swing组件类都是以大写字母“J”开头,图8-1显示了Swing组件的类层次结构。从图中可以看出,除JFrame外,其余的Swing组件都继承自JComponent类。 图8-1 Swing组件的类层次结构

8.1 容器组件 8.1.1 JFrame JFrame是用来替代AWT包中Frame的,可以实现与Frame相同的功能,包括作为容器容纳其他组件,显示组件等。 [例8-1] import javax.swing.*; import java.awt.*; class JFrameTest extends JFrame{ private JButton button1 = new JButton("button1"); private JButton button2 = new JButton("button2"); public JFrameTest(String title){ super(title);//设置标题 this.setBounds(50,50,200,150); //获得与JFrame关联的contentPane,contentPane默认的布局管理器是BorderLayout Container contentPane = this.getContentPane(); contentPane.setLayout(new FlowLayout(5)); contentPane.add(button1); contentPane.add(button2); this.setVisible(true); //设置JFrame对关闭按钮的处理方式 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } public class Test8_1 { public static void main(String[] args) { new JFrameTest("JFrame测试"); } } 程序运行界面如下: 图8-2 例8-1运行界面 利用JFrame实现了与Frame相同的功能,但JFrame与Frame在使用上还是有很大区别的。

swing 组件和容器——java swing 组件技术(中)

swing 组价和容器——java swing 组件和技术(中) 一、swing组件和容器概览 1.顶层容器(JFrame,JDialog,JApplet) JFrame—框架,主要用来设计应用程序的图像界面 JDialog—对话框,通常用来设计具有依赖关系的窗口 JApplet—小应用程序,主要用来设计嵌入网页中运行的java程序2.一般容器 普通容器(JPanel、JScrollPane、JToolbar、JSplitPane、JTabbedPane) JPanel—面板,通常只有背景颜色的普通容器 JScrollPane—滚动窗格,具有滚动条 JToolbar—工具条,通常将多个组件排成一排或者一列 JSplitPane—分裂窗格,用来装两个组件的容器 JTabbedPane—选项卡窗格,允许多个组件共享相同的界面空间

专用容器(JLayeredPane、JRootPane 、JInternalFrame) JLayeredPane—分层窗格,给窗格增加了深度的概念 JRootPane—根窗格,一般是自动创建的容器 JInternalFrame—内部窗格,可以在一个窗口内显示若干个类似于框架的窗口 3.基本控件(JButton、JCombobox、JList、JMenu、JSlider、JTextField) 4.不可编辑信息组件(JLabel、JProgressBar、JToolTip等) 5.可编辑组件(JColorChooser、JFileChooser、Jtabel、JTextArea、JTree等) 二、常用的swing组件和容器 1.JFrame ?顶层容器,默认不可见;默认布局方式为BorderLayout ?构造函数: ●JFrame() ●JFrame(String title)//title 为框架的标题内容 ?JFrame常用方法 ●setDefaultCloseOperation(int operation)—设置关闭框架的行为 参数operation一般是JFrame. EXIT_ON_CLOSE,表示关闭框架时, 则退出程序 ●setSize(int width, int height)—设置框架的大小 ●setVisible(boolean b)—设置框架是否可见,默认为false ●getContentPane()—获取顶层容器的内容面板

Swing组件详解

swing布局详解(附示例图) 当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。 下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。 代码演示 每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。这些文件主要有三个方法组成: addComponentsToPane()提供布局逻辑(依据不同的布局管理器和UI内容)。 FlowLayout FlowLayout类是最简单的布局管理器。它按照和页面上排列单词的类似方式来安排组件----从左到右,直至没有多余的空间,然后转到下一行。 效果:

内容面板代码: BorderLayout 一个BorderLayout对象将界面分成五大区域,分别用BorderLayout类的静态常量指定:-PAGE_START -PAGE_END -LINE_START -LINE_END -CENTER 效果: 内容面板代码:

BoxLayout BoxLayout可以将组件由上至下或由左至右依次加入当前面板。效果: 内容面板代码:

CardLayout 卡片布局和其他布局不同,因为它隐藏了一些组件。卡片布局就是一组容器或者组件,它们一次仅仅显是一个,组中的每个容器称为卡片。 效果: 内容面板代码:

GridLayout GridLayout让你建立一个组件表格,并且当组件加入时,会依序又左至右,由上至下填充到每个格子,它不能由你指定想放那个格子就放那个格子 效果: 内容面板代码: GridBagLayout GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的。GridBagLayout 同GridLayout一样,在容器中以网格形式来管理组件。但GridBagLayout功能要来得强大得多。 1、GridBagLayout管理的所有行和列都可以是大小不同的; 2、GridLayout把每个组件限制到一个单元格,而GridBagLayout并不这样:组件在容器中可以占据任意大小的矩形区域。 GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints。其中有11个公有成员变量,GridBagConstraints可以从这11个方面来进行控制和操纵。这些内容是: 1、gridx—组件的横向坐标; 2、girdy—组件的纵向坐标; 3、gridwidth—组件的横向宽度,也就是指组件占用的列数; 4、gridheight—组件的纵向长度,也就是指组件占用的行数;

java Swing中各种组件的综合应用

import java.awt.*; import javax.swing.*; import java.awt.event.*; class jmenuframe extends JFrame implements ActionListener{ JMenuBar menubar; JMenu m1; JMenu m11; JMenuItem m111; JMenuItem m112; JMenu m2; JMenu m21; JMenu m211; JMenu m212; JMenu m213; JMenuItem num1; JMenuItem name1; JMenuItem num2; JMenuItem name2; JMenuItem num3; JMenuItem name3; public jmenuframe(){ setSize(800,700); setTitle("登陆主界面"); Container c=getContentPane(); c.setBackground(Color.green); Label la=new Label("欢迎你,青青!您已进入主界面,可以进行相关操作了"); la.setBounds(100,300,600,30); la.setFont(new Font("宋体",Font.ITALIC,25)); la.setForeground(Color.blue); add(la); menubar=new JMenuBar(); menubar.setBackground(Color.pink); m1=new JMenu("学生信息管理"); m1.setForeground(Color.red); m1.setFont(new Font("楷体",Font.BOLD,25)); m2=new JMenu("学生成绩管理"); m2.setForeground(Color.magenta); m2.setFont(new Font("楷体",Font.BOLD,25)); m11=new JMenu("学生查询");

swing自定义组件之BUTTON(精)

Swing自定义组件之Button GUI组件要完成的任务有2个,展现与业务。对于按钮来说,文本、图标、边框、背景属于展现层,而这些元素在按钮不同状态下会不尽相同,一般来说至少有4种状态下的展现:普通、鼠标放在其上、被按下、被禁用,也就是按钮应该具备这4种状 态。 下面给出的示例是swing实现的自定义按钮。 通常swing自定义组件继承javax.swing.JComponent并重写protected void paintComponent(Graphics g方法实现自定义绘制。重写paintComponent方法时通常要先去掉super.paintComponent(g,因为父方法调用会绘制背景色。不妨先看一下源代码中的调用过程。 在JComponent.java中paintComponent(Graphics g方法定义如下: protected void paintComponent(Graphics g { if (ui != null { Graphics scratchGraphics = (g == null ? null : g.create(; try { ui.update(scratchGraphics, this; } finally { scratchGraphics.dispose(; } } } 其中ui的声明如下 protected transient ComponentUI ui; 然后转向ComponentUI的update(Graphics g, JComponent c方法:

public void update(Graphics g, JComponent c { if (c.isOpaque( { g.setColor(c.getBackground(; g.fillRect(0, 0, c.getWidth(,c.getHeight(; } paint(g, c; } 可见如果发现组件是非透明的,就绘制背景,可以看出swing组件的setBackground 方法如何绘制背景的。 一般简单的自定义组件,你可以只通过重写paintComponent方法来实现绘制,对于一般的组件这已经足够。对于自定义按钮一般的原则是准备4张背景图对应上述4种状态,这4种状态都可通过鼠标****来感知,当状态改变时,调用repaint(使Button重绘。除了背景,按钮文本、图标等的改变一样也必须调用repaint(来刷新。 然后重要的一点是你必须重写public Dimension getPreferredSize(来获得按钮的最佳尺寸。getPreferredSize方法对于布局管理器来说至关重要,布局管理器会通过getPreferredSize的判断组件的最佳大小,并进行布局。而对于本范例而言,getPreferredSize的大小只和背景图片大小有关。 对于业务,尽量做到前台界面与后来业务分离。你可以自定义按钮动作****器来实现,本例是沿用swing的Action实现,当鼠标抬起时,构造一个ActionEvent对象,然后交给Action成员的actionPerformed(ActionEvent e处理。 代码如下: /* * ImageButton.java *

swing基本组件说明

第33章容器,布局管理器,边框 33.1 容器是用来存放而组织组建的对象 布局管理器是用来在容器中摆放组件的特殊对象 33.2 Swing容器的结构 不是直接显示用户界面组件,而是将组建放置到容器中,容器会显示它所包含的组件。所有容器的父类都是java.awt.Container,它是https://www.doczj.com/doc/df3305017.html,ponent的子类。 Container类具有以下功能 1.可以使用各种add和remove方法来添加和删除组件 2.拥有layout属性,用于指定在容器中放置组件的布局管理器,每个容器都有一个默 认的布局管理器 3.提供java.awt.event.ContainerEvent事件的注册方法

Jframe,JApplet,JDialog集成其对应的中性组件的所有功能,但具有较为复杂的内部结构,包含了多层窗格。 javax.swing.JRootPane是一个轻型容器,供Swing顶级容器在后台使用 javax.swing.JLayeredPane是一个用于管理可选菜单栏和内容窗格的容器 内容窗格是Container类的一个实例。默认状态下,他是一个具有布局管理器BorderLayout的JPanel对象 JPanel是一个可以添加用户界面的的容器。 要想获取JFrame或JApplet中的内容窗格,可以使用getContentPane()方法。如果性要把Container的一个实例设置为新的内容窗格,可以使用setContentPane()方法 玻璃窗格浮在最上面。默认情况下,javax.swing.JGlassPane第一个隐藏的窗格。除非使用玻璃窗格的 paint()方法,否则它是完全透明的。特可以监听根窗格的输入事件,一般来说,根窗格JRpptPane, 分层窗格JLayeredPane和玻璃窗格JGlassPane都不能直接使用 33.2.1 JFrame 框架JFrame是Frame的Swing版本,是java图形应用程序的顶级容器,他是已具有标题栏和边框的独立窗口显示的。 下面是JFrame中经常使用的属性 contentPane是框架的内容窗格 iconImage是表示框架的图像

相关主题
文本预览
相关文档 最新文档