当前位置:文档之家› 第8章_Swing组件[1]

第8章_Swing组件[1]

第8章_Swing组件[1]
第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在使用上还是有很大区别的。

(1)两者都可以添加其他组件到窗口中,Frame直接使用add方法添加相应的组件;JFrame 则不能直接通过add方法添加组件,每个JFrame都有一个与之关联的内容面板(contentPane),只能针对这个contentPane添加相应组件。

(2)两者都可以设置布局管理器,Frame直接使用setLayout即可设置;JFrame则需先得到其内容面板,对其内容面板设置布局管理器。

(3)Frame要想关闭窗口需要编写相应的事件处理程序(见例7-12),而JFrame则不必编写事件处理程序,只需调用方法setDefaultCloseOperation(int operation),通过设置operation的值来响应用户关闭窗体的操作,该方法的参数operation的值有以下三个。

JFrame.DO_NOTHING_ON_CLOS:什么也不做

JFrame.HIDE_ON_CLOSE:隐藏窗体,这是JFrame的默认选项

JFrame.EXIT_ON_CLOSE:关闭窗体,结束程序

8.1.2 Jpanel

JPanel是使用最多的组件之一,它是AWT中Panel的替代组件。其默认的布局管理器是FlowLayout布局管理器。

利用JPanel可以实现更为复杂的布局,如BorderLayout布局管理策略,只允许添加5个组件,那么我们可以在5个区域中添加5个JPanel,而每个JPanel又可以根据不同的布局管理策略添加多个组件,只要你愿意,可以添加任意多个你想添加的组件。时

8.1.3 JTabbedPane

当窗口的组件元素过多时,我们可以将这些组件分组放到不同的页面中,java提供了JTabbedPane页签面板来实现。JTabbedPane包含多个选项卡,每个页面和一个选项卡相对应,每个选项卡又是一个容器(一般用JPanel类来封装),可以包含其他的GUI组件,选项卡可以显示图标和文本。当用户选择特定的标签后,就会显示相应的选项卡,并且会触发ChangeEvent事件,该事件由ChangeListener监听器响应。

JTabbedPane提供了如下三个构造方法用于创建JTabbedPane类对象。

构造方法中涉及的两个参数的含义及具体值如下:

tabPlacement:选项卡布局,int枚举类型,值为JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEFT或JTabbedPane.RIGHT,分别表示将标签文本显示在上方、下方、左侧、右侧。

tabLayoutPolicy:一行不能放置所有选项卡标签值时的放置策略,int枚举类型,值为JTabbedPane.WRAP_TAB_LAYOUT或JTabbedPane.SCROLL_TAB_LAYOUT。

JTabbedPane.WRAP_TAB_LAYOUT—表示在容器中显示所有标签,如果一排内不能容纳,则把剩下的标签放到下一排。

JTabbedPane.SCROLL_TAB_LAYOUT—只显示一排标签,剩下的标签可以通过滚动图标显示。

[例8-2]中定义了一个JTabbedPaneTest类,在该类中添加了一个 JTabbedPane类对象,为该类对象添加了六个选项卡,程序可以完成点击任何一个选项卡,在窗口下方的JTextField中显示出相应的选项卡的标题。

[例8-2]

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

class JTabbedPaneTest extends JFrame{

private JTabbedPane jtabbedpane = new JTabbedPane();

private JTextField jtextField = new JTextField();

public JTabbedPaneTest(String title){

super(title);

Container contentPane = this.getContentPane();

//添加六个选项卡

jtabbedpane.addTab("第一页", new JPanel());

jtabbedpane.addTab("第二页", new JPanel());

jtabbedpane.addTab("第三页", new JPanel());

jtabbedpane.addTab("第四页", new JPanel());

jtabbedpane.addTab("第五页", new JPanel());

jtabbedpane.addTab("第六页", new JPanel());

//注册监听器

jtabbedpane.addChangeListener(new MyChangeListener());

contentPane.add(jtextField,BorderLayout.SOUTH);

contentPane.add(jtabbedpane,BorderLayout.CENTER);

this.setSize(300,200);

this.setVisible(true);

}

//命名内部类处理Change事件

private class MyChangeListener implements ChangeListener{

public void stateChanged(ChangeEvent e) {

String temp =

jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex());

jtextField.setText(temp+"被选择");

}

}

}

public class Test8_2 {

public static void main(String[] args) {

new JTabbedPaneTest("JTabbedPane测试");

}

}

