-Swing组件[1]

上传人:回**** 文档编号:123593369 上传时间:2022-07-22 格式:DOC 页数:62 大小:763.50KB
返回 下载 相关 举报
-Swing组件[1]_第1页
第1页 / 共62页
-Swing组件[1]_第2页
第2页 / 共62页
-Swing组件[1]_第3页
第3页 / 共62页
点击查看更多>>
资源描述
第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 JFrameJFrame是用来替代AWT包中Frame的,可以实现与Frame相似的功能,涉及作为容器容纳其她组件,显示组件等。例8-1import javax.swing.*;import java.awt.*;class JFrameTest extends JFrameprivate 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默认的布局管理器是BorderLayoutContainer 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 JpanelJPanel是使用最多的组件之一,它是AWT中Panel的替代组件。其默认的布局管理器是FlowLayout布局管理器。运用JPanel可以实现更为复杂的布局,如BorderLayout布局管理方略,只容许添加5个组件,那么我们可以在5个区域中添加5个JPanel,而每个JPanel又可以根据不同的布局管理方略添加多种组件,只要你乐意,可以添加任意多种你想添加的组件。时8.1.3 JTabbedPane当窗口的组件元素过多时,我们可以将这些组件分组放到不同的页面中,java提供了JTabbedPane页签面板来实现。JTabbedPane涉及多种选项卡,每个页面和一种选项卡相相应,每个选项卡又是一种容器(一般用JPanel类来封装),可以涉及其她的GUI组件,选项卡可以显示图标和文本。当顾客选择特定的标签后,就会显示相应的选项卡,并且会触发ChangeEvent事件,该事件由ChangeListener监听器响应。JTabbedPane提供了如下三个构造措施用于创立JTabbedPane类对象。表8-1 JTabbedPane构造措施构造措施阐明public JTabbedPane()创立一种具有默认的JTabbedPane.TOP 选项卡布局的空 TabbedPane。public JTabbedPane(inttabPlacement)创立一种空的 TabbedPane,使其按照tabPlacement值指定选项卡的布局public JTabbedPane(inttabPlacement, inttabLayoutPolicy)创立一种空的 TabbedPane,使其具有指定的选项卡布局(tabPlacement值指定)和选项卡布局方略(tabLayoutPolicy指定)。构造措施中波及的两个参数的含义及具体值如下: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-2import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;class JTabbedPaneTest extends JFrameprivate 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 ChangeListenerpublic 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右侧图8-3 例8-2运营成果事件解决中有如下一段代码:String temp = jtabbedpane.getTitleAt(jtabbedpane.getSelectedIndex();getSelectedIndex()措施表达获得目前选择的选项卡的索引值(int类型,从0开始,-1表达未选中任何选项卡)。getTitleAt(index)措施表达获得索引值为index的选项卡的标题。8.1.4 JScrollPaneJSCrollPane又称滚动面板,可以用于当窗口中的内容不小于窗口时,在窗口的右边和下边设立滚动条,借助滚动条就可以 看到整个窗口的内容。JSCrollPane的直接父类为JComponent。JSCrollPane提供了四个构造措施用于创立JSCrollPane类对象,见下表。表8-2 JSCrollPane构造措施构造措施阐明JScrollPane()创立一种空的JSCrollPane对象JScrollPane(Componentview)创立JSCrollPane对象,并加入一种view组件,当组件内容不小于显示区域时自动产生滚动条JScrollPane(intvsbPolicy, inthsbPolicy)创立有水平滚动条和垂直滚动条的JSCrollPane对象JScrollPane(Componentview,intvsbPolicy,inthsbPolicy)创立有水平滚动条和垂直滚动条的JSCrollPane对象,并在其内加入一种view对象有关JSCrollPane的例子我们在其她用到JSCrollPane的地方进行简介,这里不单独举例了。8.2 按钮控件图8-1中有一种AbstractButton类,该类是Swing中所有按钮的父类,该类的三个直接派生类JButton、JToggleButton和JMenuItem。JButton与AWT中的Button类似,JButton有一种直接子类为BasicArrowButton,是一种带有箭头的按钮(箭头有上、下、左、右四个方向)。JToggleButton表达一种切换按钮,该类有两个直接子类是我们常常使用到的,JRadioButton单选按钮和JCheckBox复选按钮。JMenuItem涉及三个直接子类,它们都是与菜单有关的按钮。程序例8-3演示了各个按钮的用法。8-3import java.awt.*;import javax.swing.*;import javax.swing.plaf.basic.BasicArrowButton;import java.awt.event.*;class ButtonsTest extends JFrameprivate 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构造措施构造措施阐明public JTextField()构造一种新的 TextField。初始字符串为 null,列数为 0public JTextField(Stringtext)构造一种用指定文本初始化的新TextField。列数为 0public JTextField(intcolumns)构造一种具有指定列数的新的空TextField。初始字符串为 null。public JTextField(Stringtext,intcolumns)构造一种用指定文本和列初始化的新 TextField。text:文本值,columns:列数JTextField有两个重要的措施setText(String t)和getText()分别用于设立文本框的显示文本和获取目前文本框的文本。但是这两个措施都不是JTextField自身提供的措施,而是其父类JTextComponent所提供的。JTextField类可引起ActionEvent事件,当顾客在文本框中按下回车键时触发。8.3.2 JTextArea 文本区JTextArea文本区是一种容许编辑多行文本的swing组件,JTextArea提供了多种构造措施用于创立JTextArea对象。具体见下表8-4。表8-4 JTextArea构造措施构造措施阐明JTextArea()构造新的 TextArea。初始字符串为 null,行/列设立为 0。JTextArea(Stringtext)构造显示指定文本的新的 TextArea。行/列设立为 0JTextArea(introws, intcolumns)构造具有指定行数和列数的新的空 TextArea。初始字符串为 nullJTextArea(Stringtext,introws,intcolumns)构造具有指定文本、行数和列数的新的 TextArea。text:文本值,rows:行数,columns:列数由于JTextArea是JTextComponent的直接子类,因此与JTextField同样,也可以通过setText(String t)和getText()措施设立和获取文本区的文本值。JTextArea类可引起ActionEvent事件,当顾客在文本区中按下回车键时触发。8.3.3 JPasswordField密码框在AWT组件中,并没有单独的密码框组件,而是通过TextField的一种setEchoChar()措施来得到密码框,但在Swing中则单独通过一种类JPasswordField来表达。密码框是文本框JTextField组件的简朴扩展。因此,其构造措施与JTextField相类似,这里不再简介。JPasswordField类中有几种重要措施,如下:表8-5 JPasswordField类常用构造措施成员措施阐明public char getPassword()获得密码的字符数组表达,用来替代getText()措施public void setEchoChar(charc)设立此 JPasswordField 的回显字符public char getEchoChar()返回要用于回显的字符8.3.4 JLabel标签JLabel是一种静态组件,该组件可以显示一行静态文本,一般只是一种阐明性的文字,而不接受顾客的输入,也无事件响应。JLabel提供了如下措施用于构建JLabel对象表8-6 JLabel构造措施构造措施阐明JLabel()创立无图像并且其标题为空字符串的 JLabel类对象JLabel(Iconimage)创立具有指定图像的 JLabel类对象public JLabel(Iconimage, inthorizontalAlignment)创立具有指定图像和水平对齐方式的 JLabe类对象JLabel(Stringtext)创立具有指定文本的 JLabel类对象JLabel(Stringtext,Iconicon, inthorizontalAlignment)创立具有指定文本、图像和水平对齐方式的 JLabel类对象JLabel(Stringtext,inthorizontalAlignment)创立具有指定文本和水平对齐方式的 JLabel类对象构造措施中各参数意义Image:显示在JLabel上的图标。horizontalAlignment:JLabel上文字的对齐方式,其值为int枚举型,值涉及SwingConstants.LEFT、SwingConstants.CENTER、SwingConstants.RIGHT、SwingConstants.LEADING 和 SwingConstants.TRAILING。text:显示在JLabel上的文字。如下的例8-4演示了本节中所简介的各个组件的用法,界面可提供顾客输入顾客名和密码,按下回车后在JTextArea显示区显示顾客输入的顾客名和密码信息,不容许顾客名或密码为空。例8-4import java.awt.*;import javax.swing.*;import java.awt.event.*;class TextInputTest extends JFrameprivate 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 ActionListenerpublic 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。表8-7 JCheckBox构造措施构造措施阐明JCheckBox()创立一种没有文本、没有图标并且最初未被选定的复选框JCheckBox(Iconicon)创立有一种图标、最初未被选定的复选框JCheckBox(Iconicon, booleanselected)创立一种带图标的复选框,并指定其最初与否处在选定状态JCheckBox(Stringtext)创立一种带文本的、最初未被选定的复选框JCheckBox(Stringtext, booleanselected)创立一种带文本的复选框,并指定其最初与否处在选定状态JCheckBox(Stringtext, Iconicon)创立带有指定文本和图标的、最初未选定的复选框JCheckBox(Stringtext,Iconicon,booleanselected)创立一种带文本和图标的复选框,并指定其最初与否处在选定状态构造措施中各参数意义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表8-8 JRadioButton构造措施构造措施阐明JRadioButton()创立一种初始化为未选择的单选按钮,其文本未设定JRadioButton(Iconicon)创立一种初始化为未选择的单选按钮,其具有指定的图像但无文本JRadioButton(Iconicon, booleanselected)创立一种具有指定图像和选择状态的单选按钮,但无文本JRadioButton(Stringtext)创立一种具有指定文本的状态为未选择的单选按钮JRadioButton(Stringtext, booleanselected)创立一种具有指定的文本和图像并初始化为未选择的单选按钮JRadioButton(Stringtext, Iconicon)创立一种具有指定的文本和图像并初始化为未选择的单选按钮JRadioButton(Stringtext, Iconicon,booleanselected)创立一种具有指定的文本、图像和选择状态的单选按钮构造措施中各参数意义text -此单选按钮上显示的字符串 icon -此按钮应显示的图像selected - 批示最初选择状态的 boolean 值。如果该参数为 true,则单选框被选定当JRadioButton被选中或取消选中时,会触发一种事件,该事件就是ActionEvent,如果想根据JRadioButton的选中状况进行不同解决,可以编写实现ActionListener接口的类进行解决。例8-5 中在JFrame添加了两个JRadioButton及三个JCheckBox,验证我们所学的部分知识。例 8-5import java.awt.*;import javax.swing.*;import java.awt.event.*;class JCheckBoxAndJRadioButtonTest extends JFrameprivate 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 ActionListenerpublic 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_5public 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对象,可使用addItem措施添加选项JComboBox(ComboBoxModelaModel)创立一种 JComboBox,其项取自既有的 ComboBoxModelJComboBox(Objectitems)创立涉及指定数组中的元素的 JComboBoxJComboBox(Vectoritems)创立涉及指定 Vector 中的元素的 JComboBox我们可以运用上表给出的四个措施中的任意一种来创立JComboBox对象,在实际使用中,JComboBox()及JComboBox(Objectitems)方式也许会更常用。JComboBox类提供了多种成员措施用于操作下拉列表框中的项。详见下表8-10。表8-10 JComboBox类的常用措施成员措施阐明void addItem(ObjectanObject)将指定的对象作为项添加到下拉列表框中void insertItemAt(ObjectanObject,intindex)在下拉列表框中的给定索引处插入项void removeItem(ObjectanObject)在下拉列表框中删除指定的对象项void removeItemAt(intanIndex)在下拉列表框中删除指定位置的对象项void removeAllItems()从下拉列表框中删除所有项int getItemCount()返回下拉列表框中的项数Object getItemAt(intindex)获取指定下标的列表项,下标从0开始int getSelectedIndex()获取目前选择的下标Object getSelectedItem()获取目前选择的项JComboBox可以响应两个事件,分别为ItemEvent和ActionEvent,要解决这两个事件,需要创立相应的类实现ItemListener 和ActionListener接口。ItemEvent触发的时机是当下拉列表框中的所选项更改时,ActionEvent触发的时机是当顾客在JComboBox上直接输入选择项并回车时。例8-6演示了如何在程序中为JComboBox添加项,如何删除项以及选中JComboBox中的某项后的事件解决。例8-6import java.awt.*;import javax.swing.*;import java.awt.event.*;class JComboBoxTest extends JFrameprivate 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 ActionListenerpublic 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();/自动调节窗口大小elseta.setText(请输入要添加的项);/删除按钮解决if(command.equals(删除)if(cmb.getSelectedIndex()!=-1)/先获得要删除的项的值String strDel = cmb.getSelectedItem().toString();cmb.removeItem(strDel);/删除项ta.setText(删除成功,删除项:+strDel);pack();/自动调节窗口大小elseta.setText(请选择要删除的项);private class MyItemListener implements ItemListenerpublic 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又叫列表框,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 各类标准


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!