编写一个程序,从串口模拟键盘输入程序3个数,打印出这3个数的和、平均值、乘积、最小值、最大值

posts - 73,&
comments - 4,&
trackbacks - 0
package com.
import java.awt.C
import java.awt.D
import java.awt.GridL
import java.awt.event.ActionE
import java.awt.event.ActionL
import java.net.URL;
import javax.swing.I
import javax.swing.ImageI
import javax.swing.JB
import javax.swing.JF
import javax.swing.JOptionP
import javax.swing.WindowC
* 1:按钮在Swing中是较为常见的组件,用于触发特定动作
* Swing中提供了多种按钮,包括提交按钮,复选框,单选按钮等
* 这些按钮都是从AbstractButton类中继承而来的
* 2:Swing中的提交按钮组件(JButton)由JButton对象表示
* JButton含有4种主要的构造方法
* 参数text,icon分别代表显示文字标签和图标
* 3:本实例使用了两种方式创建按钮,第一种是在初始化按钮时赋予按钮图标与文字
* 这种初始化必须先获得图片路径,然后将路径实例化到Icon,然后在Button中加载出来
* 第二种方式是首先创建一个没有定义图标和文字的按钮对象,然后使用
* setIcon()方法为这个按钮定制一个图标。
* setToolTipText()方法是为按钮设置提示文字,鼠标停留在按钮上面即可
* setBorderPainted()方法设置边界是否显示
* setMaximumSize()方法设置按钮的大小与图标的大小一致,该类方法需要的参数类型是
Dimension类对象,这样看上去此图片就如同按钮一样摆放在窗体中,
同时也可以使用setEnabled()方法设置按钮是否可用
* @author biexiansheng
public class JButtonTest extends JFrame{
public JButtonTest(){//定义一个构造方法
//获取图片所在的URL
以下2行代码需要额外注意
URL url=JButtonTest.class.getResource("imageButtoo.jpg");
Icon icon=new ImageIcon(url);//实例化Icon对象
//设置网格布局管理器
水平5垂直5
setLayout(new GridLayout(3,2,5,5));
//创建容器
Container container=getContentPane();
for(int i=0;i&5;i++){//创建按钮,同时设置按钮文字和图标
JButton jb=new JButton("button"+i,icon);
container.add(jb);//将按钮添加到容器中
if(i%2==0){
jb.setEnabled(false);//设置其中一些按钮不可用
}//上下位两种按钮的实例化
JButton jb2=new JButton();//实例化一个没有文字与图片的按钮
jb2.setMaximumSize(new Dimension(90,30));//设置按钮和图片的大小相同
jb2.setIcon(icon);//为按钮设置图标
jb2.setHideActionText(true);
jb2.setToolTipText("图片按钮");//设置按钮提示为文字
jb2.setBorderPainted(false);//设置按钮边界不显示
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//弹出对话框
JOptionPane.showMessageDialog(null, "弹出对话框");
container.add(jb2);//将按钮添加到容器中
setTitle("提交按钮组件按钮小试牛刀");//设置窗口标题
setVisible(true);//设置窗口可视化
setSize(500,550);//设置窗口的大小
//设置窗口的关闭方式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
public static void main(String[] args) {
// TODO Auto-generated method stub
JButtonTest jb=new JButtonTest();
案例运行结果如下
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
package com.
import java.awt.BorderL
import java.awt.C
import java.awt.event.ActionE
import java.awt.event.ActionL
import javax.swing.JCheckB
import javax.swing.JF
import javax.swing.JP
import javax.swing.JScrollP
import javax.swing.JTextA
import javax.swing.WindowC
* 1:复选框组件JCheckBox
* 其在Swing组件中的使用也非常广泛,它具有一个方性图标,外加一段描述性文字
* 复选框区别于单选按钮就是每一个复选框都提供了选中和不选中两种状态
* @author biexiansheng
public class CheckBoxTest extends JFrame{
private JPanel jp1=new JPanel();//初始化面板对象
private JPanel jp2=new JPanel();//
//如果加入滚动面板必须先加入JTextArea并且一定要指定编译器的大小
private JTextArea jt=new JTextArea(20,50);//创建文本域组件
private JCheckBox jc1=new JCheckBox();//实例化复选按钮
private JCheckBox jc2=new JCheckBox();//
private JCheckBox jc3=new JCheckBox();//
public CheckBoxTest(){//定于一个构造方法
Container container=getContentPane();//创建一个容器
//设置布局管理器
container.setLayout(new BorderLayout());//初始化边界布局管理器
container.add(jp1,BorderLayout.NORTH);//添加到容器中
final JScrollPane js=new JScrollPane(jt);//创建JScrollPane面板对象
/*如果需要在JScrollPane面板中放置多个组件,需要将多个组件放置在JPanel面板上
* 然后将JPanel面板作为一个整体组件添加在JScrollPane组件上 * */
jp1.add(js);
container.add(jp2, BorderLayout.SOUTH);
jp2.add(jc1);
jc1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jt.append("复选框1被选中\n");
jp2.add(jc2);
jc2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jt.append("复选框2被选中\n");
jp2.add(jc3);
jc3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jt.append("复选框3被选中\n");
setTitle("复选框的使用");
setSize(600,650);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
public static void main(String[] args) {
// TODO Auto-generated method stub
CheckBoxTest cb=new CheckBoxTest();
//实例化时调用构造方法
实例运行结果如下
为了区别运行想过,特别添加了颜色运行效果清晰区别
也熟悉一下各个面板颜色的控制
package com.
import java.awt.C
import javax.swing.ButtonG
import javax.swing.JB
import javax.swing.JF
import javax.swing.JL
import javax.swing.JP
import javax.swing.JRadioB
import javax.swing.WindowC
* 1:在默认情况下,单选按钮JRadioButton显示一个圆形图标,并且通常在该图标旁放置
* 一些说明性文字,而在应用程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮
* 表现出某种功能,当用户选中某个单选按钮后,按钮组中其他按钮将被自动取消。
* 2:单选按钮是Swing组件中JRadioButton类的对象,该类是JToggleButton的子类
* 而JToggleButton类又是AbstractButton类的子类,所以控制单选按钮的诸多方法都是
* AbstractButton类中的方法。
* 3:在Swing中存在一个ButtonGroup类,用于产生按钮组。
* 如果希望将所有的单选按钮放置在按钮组中,需要实例化一个JRadioButton对象
* 并且用该对象调用add()方法添加单选按钮
* @author biexiansheng
public class JRadioButtonTest extends JFrame{
private JRadioButton jr1=new JRadioButton();
private JRadioButton jr2=new JRadioButton();
private JRadioButton jr3=new JRadioButton();//初始化单选按钮
//实例化单选按钮组
private ButtonGroup group=new ButtonGroup();
private JPanel jp=new JPanel();//初始化面板
public JRadioButtonTest(){
Container container=getContentPane();//创建一个容器
group.add(jr1);
group.add(jr2);
group.add(jr3);
jp.add(jr1);
jp.add(jr2);
jp.add(jr3);//将单选按钮添加到面板中
container.add(jp);//将面板添加到容器中
//设置容器的特性
setTitle("单选按钮的简单练习");//容器的标题
setVisible(true);//可视化
setSize(200,150);//容器的大小
//设置容器的关闭方式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
public static void main(String[] args) {
// TODO Auto-generated method stub
JRadioButtonTest jb=new JRadioButtonTest();
简单实例运行结果如下
此简例只是简单的描写了如何实现单选按钮,并没有产生反应,仅是案例演示
package com.
import java.awt.C
import java.awt.C
import java.awt.GridL
import javax.swing.ButtonG
import javax.swing.JB
import javax.swing.JCheckB
import javax.swing.JF
import javax.swing.JL
import javax.swing.JP
import javax.swing.JRadioB
import javax.swing.WindowC
public class Test extends JFrame{
private JRadioButton jr1;
private JRadioButton jr2;
private ButtonGroup bg1;
private JCheckBox cb1;
private JCheckBox cb2;
private JCheckBox cb3;
private JLabel jl1;
private JLabel jl2;
private JPanel jp1;
private JPanel jp2;
private JPanel jp3;
private JButton jb1;
private JButton jb2;
public Test(){
Container container=getContentPane();//创建一个容器
cb1=new JCheckBox("篮球");
cb2=new JCheckBox("足球");
cb3=new JCheckBox("排球");
jl1=new JLabel("你喜欢的运动");
jl2=new JLabel("你的性别");
jb1=new JButton("提交");
jb2=new JButton("重置");
jr1=new JRadioButton("男");
jr2=new JRadioButton("女");
bg1=new ButtonGroup();
setLayout(new GridLayout(3, 1));//设置网格布局管理器3行1列
jp1=new JPanel();
jp1.add(jl1);
jp1.add(cb1);//将单选按钮添加到面板上面
jp1.add(cb2);
jp1.add(cb3);
container.add(jp1);
jp2=new JPanel();
jp2.add(jl2);
bg1.add(jr1);//将单选按钮添加到ButtonGroup中
bg1.add(jr2);
jp2.add(jr1);
jp2.add(jr2);
container.add(jp2);
jp3=new JPanel();
jp3.add(jb1);
jp3.add(jb2);
container.add(jp3);
setTitle("按钮的运用");
setSize(400,300);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test();
案例运行结果如下
阅读(...) 评论()热门搜索:
当前位置:
→ java swing常用的9种组件
java swing常用的9种组件
作者:佚名 日期: 14:57:05 [
] 人气: 4824 |
在Java1.0中,已经有一个用于GUI编程的类库AWT(Abstract Window Toolkit),称之为抽象窗口工具箱。遗憾的是,AWT中的组件(例如按钮,类名为Button)在实现中使用了本地代码(Native Code),这些组件的创建和行为是由应用程序所在平台上的本地GUI工具来处理的。因此,AWT组件要在不同的平台上提供给用户一致的行为就受到了很大的限制。同时,AWT组件中还存在很多bug,这就使得使用AWT来开发跨平台的GUI应用程序困难重重。
1996年,SUN公司和Netsacpe公司在一个称为Swing的项目中合作完善了Netsacpe公司原来开发的一套GUI库,也就是现在所谓的Swing组件。Swing组件和原来的AWT组件完全不同,最大的区别就是Swing组件的实现中没有使用本地代码,这样对底层平台的依赖型就大为降低,并且可以给不同平台的用户一致的感觉。此外,和原来的AWT相比,Swing中提供了内容更多、使用更为方便的组件。
在阅读一些书籍时,常会遇到名词JFC(Java&Foundation Class)。JFC的概念是在1997年的JavaOne开发者大会上首次提出的,是指用于构建GUI的一组API。实际上,Swing只是JFC的一部分,其它的还有二维图形(Java 2D)API以及拖放(Drag and Drop)API等等。
Swing并不是完全取代了AWT,Swing只是使用更好的GUI组件(如JButton)代替AWT中相应的GUI组件(如Button),并且增加了一些AWT中原来所没有的GUI组件。并且,Swing仍使用AWT 1.1的事件处理模型。
虽然现在AWT组件仍得到支持,但是建议在你的应用程序中尽量使用Swing组件和1.1的事件模型。
1.标签 (JLabel)
标签 (JLabel)通常是用来标识另外一个组件的含义。以在标签上显示文字、图象或是文字图象的组合。
JLabel labText=new JLabel(&文本标签&);
labText.setText(&文本标签&);
ImageIcon icon = new ImageIcon(&image/greenflag20.gif&);
JLabel labImage=new JLabel(icon);
labImage.setIcon(icon);
2.密码框 (JPasswordField)
密码框实际上是一种特殊类型的文本框,用户可以向其中输入文本并加以编辑。和文本框不同的是,向密码框中输入文本时,显示的不是实际输入的文本,而是特殊的回显字符(通常是'*')。可以使用setEchoChar(char c)方法来改变缺省的回显字符。
需要注意的是,取得文本框中的文本时,使用方法getText(),该方法返回的是一个String类型的对象;而要取得密码框中的文本,使用方法getPassword(),该方法返回的是一个char数组。
例如,创建了一个密码框:
JPasswordField txtPwd=new JPasswrodField(20);
设定该密码框的回显字符为'#':
txtPwd.setEchoChar('#');
取得密码框中的内容:
char []pwd=txtPwd.getPassword();
也可以方便地将char数组转化为String类型的对象:
String pwdStr=new String(txtP.getPassword());
(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);
viewMenu.add(classicItem);
viewMenu.add(modernItem);
//添加到系统设置菜单
menuSysConfig.add(sysConfigItem); //添加菜单选项
menuSysConfig.add(viewMenu); //添加子菜单
menuSysConfig.add(cascadeItem); //添加菜单选项
menuSysConfig.addSeaparator(); //添加分隔线
menuSysConfig.add(iconifyItem); //添加菜单选项
(3)通常的菜单选项是JMenuItem,也可以使用复选框或是单选按钮类型的菜单选项,分别是JCheckBoxMenuItem和JRadioButtonMenuItem。和JRadioButton一样,使用JRadioButtonMenuItem时,需要将它们添加到同一个按钮组中。
(4)当点击一个菜单选项时,会生成一个动作事件(ActionEvent) 。为菜单选项添加事件侦听器就可以侦听其动作事件,例如:sysConfigItem.addActionListener(aListener);
(5)为一个菜单或是菜单选项设置快捷键:
menuSysConfig.setMnemonic('X');
sysConfigItem.setMnemonic('S');
(6)如果需要快速选择未打开的菜单中的菜单选项或是子菜单,可以使用加速键。例如,当希望按下CTRL+L时就立刻选中lockItem菜单选项,而不管lockItem所在的菜单是否已经打开,就可以使用下面的方法为lockItem设置加速键:
KeyStroke ks= KeyStroke.getKeyStroke( KeyEvent.VK_L,InputEvent.CTRL_MASK);
lockItem.setAccelerator(ks);
4.弹出式菜单
(1)弹出式菜单(JPopupMenu)是一种特殊的菜单,和普通菜单的区别在于其不固定在菜单栏中,而是可以四处浮动的。
(2)下面的语句创建了一个弹出式菜单:
JPopupMenu popup=new JPopupMenu();
与向菜单中添加菜单选项、分隔线或是子菜单一样,使用同样的方法向弹出式菜单中添加内容。
用户可以通过点击某个特殊的鼠标键(称为触发器)来触发弹出式菜单。例如,在Windows操作系统上,一般是鼠标右键。
为此,应用程序中应该监听弹出式菜单的父组件的鼠标事件:当有鼠标事件发生时,使用isPopupTrigger()方法来判断是否为弹出式菜单的触发器;如果是,则在该父组件上显示出弹出式菜单。同样以图所示意的弹出式菜单为例,该菜单的父组件是一个显示公司徽标的标签labLogo,当用户在该标签上右击鼠标时,弹出式菜单出现。下面的代码实现了上述功能:
labLogo.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e){
if (e.isPopupTrigger()){
popup.show(labLogo,e.getX(), e.getY());
(1)有些菜单选项的使用频率较高,每次使用都要打开菜单,效率较低。为此,可以在工具条(JToolBar)中提供与这些菜单选项相对应快捷按钮,以提高用户的效率。工具条中通常是一些带有图标的按钮,当然也可以是其它类型的GUI组件,例如组合框等等。
(2)通常,工具条所提供的操作是菜单所能提供操作的一个子集,目的是能够快速访问那些使用频率高的操作。
(3)工具条通常被置于布局为BorderLayout的容器中。工具条被置于布局为BorderLayout的一个面板中。工具条还有一个特点:可以被拖动到所在容器其它边界,甚至脱离其所在的容器。
(4)生成一个工具条对象,可以使用语句:
JToolBar toolbar=new JToolBar();
(5)还可以在生成工具条时,指明工具条的标题。这样,当工具条脱离所在容器时,可以在自己的标题栏显示标题:
JToolBar toolbar=new JToolBar(&颜色工具条&);
(6)向工具条中添加组件,使用add方法:
toolbar.add(btnBlue);
toolbar.add(btnYellow);
(7)缺省情况下,组件是按照水平方式逐个添加入工具条的,也可以在生成工具条时指明以垂直方式来添加组件:
JToolBar toolbar=new JToolBar(SwingConstants.VERTICAL);
(8)如果希望工具条不能移动,可以使用setFloatable方法来设置:
toolbar.setFloatable(false);
(9)当工具条中的按钮上只显示图标时,用户可能不能确切知道各个按钮的具体含义。可以使用工具提示解决这个问题:
btnYellow.setToolTipText(&面板置为黄色&);
(1)对话框是用户和应用程序进行交互(对话)的一个桥梁:对话框可以用于收集用户的输入数据传递给应用程序,或是显示应用程序的运行信息给用户。
(2)对话框分为模式(modal)和非模式两种。模式对话框处于可见状态时,用户将不能与应用程序的其它窗口进行交互,而非模式对话框则没有此限制。
(3)Java中提供了一个类JOptionPane用于创建简单的模式对话框,如果希望创建非模式对话框或是自定义对话框可以使用JDialog。
(4)JOptionPane类中提供了4种静态方法,用以显示4种常用的对话框:
showMessageDialog 消息对话框
showInputDialog 输入对话框
showConfirmDialog 确认对话框
showOptionDialog 选项对话框
(5)JOptionPane 对话框主要由如下几个部分构成:图标、消息以及按钮。
(6)类JOptionPane中定义了如下五个常量:
JOptionPane.QUESTION_MESSAGE
RMATION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.ERROR_MESSAGE
JOptionPane.PLAIN_MESSAGE&& //不使用图标
前四个常量对应着四个图标,第五个常量表示不使用图标。开发人员可以使用这些常量来指定对话框中显示的图标。当然,对话框也提供了方法使得开发人员可以使用自己的图标。
(7)JOptionPane对话框不仅仅可以显示字符串类型的消息,还可以显示其它类型的消息。例如,可以是一副图片、还可以是一个GUI组件。更广泛地说,这里的消息可以是任何类型的对象或是对象数组。在书上的例子中,你可以看到不同类型消息的应用。
(8)JOptionPane对话框底部的按钮取决于对话框类型和选项类型。例如,对于确认对话框,可以使用如下的四种选项类型之一:
DEFAULT_ OPTION
YES_NO_OPTION
YES_NO_CANCEL_OPTION
OK_CANCEL_OPTION
(9)如果设计一个包括两个标签、一个文本输入框、一个密码输入框和两个按钮的登录对话框,这些GUI组件被添加到一个使用了网格袋布局的面板panel中,面板panel又被添加到LoginDialog的内容窗格。类LoginDialog继承了JDialog,先来看一下LoginDialog的构建器:
public LoginDialog(Frame f,String s,boolean b)
该构建器中包含了3个参数,f和s分别是对话框的父窗口和标题,布尔类型的参数b用来确定对话框的类型,当取值为true时,表示是模式对话框;取值为false时,表示是非模式对话框。
(1)表格(JTable)也是一种常用的GUI组件,常用来显示大量的数据。
(2)表格是模型-视图-控制器设计模式的一个典型应用。表格本身并不存储所显示的数据,数据实际上是存储在表模型中的,表格只是表模型的一种视图.
(3)JTable提供了如下两种构建器,可以方便地创建简单表格:
JTable(Object[][] data, Object[] columnNames)
JTable(Vector data, Vector columnNames)
(4)采用上述方法可以发现存在不少缺点:例如,每一列的宽度都是一样的;未能正确显示日期;数值未能按照我们的希望保留到小数点后面两位,并靠右显示;表格中的数据必须预先存放在一个数组中或是向量(Vector)中等等。在一个真正的应用程序中,使用这样的表格是不能满足实际应用的要求的。
(5)在缺省情况下,表格中每列是等宽的,并且调整某列的宽度时,其它列的宽度也会相应自动调整。可以使用下面的语句关闭列宽自动调整特性:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
之后,要设定某列的宽度,首先依据该列的列名取得列对象,以设定第一列宽度为例:
TableColumn col=table.getColumn(columnNames[0]);
然后调用setPreferredWidth方法设定该列宽度:
col.setPreferredWidth(200);
(6)前面已经提到,表格有一个对应的表模型,数据是存储在表模型中,表格是表模型的视图。表格在建立视图时总需要自动调用表模型中的一些方法,这些方法的返回值决定了最终的视图。部分常需要用到的方法的名称和含义如下:
public int getRowCount();//取得行数
public int getColumnCount();//取得列数
public Object getValueAt(int row, int column); //取得指定单元格的数据
//指定单元格是否允许编辑
public boolean isCellEditable(int row, int column);
public String getColumnName(int column); //取得指定列的列名
public Class getColumnClass(int column);
缺省表模型DefaultTableModel提供了上述方法的缺省实现。例如,DefaultTableModel中的isCellEditable方法总是返回true,表示所有的单元格都允许编辑; getColumnClass方法总是返回Object.class.
(7)可以使用DefaultTableModel创建一个表模型对象,然后再使用表模型创建表格,例如:
DefaultTableModel model=new DefaultTableModel(0,5);//0行5列的表模型
JTable table=new JTable(model);
然后,可以使用model的addRow、removeRow方法向表模型中添加或是删除数据,对表模型增删数据的结果会自动反映到表格视图上来。
但是,通常情况下,我们并不直接使用DefaultTableModel。更多的情形是继承DefaultTableModel类,并覆盖其中部分方法以达到特殊的要求.
8.树形控件
(1)JTree构造函数:
A.JTree():建立一棵系统默认的树。
B.JTree(Hashtable value):利用Hashtable建立树,不显示root node(根节点).
C.JTree(Object[] value):利用Object Array建立树,不显示root node.
D.JTree(TreeModel newModel):利用TreeModel建立树。
E.JTree(TreeNode root):利用TreeNode建立树。
F. JTree(TreeNode root,boolean asksAllowsChildren):利用TreeNode建立树,并决定是否允许子节点的存在.
G.JTree(Vector value):利用Vector建立树,不显示root node.
(2)JTree上的每一个节点就代表一个TreeNode对象,TreeNode本身是一个Interface,里面定义了7个有关节点的方法,例如判断是否为树叶节点、有几个子节点(getChildCount())、父节点为何(getparent())等等、这些方法的定义你可以在javax.swing.tree的 package中找到,读者可自行查阅java api文件。
(3)在实际的应用上,一般我们不会直接实作此界面,而是采用java所提供的 DefaultMutableTreeMode类,此类是实作MutableTreeNode界面而来,并提供了其他许多实用的方法。
MutableTreeNode本身也是一个Interface,且继承了TreeNode界面此类主要是定义一些节点的处理方式,例如新增节点(insert())、删除节点(remove())、设置节点(setUserObject())等。整个关系如下图:
TreeNode----extends---&MutableTreeNode---implements---DefaultMutableTreeNode
(4)我们来看如何利DefaultMutableTreeNode来建立JTree,我们先来看DefaultMutableTreeNode的构造函数: DefaultMutableTreeNode构造函数:
DefaultMutableTreeNode():建立空的DefaultMutableTreeNode对象。
DefaultMutableTreeNode(Object userObject):建立DefaultMutableTreeNode对象,节点为userObject对象。
DefaultMutableTreeNode(Object userObject,Boolean allowsChildren):建立DefaultMutableTreeNode对象,节点为userObject对象并决定此节点是否允许具有子节点。
(5)除了以节点的观念(TreeNode)建立树之外,你可以用data model的模式建立树。树的data model称为TreeModel,用此模式的好处是可以触发相关的树事件,来处理树可能产生的一些变动。TreeModel是一个interface,里面定义了8种方法;如果你是一个喜欢自己动手做的人,或是你想显示的数据格式很复杂,你可以考虑直接实作TreeModel界面中所定义的方法来构造出JTree.TreeModel界面的方法如下所示:
TreeModel方法: void addTreeModelListener(TreeModelListener l):增加一个TreeModelListener来监控TreeModelEvent事件。
Object getChild(Object parent,int index):返回子节点。
int getChildCount(Object parent):返回子节点数量.
int getIndexOfChild(Object parent,Object child):返回子节点的索引值。
Object getRoot():返回根节点。
boolean isLeaf(Object node):判断是否为树叶节点。
void removeTreeModelListener(TreeModelListener l):删除TreeModelListener。
void valueForPathChanged(TreePath path,Object newValue):当用户改变Tree上的值时如何应你可以实作出这8种方法,然后构造出自己想要的JTree,不过在大部份的情况下我们通常不会这样做,毕竟要实作出这8种方法不是件很轻松的事,而且java本身也提供了一个默认模式,叫做DefaultTreeModel,这个类已经实作了TreeModel界面,也另外提供许多实用的方法。利用这个默认模式,我们便能很方便的构造出JTree出来了。下面为DefaultTreeModel的构造函数与范例:
DefaultTreeModel构造函数:
DefaultTreeModel(TreeNode root):建立DefaultTreeModel对象,并定出根节点。
DefaultTreeModel(TreeNode root,Boolean asksAllowsChildren):建立具有根节点的DefaultTreeModel对象,并决定此节点是否允许具有子节点。
(6)当树的结构上有任何改变时,例如节点值改变了、新增节点、删除节点等,都会TreeModelEvent事件,要处理这样的事件必须实作TreeModelListener界面,此界面定义了4个方法,如下所示: TreeModelListener方法:
Void treeNodesChanged(TreeModelEvent e):当节点改变时系统就会云调用这个方法。
Void treeNodesInserted(TreeModelEvent e):当新增节时系统就会去调用这个方法。
Void treeNodesRemoved(TreeModeEvent e):当删除节点时系统就会去调用这个方法。
Void treeStructureChanged(TreeModelEvent e):当树结构改变时系统就会去调用这个方法。
(7)TreeModelEvent类本身提供了5个方法,帮我们取得事件的信息,如下所示: TreeModelEvent方法:
int[] getChildIndices():返回子节点群的索引值。
Object[] getChildren():返回子节点群.
Object[] getPath():返回Tree中一条path上(从root nod到leaf node)的节点。
TreePath getTreePath():取得目前位置的Tree
Path. String toString():取得蝗字符串表示法.
(8)由TreeModelEvent的getTreePath()方法就可以得到TreePath对象,此对象就能够让我们知道用户目前正选哪一个节点, TreePath类最常用的方法为: public Object getLastPathComponent():取得最深(内)层的节点。
public int getPathCount():取得此path上共有几个节点.
9.JScrollbar 滚动条
(1)构造函数
mySlider = new JScrollbar(JScrollbar.HORIZONTAL ,
0 , 1 , 0 , Integer.MAX_VALUE);
滚动条方向
滑块初始位置
滚动槽最小值
滚动槽最大值
int getValue()&& 返回滑块当前位置
setUnitIncrement(1); 设置单位增量(点按两端箭头)
setBlockIncrement(50); 设置块增量(点按滚动槽)
11-10? 11-10? 11-10? 11-10? 11-10? 11-08? 11-08? 11-08? 11-08? 11-07?
本类热门阅览
Copyright &
. All Rights Reserved

我要回帖

更多关于 编写程序打印下列图形 的文章

 

随机推荐