程序运行结果如图8-3左侧所示。

将创建JTabbedPane类对象的无参构造方法修改为

private JTabbedPane jtabbedpane = new

JTabbedPane(JTabbedPane.BOTTOM,JTabbedPane.SCROLL_TAB_LAYOUT);

则程序运行结果如图8-3右侧

事件处理中有如下一段代码:

String temp = jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex()); getSelectedIndex()方法表示获得当前选择的选项卡的索引值(int类型,从0开始,-1表示未选中任何选项卡)。

getTitleAt(index)方法表示获得索引值为index的选项卡的标题。

8.1.4 JScrollPane

JSCrollPane又称滚动面板,可以用于当窗口中的内容大于窗口时,在窗口的右边和下边设置滚动条,借助滚动条就可以看到整个窗口的内容。JSCrollPane的直接父类为JComponent。

JSCrollPane提供了四个构造方法用于创建JSCrollPane类对象,见下表。

表8-2 JSCrollPane构造方法

例了。

8.2 按钮控件

图8-1中有一个AbstractButton类,该类是Swing中所有按钮的父类,该类的三个直接派生类JButton、JToggleButton和JMenuItem。

JButton与AWT中的Button类似,JButton有一个直接子类为BasicArrowButton,是一个带有箭头的按钮(箭头有上、下、左、右四个方向)。

JToggleButton表示一个切换按钮,该类有两个直接子类是我们经常使用到的,JRadioButton—单选按钮和JCheckBox—复选按钮。

JMenuItem包括三个直接子类,它们都是与菜单相关的按钮。

程序[例8-3]演示了各个按钮的用法。

[8-3]

import java.awt.*;

import javax.swing.*;

import javax.swing.plaf.basic.BasicArrowButton;

import java.awt.event.*;

