JavaSwing的复杂控件.doc_第1页
JavaSwing的复杂控件.doc_第2页
JavaSwing的复杂控件.doc_第3页
JavaSwing的复杂控件.doc_第4页
JavaSwing的复杂控件.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.1 JTextArea (文本区)JTextArea 是一个显示纯文本的多行区域,它具有换行功能,同时能也可以借助JScrollPane提供垂直和水平滚动的功能。9.1.1 JTextArea的构造函数JTextArea()构造新的 TextAreaJTextArea(Documentdoc)构造新的 JTextArea,使其具有给定的文档模型,所有其他参数均默认为 (null, 0, 0)JTextArea(introws,intcolumns)构造具有指定行数和列数的新的空 TextArea9.1.2 JTextArea的常用方法append(Stringstr) 将给定文本追加到文档结尾String getText()返回JTextArea中的内容int getLineCount()返回 JTextArea 中当前文本所占的行数setLineWrap(booleanwrap)设置文本区的换行策略9.1.3文本区与文本域下面示例展示了文本区与文本域的文本显示特点,文本域只能输入和显示单行文本,且不能提供换行与滚动条功能,而文本区则既可以提供通过换行的多行显示,也能通过将文本区添加到一个JScrollPane(滚动窗格)中实现垂直和水平的滚动功能。示例1package edu.learn;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class JTextAreaExample extends JFrame implements ActionListenerJLabel userLab = new JLabel(发信人:,JLabel.LEFT);JTextField userText = new JTextField(20);JLabel mailLab = new JLabel(所发信息:,JLabel.LEFT);JTextField mailText = new JTextField(20);JLabel infoLabe = new JLabel(信息记录:,JLabel.LEFT);JTextArea txtArea = new JTextArea(5,20);public JTextAreaExample()init();setTitle(文本域练习);setBounds(200,200,250,270);setResizable(false);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);public void init()setLayout(new FlowLayout(FlowLayout.LEFT);add(userLab);add(userText);add(mailLab);add(mailText);add(infoLabe); /JTextArea不能自己提供滚动条,它必须借助于滚动窗格JScrollPaneJScrollPane scroll = new JScrollPane(txtArea);txtArea.setEditable(false);add(scroll);mailText.addActionListener(this);public void actionPerformed(ActionEvent e)txtArea.append(userText.getText() + : + mailText.getText()+ n);mailText.setText();public static void main(String args) new JTextAreaExample();运行结果: 9.1.4 文本区上的DocumentEvent事件JTextArea经常触发的事件是DocumentEvent事件,DocumentEvent类放在javax.swing.envent包中。当文本区中的文本进行编辑操作,使文本区中的文本内容发生变化时,就会导致文本区中的文档模型中的数据发生变化,从而导致文本区触发DocumentEvent事件。DocumentEvent事件实现的接口以及接口中的抽象事件处理方法如下:事件类型对应监听器接口接口中的抽象事件方法DocumentEventDocumentListenerpublic void changeUpdate(DocumentEvent e);public void removeUpdate(DocumentEvent e);public void insertUpdate(DocumentEvent e);以下示例展示了文本区的DocumentEvent(文档事件)的处理方法,该示例中有两个文本区,当用户朝一个文本区中输入文本时,就触发DocumentEvent事件中的文档内容改变事件,从而把修改的内容添加到另一个文本区中。示例2package edu.learn;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;import javax.swing.*;import java.util.*;public class WindowTextSort extends JFrame implements DocumentListener JTextArea text1,text2; WindowTextSort() init(); setLayout(new FlowLayout(); setBounds(120,100,300,240); setResizable(false); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); void init() text1=new JTextArea(5,25); text2=new JTextArea(5,25); add(new JScrollPane(text1); add(new JScrollPane(text2); text1.setLineWrap(true); text2.setLineWrap(true); text2.setEditable(false); (text1.getDocument().addDocumentListener(this);/向文档注册监视器 public void changedUpdate(DocumentEvent e) /接口方法 String str=text1.getText(); String s = str.substring(str.length()-1); text2.append(s); public void removeUpdate(DocumentEvent e) /接口方法 changedUpdate(e); public void insertUpdate(DocumentEvent e) /接口方法 changedUpdate(e); public static void main(String args) WindowTextSort win=new WindowTextSort(); win.setTitle(窗口); 运行结果:9.2 JCheckBox(复选框)JCheckBox复选框是一个拥有被选定状态和取消选定状态的对象,用户可以通过点击复选框对象来切换其状态9.2.1 JCheckBox的构造函数JCheckBox()创建一个没有文本、没有图标并且最初未被选定的复选框JCheckBox(String name)创建一个带文本的、最初未被选定的复选框JCheckBox(Icon icon)创建有一个图标、最初未被选定的复选框JCheckBox(String name,Icon icon)创建带有指定文本和图标的、最初未选定的复选框9.2.2 JCheckBox的常用方法setIcon(Icon icon)设置当前复选框的图标setText(String name)设置当前复选框的文本String getText()获得当前复选框的文本boolean isSeleced()获得当前复选框的是否被选中的状态,如果被选中则返回true,否则返回false9.2.3 JCheckBox的ItemEvent事件 当JCheckBox(复选框)的选中状态由于用户的鼠标点击而出现改变时,复选框就会触发ItemEvent事件。其中ItemEvent 对应的监听器接口和抽象方法如下:事件类型对应监听器接口接口中的抽象事件方法ItemEventItemListenerpublic void ItemStateChanged(ItemEvent e);JCheckBox注册ItemEvent事件监听器对象的方法如下:addItemListener(ItemListener listener)注册ItemEvent事件监听器对象removeItemListener(ItemListener listener)移除ItemEvent事件监听器对象以下是一个通过多个复选框选择购买电脑附件的示例,每当用户选中或者是取消复选框状态时就触发ItemEvent事件,在该事件中将被选中的复选框中的内容获取后显示在下面的文本框中。示例3package edu.learn;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class JCheckBoxExample extends JFrame implements ActionListenerJCheckBox cb1 = new JCheckBox(无限鼠标);JCheckBox cb2 = new JCheckBox(移动硬盘);JCheckBox cb3 = new JCheckBox(U盘);JCheckBox cb4 = new JCheckBox(打印机);JPanel p1 = new JPanel();JLabel label = new JLabel(需要购买的附件:);public JCheckBoxExample()setTitle(复选框练习);p1.setLayout(new GridLayout(4,1);p1.setBorder(BorderFactory.createTitledBorder(系统退出时);p1.add(cb1); p1.add(cb2); p1.add(cb3); p1.add(cb4);add(p1,BorderLayout.CENTER);add(label,BorderLayout.SOUTH);cb1.addActionListener(this);cb2.addActionListener(this);cb3.addActionListener(this);cb4.addActionListener(this);this.setBounds(200, 200, 300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);public void actionPerformed(ActionEvent e)String s = ;if(cb1.isSelected() = true) s += + cb1.getText();if(cb2.isSelected() = true) s += + cb2.getText();if(cb3.isSelected() = true) s += + cb3.getText();if(cb4.isSelected() = true) s += + cb4.getText();label.setText(需要购买的附件:+s);public static void main(String args)JCheckBoxExample.setDefaultLookAndFeelDecorated(true);JCheckBoxExample frame = new JCheckBoxExample();运行结果:9.3 JRadioButton (单选按钮)JRadioButton(单选按钮)与JCheckBox(复选框)类似,都拥有被选中和未被选中两种状态,用户通过鼠标点击在这两个状态中进行切换。所不同的是复选框组中每个对象状态的改变都不影响其它复选框对象的状态,而在同一组中的单选按钮则同一时间只有一个单选按钮对象能处于被选中状态。因此单选按钮在使用时必须拥有一个“按钮组”的控件来将若干个单选按钮归入同一个组中,例如:ButtonGroup group = new ButtonGroup();JRadioButton radIBM = new JRadioButton(IBM);JRadioButton radToshiba = new JRadioButton(TOSHIBA);JRadioButton radLennvo = new JRadioButton(lenovo);JRadioButton radAcer = new JRadioButton(acer);group.add(radIBM); group.add(radToshiba);group.add(radLennvo);group.add(radAcer);9.3.1 JRadioButton的构造函数JRadioButton()创建一个初始化为未选择的单选按钮,其文本未设定JRadioButton(Iconicon)创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本JRadioButton(Iconicon, booleanselected)创建一个具有指定图像和选择状态的单选按钮,但无文本JRadioButton(Stringtext)创建一个具有指定文本的状态为未选择的单选按钮JRadioButton(Stringtext, booleanselected)创建一个具有指定文本和选择状态的单选按钮JRadioButton(Stringtext, Iconicon)创建一个具有指定的文本和图像并初始化为未选择的单选按钮JRadioButton(Stringtext, Iconicon, booleanselected)创建一个具有指定的文本、图像和选择状态的单选按钮9.2.2 JRadioButton的常用方法setIcon(Icon icon)设置单选按钮的图标setText(String name)设置单选按钮的文本String getText()获得单选按钮的文本boolean isSeleced()获得单选按钮的是否被选中的状态,如果被选中则返回true,否则返回false9.3.3 JRadioButton的ItemEvent和ActionEvent事件 JRadioButton与JCheckBox相同,当用户改变它们的状态时,触发的也同样是ItemEvent事件,不过也可以使用ActionEvent事件来完成用户对于单选按钮的操作事件处理。示例4package edu.learn;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class JRadioButtonExample extends JFrame implements ActionListenerButtonGroup group = new ButtonGroup();JRadioButton radIBM = new JRadioButton(IBM);JRadioButton radToshiba = new JRadioButton(TOSHIBA);JRadioButton radLennvo = new JRadioButton(lenovo);JRadioButton radAcer = new JRadioButton(acer);JLabel label = new JLabel(我选择的电脑是:);public JRadioButtonExample()setTitle(JRadioButton example);this.setLayout(new GridLayout(5,1);add(radIBM); add(radToshiba);add(radLennvo);add(radAcer);add(label);radIBM.addActionListener(this);radToshiba.addActionListener(this);radLennvo.addActionListener(this);radAcer.addActionListener(this);group.add(radIBM); group.add(radToshiba);group.add(radLennvo);group.add(radAcer);radIBM.setSelected(true);this.setBounds(200, 200, 300, 200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);public void actionPerformed(ActionEvent e)String s = (JRadioButton)e.getSource().getText();label.setText(我选择的电脑是: + s);public static void main(String args) JRadioButtonExample.setDefaultLookAndFeelDecorated(true);JRadioButtonExample frame = new JRadioButtonExample();运行结果:9.4 JComboBox (组合框)JComboBox (组合框)也叫作下拉列表,叫它组合框是因为它更像是由文本框和列表框组合形成的一个控件,用户可以通过文本框旁的一个箭头按钮将选项列表打开,选中内容后关闭选项列表,并将信息显示在文本框中。9.4.1 JComboBox的构造函数JComboBox()创建具有默认数据模型的 JComboBoxJComboBox(Objectitems)创建包含指定数组中的元素的 JComboBox9.4.2 JComboBox的常用方法addItem(ObjectanObject)为项列表添加项Object getItemAt(intindex)返回指定索引处的列表项int getItemCount()返回列表中的项数int getSelectedIndex()返回组合框中当前被选中选项的索引,索引的起始值为0Object getSelectedItem()返回组合框中当前被选中选项的对象removeItem(ObjectanObject)从项列表中移除项removeItemAt(intanIndex)移除 anIndex 处的项removeAllItems()从项列表中移除所有项9.4.3 JCheckBox的ItemEvent和ActionListener事件 当用户使用鼠标点击组合框时,组合框会触发ActionListener事件,而当用户从一个选中一个选项,同时取消前一个被选中选项时则会触发ItemEvent事件。9.5 JList(列表框)多组数据项可以在列表框中进行同时显示,并且允许用户选择一个或多个项。9.5.1 JList的构造函数JList()构造一个具有空的、只读模型的 JListJList(ObjectlistData)构造一个 JList,使其显示指定数组中的元素JList(ListModeldataModel)根据指定的非 null 模型构造一个显示元素的 JList使用JList(ObjectlistData)创建的列表框,列表框中的项是静态的,不可修改的。因为JList控件只提供数据项的显示和提取操作,而不提供数据的添加和修改。如果需要动态的设置数据项给列表框,就必须使用模型。这很类似与MVC结构,即JList提供数据的显示和用户的交互,而ListModel(模型)则负责数据的存储和修改。具体如下:经常用于JList中进行存储数据的模型为DefaultListModel,它用于存储可变数据,具体用法如下:ListModelJList显示交互数据存储和修改DefaultListModel lstModel = new DefaultListModel();JList listType = new JList(lstModel); 9.5.2 JList的常用方法Object getSelectedValue()返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值。int getSelectedIndex()返回最小的选择单元索引;只选择了列表中单个项时,返回该选择。ListModel getModel()返回保存由 JList 组件显示的项列表的数据模型setSelectedIndex(intindex)选择单个单元setSelectedValue(ObjectanObject, booleanshouldScroll)从列表中选择指定的对象9.5.3 ListModel的常用方法add(int index, Object element)在指定index处添加一个列表项addElement(Object element)在列表末尾追加一个element列表项Object getItemAt(intindex)返回指定索引处的列表项int getSize()返回列表的长度remove(int index)移除指定index位置的列表项removeElement(Object obj)移除列表中的对应obj的列表项removeElementAt(int index)移除指定index位置的列表项removeAllElements()移除列表中的所有项9.5.4 JList的ListSelectionEvent事件 当用户选择列表中的选项使列表选择值发生更改时,就会触发ListSelectioEvnet事件。ListSelectioEvnet属于javax.swing.event包中,其监听器接口和抽象事件方法如下:事件类型对应监听器接口接口中的抽象事件方法ListSelectioEvnetListSelectionListenerpublic void valueChanged(ListSelectionEvent e)JList注册ListSelectioEvnet事件监听器对象的方法如下:addListSelectionListener(ListSelectioEvnet listener)注册ItemEvent事件监听器对象removeListSelectionListener(ListSelectioEvnet listener)移除ItemEvent事件监听器对象以下示例展示的是一个购买电脑的过程案例,窗体中首先使用组合框实现品牌的选择,之后根据品牌在列表框中实现该品牌各种型号的设置。最后用户选择型号后,该电脑品牌和型号都将显示在窗体下部的文本框中。示例5package edu.learn;import java.awt.BorderLayout;import java.awt.FlowLayout;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.awt.*;public class JComboBoxAndJListExample2 extends JFrame implements ItemListener,ListSelectionListenerJComboBox compute = new JComboBox();/定义组合框DefaultListModel lstModel = new DefaultListModel();/定义一个用于存储可变数据的模型JList listType = new JList(lstModel); /利用模型创建列表框JScrollPane scroll = new JScrollPane(listType); /使用滚动面板提供滚动条功能JTextField text = new JTextField(您所选择的电脑:);Object type = E40,E220,x120e,x201i,x1,L412,L420,T420i,T410i,C600-C01B,L600-62R,L700-T10R,C600D-T10B,L700-C07R,L750-T01S,Y470N-IFI,Y470N-ISE,G460AL-ITH(A),Y460C-ITH(灰),G470AH-ITH(深棕色),Y470N-ITH;public JComboBoxAndJListExample2()setTitle(组合框与列表框);compute.addItem(IBM);compute.addItem(TOSHIBA);compute.addItem(lenovo);compute.addItemListener(this); setLayout(new BorderLayout(5,5);add(compute,BorderLayout.NORTH);add(scroll,BorderLayout.CENTER);listType.setFixedCellWidth(150); /设置列表框的每个单元的宽度listType.addListSelectionListener(this);add(text,BorderLayout.SOUTH);JList list = new JList();/设置窗体的大小和位置this.setBounds(200, 200, 400, 220);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);/对应ItemListener的事件方法public void itemStateChanged(ItemEvent e)String s = (String)compute.getSelectedItem();/e.getStateChange() = e.SELECTED用于避免两次的事件触发if (s.equals(IBM)& e.getStateChange() = e.SELECTED)lstModel.removeAllElements();for(int i=0;itype0.length;i+)lstModel.addElement(type0i);else if(s.equals(TOSHIBA) & e.getStateChange() = e.SELECTED)lstModel.removeAllElements();for(int i=0;itype1.length;i+)lstModel.addElement(type1i);else if(s.equals(lenovo) & e.getStateChange() = e.SELECTED)lstModel.removeAllElements();for(int i=0;itype2.length;i+)lstModel.addElement(type2i);/对应ListSelectionListener的事件方法public void valueChanged(ListSelectionEvent e)if(e.getValueIsAdjusting() = true) /用于避免两次的事件触发String brand = compute.getSelectedItem().toString();String type = listType.getSelectedValue().toString();text.setText(您所选择的电脑: + brand + + type);public static void main(String args) /利用默认的窗口管理器为窗体实现新的外观JComboBoxAndJListExample2.setDefaultLookAndFeelDecorated(true);JComboBoxAndJListExample2 frame = new JComboBoxAndJListExample2();运行结果: 9.6 容器容器分为底层容器和中间容器。底层容器有JFrame,JDialog,它们拥有标题栏、菜单栏,是所有控件以及中间容器赖以放置的基本容器。而中间容器是必须被添加到底层容器才能发挥作用的容器。它们没有标题栏、没有菜单栏,虽然也能作为容器添加组件,但却不能独立存在。9.6.1 JPanel面板面板是一个用于放置一个或多个组件的中间容器,拥有默认的布局(FlowLayout流式布局)。JPanel p = new JPanel();p.add(componet1);p.add(componet2);9.6.2 JScrollPanl 滚动窗格滚动窗格只可以添加一个组件,且该组件拥有多行或者多列的数据显示要求。大多数情况下这样的组件有JTextArea、JList、JTree、JTable等等。JscrollPane scroll = new JScrollPane(new JTextArea();9.6.3 JSplitPane拆分窗格拆分窗格顾名思义就是把窗体拆分为两个部分,每个部分可以是一个容器。拆分窗格有两种两种类型:水平拆分和垂直拆分。1. 水平拆分splitPane = new JSplitPane(JSplitPane. HORIZONTAL_SPLIT,true);splitPane.setDividerLocation(0.5);splitPane.add(p1,JSplitPane.LEFT);splitPane.add(p2,JSplitPane.RIGHT);2. 垂直拆分splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);splitPane.setDividerLocation(0.5);splitPane.add(p1,JSplitPane.TOP);splitPane.add(p2,JSplitPane.BOTTOM);示例6package edu.learn;import javax.swing.*;import java.awt.*;public class JSplitPaneExample extends JFrame JPanel p1,p2;JSplitPane splitPane;public JSplitPaneExample()init();setBounds(200, 200, 300, 200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);public void init()setTitle(拆分窗格练习);p1 = new JPanel();p2 = new JPanel();/splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,p1,p2);/水平拆分 /*splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true);splitPane.setDividerLocation(0.5);splitPane.add(p1,JSplitPane.LEFT);splitPane.add(p2,JSplitPane.RIGHT); */垂直拆分splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,true);splitPane.setDividerLocation(0.5);splitPane.add(p1,JSplitPane.TOP);splitPane.add(p2,JSplitPane.BOTTOM);add(splitPane,BorderLayout.CENTER);public static void main(String args) new JSplitPaneExample();运行结果: 9.7 JTable(表格)JTable(表格)是以行和列的形式显示数据,并允许对表格中的数据进行编辑。表格必须与模型一起实现MVC结构,即表格提供内容显示和用户交互功能,而模型实现对数据的动态添加和维护功能。因此,如果创建了不带有模型的表格,其仅仅只能提供内容的显示和获取,而不能提供数据的动态设置。9.7.1创建不带模型的表格1)调用无参构造函数JTabletable=newJTable();2) 以表头和表数据创建表格Object data = 第1行表数据,第2行表数据, , 第N行表数据;String columnNames =列名1 ,列名2, , 列名N;JTable table = new JTable(data, columnNames);以下示例展示了利用表数据和表头创建不带模型的表格的方法,示例如下示例7package edu.learn;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class SimpleTableExample extends JFrame public SimpleTableExample() Object data = 0001, 张三, 财务处,new GregorianCalendar(1965,10,10),new Double(1700.00), 0002, 李四, 计算中心,new GregorianCalendar(1987,9,9),new Double(1500.00), 0003, 王二, 收费大队,new GregorianCalendar(1978,12,23),new Double(2000.00), 0004, 无一, 维修部,new GregorianCalendar(1982,10,23),new Double(2900.78), 0005, 小小, 计财部,new GregorianCalendar(1976,10,1),new Double(100.00), ; String columnNames = 雇员编号, 雇员姓名,所在部门,出生日期,薪水; /创建表格 JTable table = new JTable(data, columnNames); /设置关闭列宽自动调整特性 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); /给表格添加滚动条 JScrollPane scrollPane = new JScrollPane(table); add(scrollPane, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public static void main(String args) SimpleTableExample f = new SimpleTableExample(); f.setSize(500,300); f.setVisible(true); 运行结果:在示例中,由于没有模型对数据进行维护,因此时间类型不能正确显示,同时也不能通过添加方法向表格添加新的数据项。9.7.2 创建带模型的表格利用默认的DefaultTableModel作为表格模型,以提供表格中的数据添加、删除操作。Object data = 内容1,内容2 , ,内容3String columnNames列名1 ,列名2, , 列名N;DefaultTableModel model=new DefaultTableModel(null,columnNames);JTable table = new JTable(model); model.addRow(data);示例8package edu.learn;import javax.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论