收藏 分销(赏)

JavaSwing的复杂控件.doc

上传人:仙人****88 文档编号:11398273 上传时间:2025-07-21 格式:DOC 页数:29 大小:522.50KB 下载积分:10 金币
下载 相关 举报
JavaSwing的复杂控件.doc_第1页
第1页 / 共29页
JavaSwing的复杂控件.doc_第2页
第2页 / 共29页


点击查看更多>>
资源描述
9.1 JTextArea (文本区) JTextArea 是一个显示纯文本的多行区域,它具有换行功能,同时能也可以借助JScrollPane提供垂直和水平滚动的功能。 9.1.1 JTextArea的构造函数 JTextArea() 构造新的 TextArea JTextArea(Document doc) 构造新的 JTextArea,使其具有给定的文档模型,所有其他参数均默认为 (null, 0, 0) JTextArea(int rows,int columns) 构造具有指定行数和列数的新的空 TextArea 9.1.2 JTextArea的常用方法 append(String str) 将给定文本追加到文档结尾 String getText() 返回JTextArea中的内容 int getLineCount() 返回 JTextArea 中当前文本所占的行数 setLineWrap(boolean wrap) 设置文本区的换行策略 9.1.3文本区与文本域 下面示例展示了文本区与文本域的文本显示特点,文本域只能输入和显示单行文本,且不能提供换行与滚动条功能,而文本区则既可以提供通过换行的多行显示,也能通过将文本区添加到一个JScrollPane(滚动窗格)中实现垂直和水平的滚动功能。 示例1 package edu.learn; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JTextAreaExample extends JFrame implements ActionListener{ JLabel 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不能自己提供滚动条,它必须借助于滚动窗格JScrollPane JScrollPane 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事件实现的接口以及接口中的抽象事件处理方法如下: 事件类型 对应监听器接口 接口中的抽象事件方法 DocumentEvent DocumentListener public void changeUpdate(DocumentEvent e) ; public void removeUpdate(DocumentEvent e) ; public void insertUpdate(DocumentEvent e) ; 以下示例展示了文本区的DocumentEvent(文档事件)的处理方法,该示例中有两个文本区,当用户朝一个文本区中输入文本时,就触发DocumentEvent事件中的文档内容改变事件,从而把修改的内容添加到另一个文本区中。 示例2 package 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,否则返回false 9.2.3 JCheckBox的ItemEvent事件 当JCheckBox(复选框)的选中状态由于用户的鼠标点击而出现改变时,复选框就会触发ItemEvent事件。其中ItemEvent 对应的监听器接口和抽象方法如下: 事件类型 对应监听器接口 接口中的抽象事件方法 ItemEvent ItemListener public void ItemStateChanged(ItemEvent e); JCheckBox注册ItemEvent事件监听器对象的方法如下: addItemListener(ItemListener listener) 注册ItemEvent事件监听器对象 removeItemListener(ItemListener listener) 移除ItemEvent事件监听器对象 以下是一个通过多个复选框选择购买电脑附件的示例,每当用户选中或者是取消复选框状态时就触发ItemEvent事件,在该事件中将被选中的复选框中的内容获取后显示在下面的文本框中。 示例3 package edu.learn; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JCheckBoxExample extends JFrame implements ActionListener{ JCheckBox 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(Icon icon) 创建一个初始化为未选择的单选按钮,其具有指定的图像但无文本 JRadioButton(Icon icon, boolean selected) 创建一个具有指定图像和选择状态的单选按钮,但无文本 JRadioButton(String text) 创建一个具有指定文本的状态为未选择的单选按钮 JRadioButton(String text, boolean selected) 创建一个具有指定文本和选择状态的单选按钮 JRadioButton(String text, Icon icon) 创建一个具有指定的文本和图像并初始化为未选择的单选按钮 JRadioButton(String text, Icon icon, boolean selected) 创建一个具有指定的文本、图像和选择状态的单选按钮 9.2.2 JRadioButton的常用方法 setIcon(Icon icon) 设置单选按钮的图标 setText(String name) 设置单选按钮的文本 String getText() 获得单选按钮的文本 boolean isSeleced() 获得单选按钮的是否被选中的状态,如果被选中则返回true,否则返回false 9.3.3 JRadioButton的ItemEvent和ActionEvent事件 JRadioButton与JCheckBox相同,当用户改变它们的状态时,触发的也同样是ItemEvent事件,不过也可以使用ActionEvent事件来完成用户对于单选按钮的操作事件处理。 示例4 package edu.learn; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class JRadioButtonExample extends JFrame implements ActionListener{ ButtonGroup 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() 创建具有默认数据模型的 JComboBox JComboBox(Object[] items) 创建包含指定数组中的元素的 JComboBox 9.4.2 JComboBox的常用方法 addItem(Object anObject) 为项列表添加项 Object getItemAt(int index) 返回指定索引处的列表项 int getItemCount() 返回列表中的项数 int getSelectedIndex() 返回组合框中当前被选中选项的索引,索引的起始值为0 Object getSelectedItem() 返回组合框中当前被选中选项的对象 removeItem(Object anObject) 从项列表中移除项 removeItemAt(int anIndex) 移除 anIndex 处的项 removeAllItems() 从项列表中移除所有项 9.4.3 JCheckBox的ItemEvent和ActionListener事件 当用户使用鼠标点击组合框时,组合框会触发ActionListener事件,而当用户从一个选中一个选项,同时取消前一个被选中选项时则会触发ItemEvent事件。 9.5 JList(列表框) 多组数据项可以在列表框中进行同时显示,并且允许用户选择一个或多个项。 9.5.1 JList的构造函数 JList() 构造一个具有空的、只读模型的 JList JList(Object[] listData) 构造一个 JList,使其显示指定数组中的元素 JList(ListModel dataModel)) 根据指定的非 null 模型构造一个显示元素的 JList 使用JList(Object[] listData)创建的列表框,列表框中的项是静态的,不可修改的。因为JList控件只提供数据项的显示和提取操作,而不提供数据的添加和修改。如果需要动态的设置数据项给列表框,就必须使用模型。这很类似与MVC结构,即JList提供数据的显示和用户的交互,而ListModel(模型)则负责数据的存储和修改。具体如下: 经常用于JList中进行存储数据的模型为DefaultListModel,它用于存储可变数据,具体用法如下: ListModel JList 显示 交互 数据存储和修改 DefaultListModel lstModel = new DefaultListModel(); JList listType = new JList(lstModel); 9.5.2 JList的常用方法 Object getSelectedValue() 返回最小的选择单元索引的值;只选择了列表中单个项时,返回所选值。 int getSelectedIndex() 返回最小的选择单元索引;只选择了列表中单个项时,返回该选择。 ListModel getModel() 返回保存由 JList 组件显示的项列表的数据模型 setSelectedIndex(int index) 选择单个单元 setSelectedValue(Object anObject, boolean shouldScroll) 从列表中选择指定的对象 9.5.3 ListModel的常用方法 add(int index, Object element) 在指定index处添加一个列表项 addElement(Object element) 在列表末尾追加一个element列表项 Object getItemAt(int index) 返回指定索引处的列表项 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包中,其监听器接口和抽象事件方法如下: 事件类型 对应监听器接口 接口中的抽象事件方法 ListSelectioEvnet ListSelectionListener public void valueChanged(ListSelectionEvent e) JList注册ListSelectioEvnet事件监听器对象的方法如下: addListSelectionListener(ListSelectioEvnet listener) 注册ItemEvent事件监听器对象 removeListSelectionListener(ListSelectioEvnet listener) 移除ItemEvent事件监听器对象 以下示例展示的是一个购买电脑的过程案例,窗体中首先使用组合框实现品牌的选择,之后根据品牌在列表框中实现该品牌各种型号的设置。最后用户选择型号后,该电脑品牌和型号都将显示在窗体下部的文本框中。 示例5 package 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,ListSelectionListener{ JComboBox 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;i<type[0].length;i++) { lstModel.addElement(type[0][i]); } } else if(s.equals("TOSHIBA") && e.getStateChange() == e.SELECTED) { lstModel.removeAllElements(); for(int i=0;i<type[1].length;i++) { lstModel.addElement(type[1][i]); } } else if(s.equals("lenovo") && e.getStateChange() == e.SELECTED) { lstModel.removeAllElements(); for(int i=0;i<type[2].length;i++) { lstModel.addElement(type[2][i]); } } } //对应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); 示例6 package edu.learn; import javax.s
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服