第15章 Swing程序开发3.doc_第1页
第15章 Swing程序开发3.doc_第2页
第15章 Swing程序开发3.doc_第3页
第15章 Swing程序开发3.doc_第4页
第15章 Swing程序开发3.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

第15章 Swing程序开发Java的Swing也是Java基础类库的一部分,它是试图解决AWT缺点的一个尝试。Swing是在AWT组件基础上构建的,所有Swing组件实际上也是AWT的一部分。Swing使用了AWT的事件模型和支持类。本章将介绍Swing中一些特殊的、主要的组件,从而来了解Swing组件的用法和实现效果。15.1 Java的AWT和Swing有什么区别15.1.1 问题描述Java的AWT和Swing有什么区别呢?有点学迷糊了,请用通俗的语言解释一下。Swing又比AWT好在哪里呢?15.1.2 解决方法通俗的话:l AWT和Swing都是用来开发图形界面应用的。l AWT是“元老级”的,是Java最早的用于编写GUI的开发包。l Swing是“AWT的升级版”,为了解决AWT存在的问题而新开发的包。与AWT相比,Swing组件能够实现更强的功能,主要反映在以下几个方面:l Swing按钮类和标签类除了显示文本标题外,还可以显示图形标题。l Swing容器可以添加边框。l 通过Swing组件的方法可以改变其外观和行为。Swing组件可以自动适应操作系统的外观,而AWT组件总是保持相同的外观。l Swing组件可以设计成圆形,而不一定是矩形。l 不能在Swing的顶层容器中直接加入组件,而要先获得容器,再在容器中添加组件。所以现在应用中的情况是:主要用Swing来开发Java桌面程序,但是在开发这种程序的时候也离不开AWT,例如AWT里面的事件类会经常被用到。15.1.3 知识扩展使用Swing组件编写GUI的层次结构Swing组件是用纯Java语言编写而成的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。在Swing中不但使用轻量级的组件替代了AWT中的重量级的组件,而且Swing的组件中都包含有一些其他的特性。例如,Swing按钮可以显示图标和文本,而AWT按钮只能显示文本。Swing中的大多数组件都是AWT组件名称前面加了一个J字母,即Swing组件是围绕着一个称为JComponent的新组件类构建的。 JComponent类层次结构图JComponent是一个抽象类,用于定义所有子类组件的一般方法,多数Swing组件的父类为javax.swing.JComponent,其类层次结构如图15-1所示。图15-1 JComponent类层次结构图因为JComponent类继承于Container类,所以凡是此类的Swing组件不管是基本组件还是容器,都可以作为容器使用。 Swing包Swing工具包由许多包组成,通过这些包中的类相互协作来完成GUI设计。对这些包的描述如表15-1所示。表15-1 Swing包包名称描述javax.swing提供一组“轻量级”组件,尽量让这些组件在所有平台上的工作方式都相同javax.swing.border提供围绕Swing组件绘制特殊边框的类和接口javax.swing.colorchooser包含供JColorChooser组件使用的类和接口javax.swing.event供Swing组件触发的事件使用javax.swing.filechooser包含JFileChooser组件使用的类和接口javax.swing.plaf提供一个接口和许多抽象类,Swing用它们来提供自己的可插入外观功能javax.swing.plaf.basic提供了根据基本外观构建的用户界面对象javax.swing.table提供用于处理javax.swing.JTable的类和接口javax.swing.text提供类HTMLEditorKit和创建HTML文本编辑器的支持类javax.swing.text.html提供类HTMLEditorKit和创建HTML文本编辑器的支持类javax.swing.text.html.parser提供默认的HTML解析器以及支持类javax.swing.text.rtf提供一个RTFEditorKit类,用于创建富文本格式(Rich-Text-Format)的文本编辑器javax.swing.tree提供处理javax.swing.JTree的类和接口javax.swing.undo允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持javax.swing包是Swing提供的最大包,几乎所有Swing组件都在该包中。但是JTableHeader和JTextComponent是例外,分别在javax.swing.table包和javax.swing.text包中。 组件的分类Swing是AWT的扩展,它提供了许多新的图形界面组件。Swing组件的分类如下:1顶层容器(top-level containers)Swing的顶层容器有3个:JFrame、JDialog和JApplet。2中间层容器(intermediate swing containers)有些Swing组件是被设计专门来承装别的组件用的,作为一种容器,让被承装的组件能合适地、有组织地被显示出来,这些组件容器是介于顶层容器与基本组件之间的,被称为中间层容器。这些Swing组件包括:JMenuBar、JOptionPane、JRootPane、JLayeredPane、JPanel、JInternalFrame、JScrollPane、JSplitPane、JTabbedPane、JToolBar、JDeskTopPane、JViewPort、JEditorPane和JTextPane。3基本组件(atomic components)除了顶层与中间容器外,其余的Swing组件,根据其功能又可以分为下面3种:l 用来获取用户输入 JButton、JRadioButton、JTogleButton、JCheckBox、JComboBox、以及JList、JMenu、JSlider、JTextField、JPopupMenu、JTextArea和JPassWordField。l 用来显示信息 JLabel、JProgressBar和JToolTip。l 提供格式化信息 JColorChooser、JFileChooser、JTable和JTree。Swing组件的体系结构如图15-2所示。图15-2 Swing组件的类层次结构从图中可以看出,并非所有J类都是JComponent的子类,如常用的JFrame、JApplet、JDialog。Swing组件在构造布局管理器、事件处理等方面与AWT相似,只是内容更为丰富。15.1.4 触类旁通重量级是什么意思?网络课堂:/thread-1389-1-1.html问:Java里说Swing和AWT是不同重量级的,这里的重量级是什么意思?还有一个轻量级?答:轻量级对应的内容简单,相对而言功能少。重量级复杂,相对而言功能多。一般而言轻量级运行时占用资源少,不需要特定的容器,缺点则是执行速度较慢,而重量级相反。大部分Swing组件经常被描述为轻量级的,独立于本地平台的Swing组件被称为轻量级组件,而依赖于本地平台的AWT组件被称为重量级组件。15.1.5 网络课堂视频教学:网络课堂:/thread-1388-1-1.html15.2 如何为JFrame设置背景图片15.2.1 问题描述我使用JFrame中画了个时钟表,不过太难看了,俗话说:马靠鞍装,人靠衣装。呵呵,我也想给JFrame“穿”上“漂亮的衣服”,加个好看的背景图片。但是不知道该怎么去实现,不会了,谁可以指点我一下啊?15.2.2 解决方法Swing组件最大的一个优点就是支持图片,所以,我们在使用时,都要尽量发挥这个优点,给它们“穿上漂亮的衣服”。为JFrame窗口添加背景图片,离不开ImageIcon类,使用这个类对象来指定一个图片,然后调用Graphics类和drawImage()方法,如下:ImageIcon icon = new ImageIcon(F:19.jpg);/ 定义一个图片对象JPanel panel = new JPanel() / 创建JPanel面板protected void paintComponent(Graphics g) super.paintComponent(g);g.drawImage(icon.getImage(), 0, 0, null);/ 构建图片;这里,是对一个JPanel对象进行背景图片的设置,你将这个JPanel添加到JFrame窗口的面板上就可以啦。15.2.3 知识扩展窗口和面板在Swing中,有3种可以使用的顶层容器,它们分别是:JFrame、JDialog和JApplet。每一个GUI组件都需要被包含在一个顶层容器中。其中,JApplet是用来设计可以嵌入到网页中的Java小程序,现在很少被使用了。 JFrame窗口JFrame类继承了AWT的Frame类,支持Swing体系结构的高级GUI属性。JFrame用来设计类似于Windows系统中的窗口形式的界面。程序通常至少有一个框架窗口,应用程序的主类通常扩展JFrame。Applet和应用程序可以打开另外的框架窗口。默认情况下,JFrame对象的布局管理器是BorderLayout对象。JFrame类常用的构造方法和常用方法分别如表15-2和表15-3所示。表15-2 JFrame类常用的构造方法构造方法说明JFrame()创建一个不含标题的窗口JFrame(String title)创建一个标题显示为title字符串的窗口表15-3 JFrame类的常用方法方法名及返回值类型说明Container getContentPane()返回此窗体的contentPane对象int getDefaultCloseOperation()返回用户单击窗体的“关闭”按钮时执行的操作void remove(Component comp)从该容器中移除指定组件void setContentPane(Container contentPane)设置contentPane属性void setDefaultCloseOperation(int operation)设置用户在此窗体上单击“关闭”按钮时默认执行的操作void setDefaultLookAndFeelDecorated(boolean defaultLookFeelDecorated)创建的JFrame是否应该具有当前外观为其提供的Window装饰(如边框、标题等)的提示void setIconImage(Image image)设置要作为此窗口图标显示的图像void setJMenuBar(JMenuBar menubar)设置此窗体的菜单栏void setLayout(LayoutManager manager)设置布局管理器例如,创建一个JFrame窗体对象,然后调用JFrame类的方法,例如setDefaultCloseOperation()方法,实现关闭窗体退出应用程序。如下:JFrame.setDefaultLookAndFeelDecorated(true);/ 使用默认外观JFrame jf = new JFrame(JFrame投票);/ 创建一个JFrame对象jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 实现关闭窗口Container contentPane = jf.getContentPane();/ 获得窗口的面板jf.pack();/ 窗口自动调整大小jf.setVisible(true); / 设置窗口可见 JPanel面板组件是构成应用程序界面的基本元素,JPanel组件属于容器型组件,可以在JPanel中放置按钮、文本框等非容器组件,也可以在JPanel中再放置若干个JPanel组件。一般情况下,JPanel类使用其父类中的方法就可以完成编程任务。如果需要向JPanel面板中添加组件,可以使用add(Component comp)方法来实现。例如,创建一个JPanel面板对象jp,为这个面板设置边框颜色、边框粗细和面板布局形式,如下:JPanel jp = new JPanel();jp.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5);/ 设置边框颜色及粗细jp.setLayout(new GridLayout(2, 1);/ 设置面板的布局形式下面创建一个JLabel标签和一个JButton按钮,然后将这两个组件添加到JPanel对象上,如下:JLabel jl = new JLabel(当前票数:100, SwingConstants.CENTER);JButton jb = new JButton(单击按钮进行投票);jp.add(jl);jp.add(jb);接下来将JPanel对象添加到JFrame面板对象contentPane上,语句如下:contentPane.add(jp);JFrame窗口及JPanel对象的显示结果如图15-3所示。图15-3 使用JFrame和JPanel从上图中可以看出,Swing程序的显示结果要比AWT程序的显示结果要美观、功能更强。15.2.4 触类旁通 怎样让一个JFrame在屏幕上居中显示怎样让一个JFrame在屏幕上居中显示网络课堂:/thread-1511-1-1.html问:怎样让一个JFrame在屏幕上居中显示?答:使用Toolkit.getDefaultToolkit().getScreenSize()获得屏幕的宽和高,然后屏幕宽减去JFrame的宽后除以2,屏幕高减去JFrame的高后除以2,将得到的这两个商值设置为JFrame的位置就可以啦。代码如下:JFrame.setDefaultLookAndFeelDecorated(true);JFrame jf = new JFrame();jf.setSize(400, 300);double width = Toolkit.getDefaultToolkit().getScreenSize().getWidth();double height = Toolkit.getDefaultToolkit().getScreenSize().getHeight();jf.setLocation(int)(width - this.getWidth() / 2, (int)(height - this.getHeight() / 2);jf.setVisible(true); 能不能修改JFrame窗口的咖啡图标能不能修改JFrame窗口的咖啡图标网络课堂:/thread-1512-1-1.html问:能不能把JFrame中的那个小小的咖啡图标给改为其它图案?可否给出具体的代码?答:使用JFrame对象调用getToolkit()方法的getImage()方法进行设置,代码如下:JFrame jf = new JFrame();jf.setIconImage(jf.getToolkit().getImage(F:19.jpg);15.2.5 网络课堂视频教学:网络课堂:/thread-1510-1-1.html15.3 如何设置按钮边框和标签之间的空白15.3.1 问题描述最近在项目中使用JButton弄的我“悲喜交加”,喜的是可以为JButton设置背景图片;悲的是无论放多大的图片都把按钮覆盖不完,按钮边框和图片之间总有一片空白。请教高手,能解决不?15.3.2 解决方法呵呵,你可不要为这一点而悲伤过度啊,给你介绍一个方法,保管你转悲为乐。这个方法为setMargin(),是AbstractButton类中的,专门用来设置按钮边框和标签或图片之间的空白。如下:public void setMargin(Insets m);例如,对JButton按钮jb进行设置,如下:jb.setMargin(new Insets(0, 0, 0, 0);对Insets()方法中的各个参数值都设置为0,那么就不会有JButton的空白区域啦。15.3.3 知识扩展Swing按钮所有的按钮都继承自AbstractButton类,图15-4显示了按钮类的层次结构。从图中可以看出,按钮包括:普通按钮(JButton)、触发器按钮(JToggleButton)和菜单项(JMenuItem)按钮。图15-4 按钮类的层次结构其中,触发器按钮包括两类:复选框(JCheckBox)和单选按钮(JRadioButton),对于普通按钮中,有一种常用的按钮为箭头按钮(BasicArrowButton)。与AWT中的Button按钮相比,Swing按钮还可以实现以下效果:根据Swing按钮所处的状态设置不同的图标;为按钮添加提示信息;设置按钮对应的快捷键。 Swing按钮类的方法JButton按钮常用的构造方法如表15-4所示。表15-4 JButton按钮的构造方法构造方法说明JButton()创建一个无标签文本、无图标的按钮JButton(Icon icon)创建一个无标签文本、有图标的按钮JButton(String text)创建一个有标签文本、无图标的按钮JButton(String text , Icon icon)创建一个有标签文本、有图标的按钮AbstractButton类的常用方法如表15-5所示。表15-5 AbstractButton类的常用方法方法名及返回值类型说明addActionListener(ActionListener listener)为按钮组件注册ActionListener监听void setIcon(Icon icon)设置按钮的默认图标void setText(String text)设置按钮的文本void setMargin(Insets m)设置按钮边框和标签之间的空白void setMnemonic(int nmemonic)设置按钮的键盘快捷键。所设置的快捷键,在实际操作时,需要结合ALT键进行实现void setPressedIcon(Icon icon)设置按下按钮时的图标void setSelectedIcon(Icon icon)设置选择按钮时的图标void setRolloverIcon(Icon icon)设置鼠标移动到按钮区域时的图标void setDisabledIcon(Icon icon)设置按钮无效状态下的图标void setVerticalAlignment(int alig)设置图标和文本的垂直对齐方式void setHorizontalAlignment(int alig)设置图标和文本的水平对齐方式void setEnable(boolean flag)启用(或禁用)按钮void setVerticalTextPosition(int textPosition)设置文本相对于图标的垂直位置void setHorizontalTextPosition(int textPosition)设置文本相对于图标的水平位置 使用Swing按钮示例例如,使用JButton类的构造方法创建两个普通的按钮,如下:JButton ok = new JButton(确定);JButton cancel = new JButton(取消);下面对这两个按钮进行一些设置。当鼠标移动到ok按钮上时,提示可以使用快捷键ALT+Enter实现单击该按钮;给cancel按钮的快捷键是ALT+C。如下:ok.setToolTipText(按ALT+Enter);ok.setMnemonic(KeyEvent.VK_ENTER);cancel.setMnemonic(c);为JButton按钮可以设置图标。图标是固定大小的图像,通常很小,用于点缀组件。图标可以通过ImageIcon类从图像文件中获得。例如,从文件girl.gif中加载图标,来创建一个JButton按钮,如下:ImageIcon icon = new ImageIcon(getClass().getResource(girl.gif);JButton b1 = new JButton(icon);b1.setMargin(new Insets(1, 1, 1, 1);使用ImageIcon类创建图片对象,指定图片位置时,可以使用完整路径的方式,例如F:picgirl.gif;也可以将图片放在Java类的.class目录下,使用getClass().getResource(girl.gif)的形式。使用JCheckBox创建一组复选框,用来表示用户的爱好,并设置其中的一个复选项默认被选中。如下:JCheckBox cb1 = new JCheckBox (唱歌, true);JCheckBox cb2 = new JCheckBox (画画);JCheckBox cb3 = new JCheckBox (旅游);使用JRadioButton创建一组单选按钮,用来表示用户的性别,并设置其中的一个单选项默认被选中。如下:JRadioButton jrb1 = new JRadioButton(男);JRadioButton jrb2 = new JRadioButton(女, true);JRadioButton jrb3 = new JRadioButton(不确定);ButtonGroup group = new ButtonGroup();group.add(jrb1);group.add(jrb2);group.add(jrb3);使用JRadioButton创建的一组单选按钮,要放入到一个ButtonGroup组中,才能实现单选的效果。使用BasicArrowButton类创建一组箭头按钮,箭头的方向分别指向北、南、西和东。如下:BasicArrowButton up = new BasicArrowButton(BasicArrowButton.NORTH);BasicArrowButton down = new BasicArrowButton(BasicArrowButton.SOUTH);BasicArrowButton right = new BasicArrowButton(BasicArrowButton.WEST);BasicArrowButton left = new BasicArrowButton(BasicArrowButton.EAST);这些按钮组件的最终显示结果如图15-5所示。图15-5 使用Swing按钮15.3.4 触类旁通 JButton按钮如何响应回车事件JButton按钮如何响应回车事件网络课堂:/thread-1521-1-1.html问:在一个登录窗口中,输入用户名和密码后,我们都会习惯性的按下回车,来表示单击【确定】按钮提交信息,这时JButton按钮对回车事件如何实现啊?答:首先对按钮添加KeyTyped事件,在事件处理方法中对KeyEvent进行判断。由于使用setMnemonic(KeyEvent.VK_ENTER)方法,实现的是ALT+Enter组合键,所以与“n”回车进行比较。例如:JButton ok = new JButton(登录);ok.addKeyListener(this);private void KeyTyped(java.awt.event.KeyEvent evt) if(evt.getKeyChar() = n)System.out.println(回车); 如何使选中的JRadioButton变成未选中如何使选中的JRadioButton变成未选中网络课堂:/thread-1522-1-1.html问:Java中单击按钮使选中的JRadioButton变成未选中,怎么实现?答:有一个比较直接的方法:也就是使焦点选中另外一个单选按钮。假设JradioButton单选按钮对象为radGolfNo和radGolfYes,在单击按钮的事件中使用代码如下:radGolfNo.setSelected(false);radGolfYes.setSelected(true); 怎样在JLabel上添加JButton怎样在JLabel上添加JButton?网络课堂:/thread-1523-1-1.html问:我只是想将JButton显示在图片上。就将JLabel设置了背景图片icon,再将JLabel放入JPanel,之后我将JButton放入JPanel想叠加在JLabel上面可以吗?答:可以啊,使用代码实现这个步骤就可以了。但是其中有很多要注意的语句,少了哪一句,图片就显示不了。示例语句如下:JPanel jp = (JPanel) this.getContentPane(); / 从JFrame里创建一个JPaneljp.setOpaque(false); / JPanel透明模式ImageIcon img = new ImageIcon(F:8.gif);/ 创建一个图片路径JLabel jl = new JLabel(img);/ 创建带背景图片的JLabelthis.getLayeredPane().add(jl, new Integer(Integer.MIN_VALUE);jl.setBounds(0, 0, img.getIconWidth(), img.getIconHeight();/ 设置JLabel的位置和宽高jp.setLayout(new FlowLayout();JButton jb = new JButton(按钮);jp.add(jb);/ 向JPanel上添加JButton按钮15.3.5 网络课堂视频教学:网络课堂:/thread-1515-1-1.html15.4 JTabbedPane标签文字的显示问题15.4.1 问题描述使用Java中的JTabbedPane时,我想让标签在左边显示,并且标签上的文字是从上到下纵向排列的。就像下面这样:标签1试过在每个字中间加“n”,但是没用,它直接无视我的换行。请问有谁知道怎么实现啊?15.4.2 解决方法呵呵,要让标签在左边显示,需要使用JTabbedPane.LEFT属性值。如下:JTabbedPane tabbedPane = new JTabbedPane();tabbedPane.setTabPlacement(JTabbedPane.LEFT);它“无视你的换行”,你就放弃它呗。然后试下“标签1”,如下:tabbedPane.addTab(标签1, null, panel1);15.4.3 知识扩展JTabbedPane页签面板JTabbedPane表示页签面板,它可以包含多个页面,每个页面和一个标签相对应。当用户选择特定的标签后,就会显示相应的页面,在一组组件之间进行切换,并且会触发一个ChangeEvent事件,该事件由ChangeListener监听器响应。 JTabbedPane属性和方法JTabbedPane类常用的属性、构造方法和常用方法分别如表15-6、表15-7和表15-8所示。表15-6 JTabbedPane类的属性属性类别属性值说明选项卡布局JTabbedPane.TOP默认值,标签放在容器顶部JTabbedPane.BOTTOM标签放在容器底部JTabbedPane.LEFT标签放在容器左边JTabbedPane.RIGHT标签放在容器右边页签布局策略JTabbedPane.WRAP_TAB_LAYOUT默认值,表示在容器中显示所有标签。如果在一排内不能容纳所有标签,将其他标签换行显示JTabbedPane.SCROLL_TAB_LAYOUT只显示一排标签,其他标签可通过滚动图标显示表15-7 JTabbedPane类常用的构造方法构造方法说明JTabbedPane()创建一个具有默认属性值的页签面板JTabbedPane(int tabPlacement)创建一个空的页签面板,tabPlacement必须是选项卡布局对应的属性值中的一个JTabbedPane(int tabPlacement, int tabLayoutPolicy)创建可以指定选项卡布局和页签布局策略的页签面板。tabLayoutPolicy值必须是页签布局策略属性值中的一个表15-8 JTabbedPane类常用的方法方法名及返回值类型说明Component add(Component comp, int index)在指定的选项卡索引位置添加一个组件。也可以不指定index参数Component add(String title, Componennt comp)添加具有指定选项卡标题的组件Component getComponentAt(int index)返回index位置的组件int getSelectedIndex()返回当前选择的此选项卡窗格的索引int getTabComponentAt(int index)返回index位置上的选项卡组件int getTabCount()返回此页签面板上的选项卡数void addTab(String title, Component comp)添加一个由title表示,且没有图标的组件void addTab(String title, Icon icon, Component comp)添加一个由title标题和图标的组件void remove(Component comp)移除指定的组件void remove(int index)移除指定索引对应的组件void removeAll()移除所有的选项卡和组件void removeTabAt(int index)移除index索引位置的选项卡void setTabComponentAt(int index, Component comp)设置显示指定选项卡标题的组件void setTabLayoutPolicy(int tabLayoutPolicy)设置页签布局策略void setTabPlacement(int tabPlacement)设置选项卡布局void setBackgroundAt(int index, Color color)为index位置的选项卡进行背景色的设置void setComponentAt(int index, Component comp)将index索引位置的组件设置成compvoid setEnabledAt(int index, boolean flag)设置是否启用index索引位置的选项卡void setTitleAt(int index, String title)将index索引位置的标题设置为title 使用JTabbedPane示例例如,使用JTabbedPane类的构造方法创建一个页签面板,对象名为tabbedPane。并且为该页签面板设置标签位置在顶部显示。如下:JTabbedPane tabbedPane = new JTabbedPane();tabbedPane.setTabPlacement(JTabbedPane.TOP);/ 设置标签置位置创建一个包含有背景图片的JLabel标签label1,然后将label1添加到一个JPanel面板panel1上,用来为页签面板设置背景,如下:JLabel label1 = new JLabel(new ImageIcon(F:backgrounduse7803.jpg);JPanel panel1 = new JPanel();panel1.add(label1);使用addTab()方法,向页签面板上添加组件panel1,指定选项卡的标题为“信息录入”,并且为该选项卡设置一个图标ImageIcon。如下:ImageIcon in = new ImageIcon(F:background/use/830.png);tabbedPane.addTab(信息录入, in, panel1);使用同样的语句形式,再创建JLabel标签对象label2和label3,以及JPanel面板对象panel2和panel3。使用addTab()方法将panel2和panel3也添加进来。根据需要,对各个面板和标签再进行设置,例如,使用setEnabledAt()方法,将索引值为2的标签设置为不可用状态,语句如下:tabbedPane.setEnabledAt(2, false);/ 设Label 3标签为不可用状态这里,所创建的这个JTabbedPane页签面板,就包含了3个选项卡。其中,使用JTabbedPane.TOP,设置标签位置在顶部;如果使用JTabbedPane.BOTTOM,则标签显示在底部;如果使用JTabbedPane.LEFT,则标签显示在左边。示例效果如图15-6所示。图15-6 使用JTabbedPane15.4.4 触类旁通怎么在JTabbedpane组件中添加多个其他组件?网络课堂:/thread-1525-1-1.html问:我想在JTabbedPane组件中的一个页中添加多个其他组件。例如,在JTabbedPane的第一页中添加一个密码框和一个按钮这两个组件。希望高人给帮帮忙!答:这里你应该转变一下思路,密码框和按钮组件可以添加到一个JPanel上,这个JPanel再添加到JTabbedPane上,不就是这个结果吗?代码如下:JTabbedPane pane = new JTabbedPane();/ JTabbedPane组件paneJPanel panel = new JPanel();/ JPanel对象panelJPasswordField jpf = new JPasswordField(16);JButton button = new JButton(按钮);panel.add(jpf);/ 将密码框和按钮添加到JPanel上panel.add(button);pane.add(panel);/ 将JPanel添加到pane上15.4.5 网络课堂视频教学:网络课堂:/thread-1524-1-1.html15.5 JTable的表头为什么不显示15.5.1 问题描述我使用表模型和JTable创建一个表格,遇到了一个怪现象,明明设置了表头,但就是不显示?莫非它使用了什么隐身法,还是我得罪了它不成?看下我的代码:String field=姓名, 语文, 数学, 英语;/ 这里是增加表头Object data=王小红, 88, 95, 91; DefaultTableModel mod=new DefaultTableModel(data, field);JTable jTable1 = new JTable(mod);this.getContentPane().add(jTable1);15.5.2 解决方法它有“隐身法”,我有“魔法棒”,一点就给我现身。而这一点就是:使用JScrollPane滚动面板。JTable通常要加到JScrollPane中才能显示带滚动条的表格,如果不加到JScrollPane中,默认不显示表头。将JTable添加到JScrollPane上之后,再将JScrollPane添加到JFrame的面板上,表头就会显示啦。语句:JScrollPane pane = new JScrollPane(jTable1);不信,你试试!15.5.3 知识扩展JTable表格表格组件(JTable)以行和列的形式显示大量数据,允许对表格中的数据进行编辑。表格的模型功能强大、灵活并易于执行。JTable类的常用构造方法如表15-9所示:表15-9 JTable常用的构造方法构造方法说明JTable()构造一个默认的JTable,使用默认的数据模型、默认的列模型和默认的选择模型对其进行初始化JTable(int numRows, int numColumns)使用默认数据模型构造具有numRows行和numColumns列个空单元格的JTableJTable(ObjectrowData, Object columnNames)构造一个JTable来显示二维数组rowData中的值,其列名称由数组columnNames提供虽然Swing的表格组件(JTable)在javax.swing包中,但它的支持类却在javax.swing.table包中。表格模型、图形绘制类和编辑器等都在javax.swing.table包中。例如,使用JTable类的构造方法创建一个表格,并且为表格设置表头和表格的数据,如下:Object columnNames = 姓名, 性别, 家庭地址, 电话号码, 生日;Object rowData = 李四, 女, 南京市, 01/01/1985, , ;JTable tab = new JTable (rowData, columnNames);然后调用相应的方法对表格进行设置,所设置的内容包括对表格的行的高度进行设置。如下:tab.setPreferredScrollableViewportSize(new Dimension(600, 100);/ 设置表格的大小tab.setRowHeight(30);/ 设置每行的高度为30tab.setRowHeight(0, 20);/ 设置第1行的高度为20tab.setRowMargin(5);/ 设置相邻两行单元格的距离下面对表格进行一些颜色设置,例如表格的背景颜色、行的背景颜色、网格线的颜色等,如下:tab.setBackground (new Color(180, 225, 225);/ 设置表格背景颜色tab.setSelectionBackground(Color.white);/ 设置所选择行的背景色tab.setSelectionForeground(Color.red);/ 设置所选择行的前景色tab.setShowGrid(true);/ 是否显示网格线tab.setShowHorizontalLines(true);/ 是否显示水平的网格线tab.setShowVerticalLines(true);/ 是否显示垂直的网格线tab.setGridColor (Color.black);/ 设置网格线的颜色另外对表格进行其他的设置,例如设置表格是否允许列的宽度的调整、是否可以被选中等。如下:tab.setRowSelectionAllowed(true);/ 设置可否被选择.默认为falsetab.getTabl

温馨提示

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

评论

0/150

提交评论