class ButtonsTest extends JFrame{

private JButton jbutton = new JButton("JButton");

private BasicArrowButton

basicArrowButtonUp= new

BasicArrowButton(BasicArrowButton.NORTH),

basicArrowButtonDown= new

BasicArrowButton(BasicArrowButton.SOUTH),

basicArrowButtonLeft= new

BasicArrowButton(BasicArrowButton.WEST),

basicArrowButtonRight= new

BasicArrowButton(BasicArrowButton.EAST);

private JToggleButton jtoggleButton = new

JToggleButton("JToggleButton");

private JCheckBox jcheckBox = new JCheckBox("JCheckBox");

private JRadioButton jradioButton = new

JRadioButton("JRadioButton");

public ButtonsTest(String title){

super(title);

Container contentPane = this.getContentPane();

contentPane.setLayout(new FlowLayout(5));

contentPane.add(jbutton);

contentPane.add(basicArrowButtonUp);

contentPane.add(basicArrowButtonDown);

contentPane.add(basicArrowButtonLeft);

contentPane.add(basicArrowButtonRight);

contentPane.add(jtoggleButton);

contentPane.add(jcheckBox);

contentPane.add(jradioButton);

this.pack();

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

public class Test8_3 {

public static void main(String[] args) {

new ButtonsTest("java各种按钮测试");

}

}

运行结果如下。

图8-4 例8-3运行结果

所有按钮组件单击时都可触发ActionListener事件,如果需要对这些按钮做某些处理,可构造事件处理器实现ActionListener进行事件处理。JRadioButton和JCheckBox在编程中经常使用到,我们会在8.4节选择组件中详细介绍。

8.3文本输入

在java中,能够用于文本输入的组件包括JTextField(文本框)、JTextArea(文本区)以及JPasswordField(密码框),JLabel(标签)不支持文本输入,但可以容纳文本。

8.3.1 JTextFileld 文本框

JTextField文本框是一个允许编辑单行文本的swing组件,JTextField提供了多个构造方法用于创建JTextField对象。具体见下表8-3。

表8-3 JTextField构造方法

和获取当前文本框的文本。不过这两个方法都不是JTextField本身提供的方法,而是其父类JTextComponent所提供的。

JTextField类可引发ActionEvent事件,当用户在文本框中按下回车键时触发。

8.3.2 JTextArea 文本区

JTextArea文本区是一个允许编辑多行文本的swing组件,JTextArea提供了多个构造方法用于创建JTextArea对象。具体见下表8-4。

表8-4 JTextArea构造方法

因为JTextArea是JTextComponent的直接子类,因此与JTextField一样,也可以通过setText(String t)和getText()方法设置和获取文本区的文本值。

JTextArea类可引发ActionEvent事件,当用户在文本区中按下回车键时触发。

8.3.3 JPasswordField密码框

在AWT组件中,并没有单独的密码框组件,而是通过TextField的一个setEchoChar()方法来得到密码框,但在Swing中则单独通过一个类JPasswordField来表示。密码框是文本框JTextField组件的简单扩展。因此,其构造方法与JTextField相类似,这里不再介绍。JPasswordField类中有几个重要方法,如下:

8.3.4 JLabel标签

JLabel是一个静态组件,该组件可以显示一行静态文本,一般只是一个说明性的文字,而不接受用户的输入,也无事件响应。

JLabel提供了如下方法用于构建JLabel对象

Image:显示在JLabel上的图标。

horizontalAlignment:JLabel上文字的对齐方式,其值为int枚举型,值包括SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADING和SwingConstants.TRAILING。

text:显示在JLabel上的文字。

以下的例8-4演示了本节中所介绍的各个组件的用法,界面可提供用户输入用户名和密码,按下回车后在JTextArea显示区显示用户输入的用户名和密码信息,不允许用户名或密码为空。

[例8-4]

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class TextInputTest extends JFrame{

private JTextField userName = new JTextField(10);

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

private JPasswordField password = new JPasswordField(10);

private JLabel label1 = new JLabel("用户名");

private JLabel label2 = new JLabel("密码");

public TextInputTest(String title){

super(title);

password.setEchoChar('*');//设置回显字符

Container contentPane = this.getContentPane();

JPanel panelNorth = new JPanel();

JPanel panelCenter = new JPanel();

panelNorth.add(label1);

panelNorth.add(userName);

panelCenter.add(label2);

panelCenter.add(password);

contentPane.add(panelNorth,BorderLayout.NORTH);

contentPane.add(panelCenter,BorderLayout.CENTER);

contentPane.add(ta,BorderLayout.SOUTH);

pack();

//监听userName和password控件

userName.addActionListener(new MyActionListener());

password.addActionListener(new MyActionListener());

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private class MyActionListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) {

String name = userName.getText();

char[] pwd = password.getPassword();

if(name.length()==0){

ta.setText("请输入用户名");

return;

}

if(pwd.length==0){

ta.setText("请输入密码");

return;

}

//new String(pwd)将字符数组pwd转换为字符串

ta.setText("用户名:"+name+"\n密码:"+new String(pwd));

}

}

}

public class Test8_4 {

public static void main(String[] args) {

new TextInputTest("文本输入控件测试");

}

}

程序运行结果如图8-5所示

用户名密码都输入按回车只输入密码按回车只输入用户名按回车

图8-5 例8-4不同输入情况下的运行结果

例8-4中用到了容器的嵌套,JFrame的North和Center添加的都是JLabel对象,而两个JLabel对象里又添加了其他组件,在程序中没有使用setLayout设置JFrame和JLabel的布局

策略,原因是两者的默认布局策略正好可以满足我们的布局。

8.4选择组件

经过上节的学习,我们知道了如何利用文本输入组件获取用户输入的文本,但是,在很多情况下,用户可能更倾向于你给他一些选择,而不是让他自己输入这些信息。Java中提供了这样的组件,可以使用户不需输入文字而与GUI界面进行交互。

8.4.1 JCheckBox 复选框

JCheckBox是从JToggleButton类中派生出来的,具有两种状态,通常用于显示文本,并有一个指示是否被选中的方形按钮。

JCheckBox的构造方法较多,详见下表8-7。

构造方法中各参数意义

text - 复选框的文本

icon - 要显示的 Icon 图像

selected - 指示最初选择状态的 boolean 值。如果该参数为 true,则复选框被选定当JCheckBox被选中或取消选中时,会触发一个事件,该事件就是ActionEvent,如果想根据JCheckBox的选中情况进行不同处理,可以编写实现ActionListener接口的类进行处理。

8.4.2 JRadioButton单选按钮

单选按钮JRadioButton与复选按钮JCheckBox几乎是相同的,都是从JToggleButton类中派生出来的,都具有两种状态,主要用于显示文本。JRadioButton有一个指示是否被选中的圆形按钮。不同之处在于单选按钮机会总是用于显示一组互相排斥的选项(如某人的性别,男、女只能选择一项),所以,JRadioButton通常位于一个ButtonGroup按钮组中,不在按钮组中的JRadioButton也就失去了JRadioButton的意义。

在同一个ButtonGroup按钮组种的单选按钮,任何时刻最多有一个单选按钮被选中,因此,如果我们创建的多个单选按钮其初始状态都是选中状态,则最先加入ButtonGroup按钮

组的单选按钮的选中状态被保留,其后加入到ButtonGroup按钮组中的其他单选按钮的选中状态被取消。选中状态的保留与加入到ButtonGroup中的次序有关,与加入到其要显示的父容器顺序无关。

如下代码中

Container contentPane = this.getContentPane();

JRadioButton r1 = new JRadioButton("a",true);

JRadioButton r2 = new JRadioButton("b",true);

JRadioButton r3 = new JRadioButton("c",true);

ButtonGroup button = new ButtonGroup();

button.add(r3);

button.add(r2);

button.add(r1);

contentPane.setLayout(new FlowLayout());

contentPane.add(r2);

contentPane.add(r1);

contentPane.add(r3);

加入ButtonGroup中的JRadioButton的顺序为r3,r2,r1,而加入contentPane中的书序则为r2,r1,r2,这时候其运行效果如下:

可见其状态选中是根据加入ButtonGroup中的顺序决定的

JRadioButton提供了与JCheckBox完全相似的构造方法。见下表8-8

text -此单选按钮上显示的字符串

icon -此按钮应显示的图像

selected - 指示最初选择状态的 boolean 值。如果该参数为 true,则单选框被选定当JRadioButton被选中或取消选中时,会触发一个事件,该事件就是ActionEvent,如果想根据JRadioButton的选中情况进行不同处理,可以编写实现ActionListener接口的类进行

处理。

例8-5 中在JFrame添加了两个JRadioButton及三个JCheckBox,验证我们所学的部分知识。[例8-5]

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JCheckBoxAndJRadioButtonTest extends JFrame{

private JPanel panelNorth = new JPanel();

private JLabel label1 = new JLabel("性别");

private JRadioButton rb1 = new JRadioButton("男",true);

private JRadioButton rb2 = new JRadioButton("女");

private ButtonGroup group = new ButtonGroup();

private JLabel label2 = new JLabel("擅长");

private JCheckBox cb1= new JCheckBox("书法");

private JCheckBox cb2= new JCheckBox("唱歌");

private JCheckBox cb3= new JCheckBox("跳舞");

private JButton button = new JButton("确定");

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

public JCheckBoxAndJRadioButtonTest(String title){

super(title);

Container contentPane = this.getContentPane();

//添加JRadioButton到ButtonGroup中

group.add(rb1);

group.add(rb2);

panelNorth.add(label1);

panelNorth.add(rb1);

panelNorth.add(rb2);

panelNorth.add(label2);

panelNorth.add(cb1);

panelNorth.add(cb2);

panelNorth.add(cb3);

panelNorth.add(button);

contentPane.add(panelNorth,BorderLayout.NORTH);

contentPane.add(ta,BorderLayout.CENTER);

pack();

//监听button的Action事件

button.addActionListener(new MyActionListener());

this.setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private class MyActionListener implements ActionListener{ public void actionPerformed(ActionEvent e) {

String sex="";//记录性别

StringBuffer strBuf=new StringBuffer();//记录擅长

//isSelected表示控件被选中

if(rb1.isSelected()){

sex="男";

}

if(rb2.isSelected()){

sex="女";

}

if(cb1.isSelected()){

strBuf.append("书法 ");

}

if(cb2.isSelected()){

strBuf.append("唱歌 ");

}

if(cb3.isSelected()){

strBuf.append("跳舞 ");

}

ta.setText("您的性别:"+sex+"\t擅长:

"+strBuf.toString()+"\n"+ta.getText());

}

}

}

public class Test8_5{

public static void main(String[] args) {

new JCheckBoxAndJRadioButtonTest("单选复选按钮测试");

}

}

运行结果如图8-6所示

图8-6 例8-5多次按下确定按钮的运行结果

例8-5中我们并没有监测JRadioButton和JCheckBox,实际上我们设计类来监测其ActionEvent,同样可以达到本例题的效果,有兴趣的读者可以修改例8-5中事件处理部分来监测两个JRadioButton和三个JCheckBox。

8.4.3JComboBox下拉列表

JComboBox组件也称为下拉列表框,其特点是将所有选项折叠在一起,只显示最前面的或被用户选中的一个。选择时需要单击下拉列表右边的下三角按钮,这时候会弹出包含所有选项的列表。用户可以在列表中进行选择,也可以根据需要直接输入所要的选项。也可以输入选项中没有的内容。

JcomboBox类提供了多个构造方法用于创建JcomboBox类对象,详见下表8-9。

表8-9 JComboBox构造方法

中,JComboBox()及JComboBox(Object[] items)方式可能会更常用。

JComboBox类提供了多个成员方法用于操作下拉列表框中的项。详见下表8-10。

表8-10 JComboBox类的常用方法

JComboBox能够响应两个事件,分别为ItemEvent和ActionEvent,要处理这两个事件,需要创建相应的类实现ItemListener 和ActionListener接口。ItemEvent触发的时机是当下拉列表框中的所选项更改时,ActionEvent触发的时机是当用户在JComboBox上直接输入选择项并回车时。

例8-6演示了如何在程序中为JComboBox添加项,如何删除项以及选中JComboBox中的某项后的事件处理。

[例8-6]

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JComboBoxTest extends JFrame{

private JComboBox cmb = new JComboBox();

private JLabel label = new JLabel("要添加项的值:");

private JTextField tf = new JTextField(5);

private JButton buttonAdd = new JButton("添加");

private JButton buttonDel = new JButton("删除");

private JTextArea ta = new JTextArea(4,8);

private JPanel panelNorth = new JPanel();

public JComboBoxTest(String title){

super(title);

Container contentPane = this.getContentPane();

panelNorth.add(cmb);

panelNorth.add(label);

panelNorth.add(tf);

panelNorth.add(buttonAdd);

panelNorth.add(buttonDel);

contentPane.add(panelNorth,BorderLayout.NORTH);

contentPane.add(ta,BorderLayout.CENTER);

buttonAdd.addActionListener(new MyActionListener());

buttonDel.addActionListener(new MyActionListener());

cmb.addItemListener(new MyItemListener());

pack();

setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//监听"添加"和"删除"按钮

private class MyActionListener implements ActionListener{ public void actionPerformed(ActionEvent e) {

String command = e.getActionCommand();

//添加按钮处理

if(command.equals("添加")){

if(tf.getText().length()!=0){

cmb.addItem(tf.getText());//添加项

ta.setText("添加成功,添加项:"+tf.getText());

pack();//自动调整窗口大小

}

else{

ta.setText("请输入要添加的项");

}

}

//删除按钮处理

if(command.equals("删除")){

if(cmb.getSelectedIndex()!=-1){

//先获得要删除的项的值

String strDel = cmb.getSelectedItem().toString();

cmb.removeItem(strDel);//删除项

ta.setText("删除成功,删除项:"+strDel);

pack();//自动调整窗口大小

}

else{

ta.setText("请选择要删除的项");

}

}

}

}

private class MyItemListener implements ItemListener{ public void itemStateChanged(ItemEvent e) {

String str = e.getItem().toString();

ta.setText("您选择了项:"+str);

}

}

}

public class Test8_6 {

public static void main(String[] args) {

new JComboBoxTest("JComboBox测试");

}

}

针对不同情况,给出了程序的三个运行结果,见图8-7

图8-7 例8-6三种不同情况下的运行结果

在添加及删除成功后的代码中,两次使用了“pack()”语句,其作用是,当添加或删除成功后,其JComboBox的宽度可能会有所改变,为了不影响其他组件的显示效果,需要使用“pack()”语句使窗体重新调整大小以适应所有组件的显示。

8.4.4 JList列表框

JList又叫列表框,它和下拉列表有许多不同之处。JList在界面上占据固定行数,既支持单项选择,也支持多项选择(连续区间选择需按住Shift键选择,不连续区间选择需按住Ctrl键选择)。而JComboBox一次则只能选择一项。

JList提供了多个构造方法用于创建JList类对象,详见下表8-11。

与JComboBox不同,JList类没有提供任何添加、插入和删除项的方法,在完成JList的构造后,唯一可以修改数据的方法时setListDate(),这个方法可以一次指定所有的项。

JList类中常用的成员方法如下表8-12。

(1)ListSelectionModel.SINGLE_SELECTION :一次只能选择一个列表索引。

(2)ListSelectionModel.SINGLE_INTERVAL_SELECTION:只允许选择连续范围内的多个项,可通过按住Shift键的方式选择。

(3)ListSelectionModel.MULTIPLE_INTERVAL_SELECTION:列表框的默认模式,既可选择连续范围内的多个项,也可选择不连续的多个项。

JList从够响应两个事件:ListSeletionEvent和MouseEvent,,要处理这两个事件,需要创建相应的类实现ListSeletionListener 和MouseListener接口(或是继承MouseAdapter)。ListSeletionEvent触发的时机是当用户单击列表框中的某一个选项并选中它时,MouseEvent 触发的时机是当用户双击列表框中的某个选项时。

JList本身是不带滚动条的,如果将JList放到JScrollPane(滚动面板)中,则会是JList 带有滚动条效果。

例8-7演示了JList的创建、显示及对ListSeletionEvent事件的处理情况。

[例8-7]

import java.awt.*;

import javax.swing.*;

import javax.swing.event.*;

import java.awt.event.*;

class JListTest extends JFrame{

private JList list = new JList();

private JTextArea ta = new JTextArea(6,8);

public JListTest(String title){

super(title);

String[] citys =

{"北京","天津","上海","广州","深圳","南京","重庆","沈阳","西安"};

list.setListData(citys);

Container contentPane = this.getContentPane();

contentPane.setLayout(new FlowLayout(5));//在界面上显示5行

list.setVisibleRowCount(5);

contentPane.add(new JScrollPane(list));//使JList带有滚动条

contentPane.add(ta);

//注册监听器

list.addListSelectionListener(new MyListSelectionListener());

pack();//重新调整

setVisible(true);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

//处理ListSelection事件

private class MyListSelectionListener implements

ListSelectionListener {

public void valueChanged(ListSelectionEvent arg0) {

StringBuffer selectedCitys = new StringBuffer();

Object[] selectedItems = list.getSelectedValues();

for(int i=0;i

selectedCitys.append(selectedItems[i].toString()+"\n");

}

ta.setText(selectedCitys.toString());

pack();

}

}

}

public class Test8_7 {

public static void main(String[] args) {

new JListTest("JList测试");

}

}

运行结果如图8-8所示

图8-8 例8-7运行结果

程序中对ListSeletionEvent做了处理,对于另一个事件MouseEvent,因为其有多个抽象方法,因此建议使用继承MouseAdapter的方式去处理。

8.5菜单和工具栏

菜单和工具栏可提供简单明了的指示说明,让用户非常方便的完成软件操作。利用菜单可以将程序功能模块化。

8.5.1 JMenuBar 菜单

菜单的组织方式为:一个菜单条(JMenuBar)中可以包含多个菜单(JMenu),一个菜单中可以包含多个菜单项(JMenuItem及其子类)。有一些支持菜单的组件,如JFrame、JDialog 以及JApplet,都有一个setMenuBar(JMenuBar bar)方法,可以利用这个方法来设置菜单条。

菜单项是菜单系统中最基本的组件,用户与菜单的交互主要是菜单项的交互,因此事件处理也是针对菜单项的。当用户选择了某个菜单项,就会触发一个ActionEvent事件,可以编写相应的类实现ActionListener接口对该事件进行处理。

例8-8演示了如何创建一个完整的菜单系统,可以通过点击菜单项让菜单项做出反应。import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

class JMenuBarTest extends JFrame{

private JMenuBar bar = new JMenuBar();

private JMenu menuFile = new JMenu("文件");

private JMenuItem itemFile1 = new JMenuItem("新建");

private JMenuItem itemFile2 = new JMenuItem("打开");

private JMenuItem itemFile3 = new JMenuItem("保存");

private JMenuItem itemFile4 = new JMenuItem("退出");

private JMenu menuHelp = new JMenu("帮助");

private JMenuItem itemHelp1 = new JMenuItem("帮助主题");

private JMenuItem itemHelp2 = new JMenuItem("关于记事本");

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

public JMenuBarTest(String title){

super(title);

//设置快捷键

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/a12688567.html, * @link robococde@https://www.doczj.com/doc/a12688567.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("点击这个按钮,

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

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()—获取顶层容器的内容面板

第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组件详解

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基本组件说明

第33章容器,布局管理器,边框 33.1 容器是用来存放而组织组建的对象 布局管理器是用来在容器中摆放组件的特殊对象 33.2 Swing容器的结构 不是直接显示用户界面组件,而是将组建放置到容器中,容器会显示它所包含的组件。所有容器的父类都是java.awt.Container,它是https://www.doczj.com/doc/a12688567.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是表示框架的图像

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