当前位置:文档之家› swing宝典

swing宝典

swing宝典
swing宝典

UI组件简介

在开始学习 Swing 之前,必须回答针对真正初学者的一个问题:什么是 UI?初学者的答案是“用户界面”。但是因为本教程的目标是要保证您不再只是个初学者,所以我们需要比这个定义更高级的定义。

所以,我再次提出这个问题:什么是 UI?您可能把它定义成您按下的按钮、打字的地址栏、打开和关闭的窗口,等等,这些都是 UI 的元素,但是除了在屏幕上看到的这些之外,还有更多都是 UI 元素。比如鼠标、键盘、音量、屏幕颜色、使用的字体,以及一个对象相对于另一个对象的位置,这些都包含在 UI 之中。实际上,在计算机和用户的交互之中扮演角色的任何对象都是 UI 的组成部分。这看起来足够简单,但是您应当惊讶的是,有许多人和大型公司已经为它努力了很多年。实际上,现在有的大学专业的惟一课程就是研究这种交互。

Swing的角色

Swing 是Java 平台的UI ——它充当处理用户和计算机之间全部交互的软件。它实际上充当用户和计算机内部之间的中间人。Swing 到底是如何做这项工作的呢?它提供了处理前面一节中描述的UI 各方面内容的机制:

?键盘:Swing 提供了捕捉用户输入的方法。

?颜色:Swing 提供改变在屏幕上看到的颜色的方法。

?打字的地址栏:Swing 提供了文本组件,处理所有普通任务。

?音量:Swing 不太擅长。

无论如何,Swing 为您提供了创建自己的UI 所需要的所有工具

MVC

Swing 甚至走得更远一步,在基本的 UI 原则之上又放上了一个公共的设计模式。这个设计模式叫做模型-视图-控制器(Model-View-Controller,MVC),它试图“把角色分开”。MVC 让负责显示的代码、处理数据的代码、对交互进行响应并驱动变化的代码彼此分离。

有点迷惑?如果我为这个设计模式提供一个现实世界的非技术性示例,它就比较容易了。请想像一次时装秀。把秀场当成 UI,假设服装就是数据,是展示给用户的计算机信息。现在,假设这次时装秀中只有一个人。这个人设计服装、修改服装、同时还在 T 台上展示这些服装。这看起来可不是一个构造良好的或有效率的设计。

现在,假设同样的时装秀采用 MVC 设计模式。这次不是一个人做每件事,而是将角色分开。时装模特(不要与 MVC 缩写中的模型混淆)展示服装。他们扮演的角色是视图。他们知道展示服装(数据的)适当方法,但是根本不知道如何创建或设计服装。另一方面,时装设计师充当控制器。时装设计师对于如何在 T 台上走秀没有概念,但他能创建和操纵服装。时装模特和设计师都能独立地处理服装,但都有自己的专业领域。

这就是 MVC 设计模式背后的概念:让 UI 的每个方面处理它擅长的工作。如果您仍然不明白,那么教程后面的示例有望消除您的迷惑——但是在您继续进行的时候,请记住基本的原则:用可视组件显示数据,同时让其他类操纵数据。

JComponent

Swing 的整个可视组件库的基础构造块是JComponent。它是所有组件的父类。它是一个抽象类,所以不能创建JComponent,但是作为类层次结构的结果,从字面意义来说它包含了数百个函数,Swing 中的每个组件都可以使用这些函数。显然,有些概念要比其他概念重要,所以对于本教程,需要学习的重要的东西是:

?JComponent 不仅是Swing 组件的基类,还是定制组件的基类(有关的更多信息在“中级Swing”教程中)。

?它为所有组件提供了绘制的基础架构——一些方便进行组件定制的东西(同样,在“中级Swing”中,有关于这个主题的更多信息)。

?它知道如何处理所有的键盘按键。所以类只需要侦听特定的键。

?它包含add() 方法,可以添加其他JComponent。换种方式来看,可以把任意Swing 组件添加到其他任何Swing 组件,从而构造嵌套组件(例如,JPanel 包含JButton,甚至包含一些古怪的组合,例如JMenu 包含JButton)。

简单的swing小部件

JLabel

Swing 库中最基础的组件是JLabel。它所做的正是您所期望的:呆在那儿,看起来很漂亮,描述其他组件。下图显示了的JLabel 实际应用:

JLabel

不太吸引人,但是仍然有用。实际上,在整个应用程序中,不仅把JLabel 用作文本描述,还将它用作图片描述。每当在Swing 应用程序中看到图片的时候,它就有可能是JLabel。JLabel 对于Swing 初学者来说没有许多意料之外的方法。基本的方法包括设置文本、图片、对齐以及标签描述的其他组件:

?get/setText():获取/设置标签的文本。

?get/seticon():获取/设置标签的图片。

?get/setHorizontalAlignment():获取/设置文本的水平位置。

?get/setVerticalAlignment():获取/设置文本的垂直位置。

?get/setDisplayedMnemonic():获取/设置标签的访问键(下划线文字)。

?get/setLableFor():获取/设置这个标签附着的组件,所以当用户按下Alt+访问键时,焦点转移到指定的组件。

JButton

Swing 中的基本动作组件JButton,是与每个窗口中都能看到的OK 和Cancel 一样的按钮;这些按钮所做的正是您希望它们做的工作——在单击它们之后,将发生一些事情。到底会发生什么呢?您必须定义发生的内容(请参阅事件,以获得更多信息)。一个JButton 实例看起来如下所示:

JButton

用来改变JButton 属性的方法与JLabel 的方法类似(您可能发现,在大多数Swing 组件中,这些属性都类似)。它们控制文本、图片和方向:

?get/setText():获取/设置标签的文本。

?get/seticon():获取/设置标签的图片。

?get/setHorizontalAlignment():获取/设置文本的水平位置。

?get/setVerticalAlignment():获取/设置文本的垂直位置。

?get/setDisplayedMnemonic():获取/设置访问键(下划线字符),与Alt 按钮组合时,造成按钮单击。

除了这些方法,我还要介绍JButton 包含的另外一组方法。这些方法利用了按钮的所有不同状态。状态是对组件进行描述的一个属性,通常采用真/假设置。在JButton 中,可以包含以下可能状态:活动/不活动、选中/没选中、鼠标经过/鼠标离开、按下/没按下,等等。另外,可以组合这些状态,例如按钮可以在鼠标经过的同时被选中。现在您可能会问自己用这些状态到底要做什么。作为示例,请看看您的浏览器上的后退按钮。请注意在鼠标经过它的时候,图片是如何变化的,在按下该按钮时,图片又是如何变化的。这个按钮利用了不同的状态。每个状态采用不同的图片,这是提示用户交互正在进行的一种普遍并且有效的方式。JButton 上的状态方法是:

?get/setDisabledIcon()

?get/setDisableSelectedIcon()

?get/setIcon()

?get/setPressedIcon()

?get/setRolloverIcon()

?get/setRolloverSelectedIcon()

?get/setSelectedIcon()

JTextField

Swing 中的基本文本组件是 JTextField,它允许用户在 UI 中输入文本。我肯定您熟悉文本字段:要掌握本教程,则必须使用一个文本字段输入用户名和口令。您输入文本、删除文本、选中文本、把文字四处移动—— Swing 替您负责所有这些工作。作为 UI 开发人员,利

用 JJTextField 时,实际上并不需要做什么。

在任何情况下,这是 JTextField 实际使用时看起来的样子:

JTextField

在处理 JTextField 时,只需要关注一个方法——这应当是很明显的,这个方法就是设置文本的方法:get/setText(),用于获取/设置 JTextField 中的文本。

JFrame

迄今为止,我介绍了Swing 的三个基本构造块:标签、按钮和文本字段;但是现在需要个地方放它们,希望用户知道如何处理它们。JFrame 类就是做这个的——它是一个容器,允许您把其他组件添加到它里面,把它们组织起来,并把它们呈现给用户。它有许多其他好处,但是我认为先看看它的图片最简单:

JFrame

JFrame 实际上不仅仅让您把组件放入其中并呈现给用户。比起它表面上的简单性,它实际上是Swing 包中最复杂的组件。为了最大程度地简化组件,在独立于操作系统的Swing 组件与实际运行这些组件的操作系统之间,JFrame 起着桥梁的作用。JFrame 在本机操作系统中是以窗口的形式注册的,这么做之后,就可以得到许多熟悉的操作系统窗口的特性:最小化/最大化、改变大小、移动。但是对于本教程的目标来说,把JFrame 当作放置组件的调色板就足够了。可以在JFrame 上调用的一些修改属性的方法是:

?get/setTitle():获取/设置帧的标题。

?get/setState():获取/设置帧的最小化、最大化等状态。

?is/setVisible():获取/设置帧的可视状态,换句话说,是否在屏幕上显示。

?get/setLocation():获取/设置帧在屏幕上应当出现的位置。

?get/setsize():获取/设置帧的大小。

?add():将组件添加到帧中。

简单应用程序

就像所有的“x入门”教程一样,本教程也包含必不可少的 HelloWorld 演示。但这个示例不仅对观察 Swing 应用程序如何工作有用,还对确保设置正确很有用。一旦使这个简单的应用程序能够成功运行,那么之后的每个示例也将能够运行。下图显示了完成后的示例:

HelloWorld示例

第一步是创建类。将组件放在 JFrame 上的 Swing 应用程序需要继承JFrame 类,如下所示:

public class HelloWorld extends JFrame

这样做之后,就得到上面描述的所有 JFrame 属性,最重要的是操作系统对窗口的本机支持。下一步是把组件放在屏幕上。在这个示例中,使用了一个 null 布局。在教程的后面部分,您将学到更多关于布局和布局管理器的内容。但对于这个示例,可以用数字表示 JFrame 上的像素位置:

public HelloWorld()

{

super();

this.setSize(300, 200);

this.getContentPane().setLayout(null);

this.add(getJLabel(), null);

this.add(getJTextField(), null);

this.add(getJButton(), null);

this.setTitle("HelloWorld");

}

private javax.swing.JLabel getJLabel() {

if(jLabel == null) {

jLabel = new javax.swing.JLabel();

jLabel.setBounds(34, 49, 53, 18);

jLabel.setText("Name:");

}

return jLabel;

}

private javax.swing.JTextField getJTextField() {

if(jTextField == null) {

jTextField = new javax.swing.JTextField();

jTextField.setBounds(96, 49, 160, 20);

}

return jTextField;

}

private javax.swing.JButton getJButton() {

if(jButton == null) {

jButton = new javax.swing.JButton();

jButton.setBounds(103, 110, 71, 27);

jButton.setText("OK");

}

return jButton;

}

现在组件都放在了 JFrame 上,并且需要在屏幕上显示 JFrame,并让应用程序可以运行。就像在所有的 Java 应用程序中一样,必须添加一个 main 方法,才能让Swing 应用程序运

行。在这个 main 方法中,只需要创建 HelloWorld 应用程序对象,然后调用其setVisible()即可:

public static void main(String[] args)

{

HelloWorld w = new HelloWorld();

w.setVisible(true);

}

完成了!这就是创建应用程序的所有过程。

完整代码如下:

package https://www.doczj.com/doc/5717402023.html,.jnu.www;

import javax.swing.*;

import javax.swing.event.*;

import java.awt.*;

import java.awt.event.*;

public class HelloWorld extends JFrame{

private JLabel jLabel;

private JTextField jTextField;

private JButton jButton;

public HelloWorld()

{

super();

this.setSize(300, 200);

this.getContentPane().setLayout(null);

this.add(getJLabel(), null);

this.add(getJTextField(), null);

this.add(getJButton(), null);

this.setTitle("HelloWorld");

}

private javax.swing.JLabel getJLabel() {

if(jLabel == null) {

jLabel = new javax.swing.JLabel();

jLabel.setBounds(34, 49, 53, 18);

jLabel.setText("Name:");

}

return jLabel;

}

private javax.swing.JTextField getJTextField() { if(jTextField == null) {

jTextField = new javax.swing.JTextField(); jTextField.setBounds(96, 49, 160, 20);

}

return jTextField;

}

private javax.swing.JButton getJButton() {

if(jButton == null) {

jButton = new javax.swing.JButton();

jButton.setBounds(103, 110, 71, 27);

jButton.setText("OK");

}

return jButton;

}

public static void main(String[] args)

{

HelloWorld w = new HelloWorld();

w.setVisible(true);

}

}

附加的swing小部件(上)

JComboBox

在这一节中,我将介绍Swing 库中的其他全部组件、如何使用它们、它们看起来是什么样的,等等,这部分内容应当让您更好地了解Swing 为UI 开发人员提供了什么。

我们从JComboBox 开始介绍。组合框与下拉选择相似,区别在于使用组合框时用户可以不从列表中选择项目,还可以选择一个(而且只有一个)项目。在某些版本的组合框中,还可以输入自己的选择。浏览器的地址栏就是一个示例:它是一个允许输入自己选项的组合框。以下是JComboBox 在Swing 中看起来的样子:

JComboBox

JComboBox 的重要函数包括JComboBox 包含的数据。需要有一种方法来设置JComboBox 中的数据、修改数据、在用户选择时得到用户的选择。可以使用以下JComboBox 方法:

?addItem():添加一个项目到JComboBox.

?get/setSelectedIndex():获取/设置JComboBox 中选中项目的索引。

?get/setSelectedItem():获取/设置选中的对象。

?removeAllItems():从JComboBox 删除所有对象。

?remoteItem():从JComboBox 删除特定对象。

JTextField

JTextField 的一个细微变化是JPasswordField,它允许您隐藏在文本字段区域中显示的字符。毕竟,在您输入口令的时候,如果每个人都能看到,那可没什么好处?可能根本就不好,而且在私人数据如此脆弱的今天,您需要所有能够得到的帮助。以下是JPasswordField 在Swing 中看起来的样子:

JPasswordField

JPasswordField 上额外的“安全性”方法对JTextField 的行为做了轻微改变,所以不能阅读文本:

?get/setEchoChar():获取/设置每次字符输入时在JPasswordField 中显示的字符。在获取口令时,不会返回“回声”,而是返回实际的字符。

?getText():不应当使用这个函数,因为它会带来可能的安全问题(String 会保存在内存中,可能的堆栈转储会暴露口令)。

?getPassword():这是从JPasswordField 中获得口令的恰当方法,因为它返回一个包含口令的char[]。为了保证恰当的安全性,数组应当被清为0,以确保它不会保留在内存中。

JCheckBox/JRadioButton

JCheckBox 和JRadioButton 组件向用户呈现选项,通常采用多选的格式。区别是什么?从实践的角度来说,它们没有那么不同。它们的行为方式相同。但是,在一般的UI 实践中,它们有细微差异:JRadioButton 通常组合在一起,向用户呈现带有必选答案的问题,而且这些答案具有强制性(这意味着问题只能有一个答案)。JRadioButton 的行为保证了这个用法。一旦选择了JRadioButton,就不能取消对它的选择,除非选择了在同一组中的另外一个单选钮。从效果上看,这就保证了选项的惟一和必选。JCheckBox 的不同在于,允许随机地选择/取消除选择,并允许为问题选择多个答案。

这里是个示例。问题“您是男孩还是女孩!”有两个惟一答案选项“男孩”或“女孩”。用户必须选择一个,不能同时选中。另一方面,问题“您的习惯是什么?”的答案有“跑步”、“睡觉”或“阅读”,不应当只允许为此问题选择一个答案,因为人们可能有不止一个习惯。

把这些JCheckBoxe 或JRadioButton 捆绑成一组的类是ButtonGroup类。它允许把选项组织在一起(例如“男孩”和“女孩”),这样,其中一个被选择时,另外一个就自动取消选择。

以下是JCheckBox 和JRadioButton 在Swing 中看起来的样子:

JCheckBox 和JRadioButton

需要记住的重要的ButtonGroup 方法是:

?add():添加JCheckBox 或JRadioButton 到ButtonGroup。

?getElements():获得ButtonGroup 中的全部组件,允许对它们进行迭代,找到其中选中的那个。

JMenu/JMenuItem/JMenuBar

JMenu、JMenuItem 和JMenuBar 组件是在JFrame 中开发菜单系统的主要构造块。任何菜单系统的基础都是JMenuBar。它平淡而乏味,但却是必需的,因为每个JMenu 和JMenuItem 都要用它构建。要用setJMenuBar()方法把JMenuBar 附着到JFrame。一旦将它附加到JFrame 中,就可以添加所有想要的菜单、子菜单和菜单项。

JMenu/JMenuItem 的区别看起来可能很明显,但实际上,在幕后看起来并不像表面那样。看看类的类层次结构,就知道JMenu是JMenuItem的子类。但是,在表面上,它们是有区别的:用JMenu 包含其他JMenuItem 和JMenu;JMenuItem 在选中时触发操作。

JMenuItem 也支持快捷键的概念。与您用过的大多数应用程序一样,Swing 应用程序允许您按下Ctrl+(某个键)来触发一个操作,就像选中菜单键本身一样。想想用来剪切和粘贴的快捷键Ctrl+X 和Ctrl+V。

除此之外,JMenu 和JMenuItem 都支持访问键。用Alt 键与某个字母关联,模拟菜单本身的选择(例如,在Windows 中按下Alt+F,然后按下Alt+x 就可以关闭应用程序)。

以下是包含JMenu 和JMenuItem 的JMenuBar 在Swing 中的样子:

JMenuBar、JMenu 和JMenuItem

这些类需要的重要方法是:

?JMenuItem and JMenu:

o get/setAccelerator():获取/设置用作快捷键的Ctrl+键。

o get/setText():获取/设置菜单的文本。

o get/setIcon():获取/设置菜单使用的图片。

?JMenu 专用:

o add():添加另外一个JMenu 或JMenuItem 到JMenu(创建嵌套菜单)。JSlider

在应用程序中JSlider 支持数值变化。它是一种迅速而简单的方式,不仅能让用户以可视形式获得他们当前选择的反馈,还能得到可以接受的值的范围。想像一下这种情况:可以提供一个文本字段,允许用户输入值,但是这样做就带来了额外的麻烦,要确保输入的值是数字,还要确保数字符合要求的数值范围。例如,如果有一个金融Web 站点,它向您提问要在股票上投资的百分比,那么您不得不检查在文本字段中输入的值,以确保它们是数字,而且在0 到100 之间。如果换用JSlider,那么就可以确保选择的是指定范围内的数字。

在Swing 中,JSlider 看起来如下所示:

JSlider

JSlider 中的重要方法是:

?get/setMinimum():获取/设置可以选择的最小值。

?get/setMaximum():获取/设置可以选择的最大值。

?get/setOrientation():获取/设置JSlider 是上/下还是左/右滚动条。

?get/setValue():获取/设置JSlider 的初始值。

JSlider

与JSlider 非常像,可以用JSpinner 允许用户选择一个整数值。JSlider 的一个主要优势就是比JSlider 的空间紧凑。但是,它的不足就是无法方便地设置其边界。

但是,两个组件之间的比较仅此而已。JSpinner 更加灵活,可以用来在任意组的值之间进行选择。除了在数字间选择,它还可以用来在日期、名称、颜色和任何事之间进行选择。这使JSpinner 极为强大,允许您提供其中只包含预定义的选择的组件。使用这种方式,它与JComboBox 类似,但是它们的应用不能互换。只应把JSpinner 用在逻辑上连续的选择——数字和日期是最合逻辑的选择。而另一方面,在呈现看起来随机的选择并且选择之间没有连接的时候,JComboBox 是更好的选择。

JSpinner 看起来如下所示:

JSpinner

重要方法是:

?get/setValue():获取/设置JSpinner 的初始值,在基本实例中,需要是整数。

?getNextValue():获取按下上箭头按钮之后应当选中的下一个值。

?getPreviousValue():获取按下下箭头按钮之后应当选中的前一个值。

JToolBar

JToolBar 充当其他组件(JButton、JComboBoxe 等)的调色板,共同构成您在大多数应用程序中熟悉的工具栏。工具栏允许程序把常用的命令放在可以迅速发现的位置,并把它们以常用命令组的形式组合在一起。一般(但不总是这样)情况下,工具栏按钮在菜单栏中会有对应的命令。虽然这不是必需的,但已经变成了一种公共实践,您也应当试着这么做。

JToolBar 也提供了您在其他工具栏中看到过的其他功能:“浮动”的能力(也就是成为主帧顶部独立的帧)。

下图显示了一个非浮动JToolBar:

非浮动JToolBar

对于JToolBar,要记住的重要方法是:is/setFloatable(),它获取/设置JToolBar 是否可以浮动。

JToolTip

您可能到处都看到过JToolTip,但是从来不知道它们叫什么。它们就像您鞋带上的塑料部件——到处都有,但是您就是不知道它们正确的名字(如果您想知道,那么可以叫它们金属箍)。JToolTip 就是您将鼠标停留在某个东西上面的时候弹出来的小“泡泡”。它们在应用程序中可能非常有用,可以为难用的项目提供帮助、扩展信息,甚至在拥挤的UI 中显示某个项目的完整文本。在Swing 中,可以通过把鼠标放在某个组件上的特定时间来触发它们;它们通常在鼠标处于不活动状态大约1 秒钟之后显示。只要鼠标还停留在那个组件上,它们就保持可见。

JToolTip 的重要部分是它的易用性。setToolTip()方法是JComponent类中的一个方法,这意味着每个Swing 组件都能有一个与之关联的工具提示。虽然JToolTip本身也是一个Swing 类,但目前,对于您的需要,它确实没有提供更多功能,而且本身也不该被创建。可以通过调用JComponent 的setToolTip()函数访问和使用它。

以下是JToolTip 看起来的样子:

A JToolTip

附加的swing小部件(下)

JOptionPane

JOptionPane是在Swing 中类似“快捷方式”的东西。通常,作为UI 开发人员,您需要向用户呈现快速信息,让用户了解错误和信息。甚至可能想得到一些快速数据,例如名称或数字。在Swing 中,JOptionPane类为这些东西提供了快捷方式,但这并不是它必须完成的任务。不需要让每个开发人员重头开始重复相同的工作,Swing 已经提供了这个基本的但很有用的类,为UI 开发人员提供了获取和接收简单消息的简易方法。

以下是一个JOptionPane:

JOptionPane

使用JOptionPane 时有点麻烦的是可以使用的全部选项。虽然简单,但是它仍然提供了大量选项,这些选项有可能造成混淆。学习JOptionPane 的最好方法就是使用它;编写代码,观察弹出的是什么。这个组件几乎可以让您修改它的每一方面:帧标题、消息本身、显示的图标、按钮选项,以及是否需要文本响应。因为有太多的可能性,无法在本教程中一一列举它们,所以您最好是访问JOptionPane 的API 页面,查看它的众多可能性。

JTextArea

JTextArea 比JTextField 更进了一步。JTextField 被局限在一行文本中,而JTextArea 扩展了这个能力,支持多行文本。可以把它想像成一个空白页,您可以在其中的任意地方进行输入。正如您可能猜到的,JTextArea 包含许多与JTextField 相同的功能,毕竟,它们实际上是相同的组件。但是JTextArea 提供了一些额外的重要功能,可以把它区别开。这些功能包括单词自动换行的能力(即把长文本自动换行到下一行,而不是将单词从中断开)、对文本自动换行的能力(即把长的文本行移动到下一行,而不是创建一个需要水平滚动条的非常长的行)。

Swing 中的JTextArea 看起来就像您期望的那样:

A JTextArea

支持行和单词的自动换行的重要方法是:

?is/setLineWrap():设置在行过长的时候是否要自动换行。

?is/setWrapStyleWord():设置在单词过长的时候是否要把长单词移到下一行。JScrollPane

上面的示例构造完成之后,假设JTextArea 包含太多文本,而给定的空间中容纳不下,那这该怎么办?如果您以为会自动出现滚动条,那么很不幸,您错了。JScrollPane 添补了这个空白,为Swing 组件提供了处理所有与滚动条相关的动作。所以虽然为每个需要的组件提供滚动块可能有些痛苦,但是一旦添加了它,它就会自动处理每件事,包括在需要的时候隐藏/显示滚动条。

除了用需要自动换行的组件创建JScrollPane 之外,不必直接处理它。根据上面的示例,用JTextArea 调用JScrollPane 的构造函数,这为JTextArea 创建了在文本过长时滚动的能力:

JScrollPane scroll = new JScrollPane(getTextArea()); add(scroll);

更新后的示例看起来如下所示:

JScrollPane 示例

JScrollPane 也公开了它将创建的两个JScrollBar。这些JScrollBar 组件也包含一些方法,可以用这些方法来修改组件的行为(虽然它们不在本教程的范围之内)。

使用JScrollPane 需要的方法是:

?getHorizontalScrollBar():返回水平的JScrollBar 组件。

?getVerticalScrollBar():返回垂直的JScrollBar 组件.

?get/setHorizontalScrollBarPolicy():这个“策略”可以是以下三个之一:Always、Never 或As Needed。

?get/setVerticalScrollBarPolicy():与水平函数相同。

JList

JList 是一个有用的组件,用于向用户呈现许多选择。可以把它当作JComboBox 的扩展。JList 提供了更多选择,并添加了多选的能力。在JList 与JComboBox 之间进行选择通常取决于以下两个特性:如果需要多选,或者选择的选项超过15 个(虽然这个数字并不是通用规则),那么就应当选择JList。

应用将JList 与JScrollPane 结合使用,就像上面演示的那样,因为它能够呈现比它的空间所能容纳的更多的选项。

JList 包含选择模型的概念(在JTable 中也会看到),在这里,可以设置JList 接受不同类型的选择。这些类型是:单一选择(只能选择一项)、单一间隔选择(只能选择相邻选项),以及任意多项或者多项间隔选择(可以选择任意数量、任意组合的选择)。

JList 是第一个我称为“复杂组件” 的组件,该复杂组件还包含JTable 和JTree,它们支持大量的定制变化,其中包括改变UI 的表现方式、处理数据的方式。因为本教程只是想介绍基础知识,所以我不想深入这些更高级的功能,但是在使用这些组件时有件事需要记住——它们带来的挑战要比目前为止介绍过的所有组件都大。

JList 在Swing 中看起来如下所示:

JList

JList 中有许多处理数据的函数,而且根据我的说法,这些也只不过是使用JList 的细节的皮毛而已。以下是一些基本方法:

?get/setSelectedIndex():获取/设置列表中选中的行;在多选择列表的情况下,返回一个int[]。

?get/setSelectionMode():与上面解释的一样,获取/设置选择模式,模式有:单一、单一间隔和多选间隔。

?setListData():设置在JList 中使用的数据。

?get/setSelectedValue():获得选中的对象(与选中行号对应)。

JTable

在考虑JTable 时,请想像一下一个Excel 工作表,这样就可以对JTable 在Swing 中的作用有一个清晰的印象。它与工作表共享许多相同的特征:单元格、行、列、移动列、隐藏列等。JTable 把JList 的想法更进了一步。它不是在一列中显示数据,而是在多列中显示数据。让我们以人为例。JList 只能显示人的一个属性——例如他或她的名字。而JTable 就能够显示多个属性——名字、年龄、地址,等等。JTable 是支持提供数据的大多数信息的Swing 组件。

不幸的是,作为代价,JTable 也是最难对付的Swing 组件。许多UI 开发人员都为了学习JTable 的每个细节而头痛。在这里,我希望我把能把您解救出来,只用您的JTable 知识处理问题。

许多JList 中的概念也扩展到了JTable,其中包括不同的选择间隔的概念。但是JList 中一列的概念变成了JTable 的单元格的概念。这意味着在JTable 中进行选择时会有不同的方式,例如列、行或者一个单元格。

在Swing 中,JTable 看起来如下所示:

JTable

最后,JTable 的大多数函数都超出本教程的范围;“中级Swing”会深入这个复杂组件的更多细节。

JTree

JTree 是另外一个复杂组件,它不像JTable 那样难用,但是也不像JList 那么容易。使用JTree 时麻烦的部分是它要求的数据模型。

JTree 的功能来自树的概念,树有分支和叶子。您在Windows 中使用IE 浏览器时,可能非常熟悉这个概念——可以展开和折叠分支,显示可以选择和取消选择的不同叶子。

您很有可能发现树在应用程序中不像表格或列表那样有用,所以在Internet 上没有许多有帮助的这方面的示例。实际上,像JTable 一样,JTree 没有什么入门级的功能。如果决

定使用JTree,那么立即就可以达到中级水平,当然还必须学习随之而来的概念。因此,示例应用程序没有介绍JTree,所以也很不幸,不管是入门教程还是中级教程,都没有涉及这个不太流行的组件。

但是,树有一些时候是符合需求的合理的UI 组件。文件/目录系统就是一个示例(就像在IE 浏览器中那样),而且当数据采取层次结构的时候,也就是说数据采用树的形式的时候,JTree 就是最佳组件。

在Swing 中,JTree 看起来如下所示:

JTree

Swing概念

布局、模型和事件

既然您已经知道了大多数(肯定不是全部)可以用来制作UI 的组件,那么就必须实际用它们做些什么。您不能只是随意地把它们放在屏幕上,然后就指望它们立即就能工作。您必须把它们放在特定的点上,对它们的交互作出反应,然后根据交互更新它们,用数据填充它们。要填满UI 知识的这片空白,还需要更多地学习UI 的其他重要部分。

所以,让我们来研究以下内容:

?布局:Swing 包括许多布局,布局也是类,负责处理组件在应用程序中的摆放位置,以及在应用程序改变尺寸或者删除、添加组件时对组件进行相应处理。

?事件:您需要对按下按钮、单击鼠标和用户在UI 上能做的每件事进行响应。想像一下,如果不能响应会发生什么——用户单击之后,什么变化也没有。

java swing布局管理器

学籍管理系统 Java Swing布局管理器 科尔沁艺术职业学院计算机科学与技术系2008级(普理)班曹容赫 指导教师苏春源 摘要:院校规模不断扩大,学生数量不断增多,原来的人工记录的方式,甚至是一般的数据存储管理软件不能满足学生管理的需求。传统管理方式维护数据性能低、查询信息不方便、选课效率低、维护成绩信息的工作量大,为弥补以上缺陷,便于信息管理与维护,提高管理效率,从而开发此学籍管理系统,以实现学院的信息化管理。 关键词Java.*Swing 用户名管理 Kerqin Art Institute of evaluating teaching career system Kerqin Art Vocational College, Department of Computer Science and Technology 2008 (2)Cao ronghe Abstract:The institutions have been expanding, increasing the number of students, the original way of manual records, or even a general data storage management software can not meet the management needs of students. Performance of the traditional low-maintenance data management, query information is not convenient, course selection, low efficiency, heavy workload to maintain performance information for more than make up for deficiencies, facilitate information management and maintenance, and improve management efficiency, in order to develop the school management system to achieve School of Information Management. Key words java*swing The user's name manages 引言 为了学院更方便的管理各院系开设的课程,让学生更方便地选课并及时了解个人课程及成绩信息,同时提高学院的信息化水平,学籍管理系统对成绩管理、学籍管理、班级管理、课程设置、选课信息等几个方面进行管理,真正实现管理信息化,且弥补了过去传统的数据信息管理的低效率问题。 1、需求分析 经过讨论此系统的开发是有必要的,针对此系统的使用群体有学生、家长、教师等。此系统可以根据相应信息对学生信息进行更有效的管理。还应用了Java *Swing 来编写主体布局界面,使操作更简单、更实用。

跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例

1.1跟我学Java Swing GUI组件技术及应用实例——JTable表格组件及应用实例 1.1.1表格控件JTable 1、JTable表格控件的主要功能 JTable顾名思义就是一个将数据以表格显示的组件,它提供以行和列的方式来显示数据,并且可以拖动列。如下示图为应用JTable表格控件所创建出的数据表格。 JTable的数据选项不仅仅是可以显示字符串,还可以显示Checkbox选择框、下拉列表框或者图片等内容。如下为Sun 公司的Swing 教程中的TableDialogEditoDemo 应用程序的执行结果示图,在该示例的数据表格中显示Checkbox选择框、下拉列表框和图片等内容。

2、JTable类的API功能说明 (1)JTable类的API功能说明 如下示图为JDK API文档中对JTable类的API功能说明的相关信息。 如果需要对数据表格中的表头数据列和数据单元格中的数据列进行定制,则需要通过继承封装表头数据列JTableHeader类或者继承封装数据列的TableColumn类。如下为JTableHeader类和TableColumn类的功能说明。 (2)表头数据列JTableHeader类的功能说明

(3)数据列TableColumn类的功能说明 TableColumn 类封装表示JTable中数据列的所有属性,如宽度、大小可调整性、最小和最大宽度。 3、JTable表格控件中的数据可以以多种不同的方式被选中 (1)选中某一数据行

(2)选中连续的多行数据行

(3)选中不连续的多行数据行

4、JTable类的构造函数定义 可以通过JTable(Object[][] rowData, Object[] columnNames)形式的构造方法创建出数据表格组件,该JTable组件将用来显示一个二维数组rowData 中的值(它是一个行数组),其列名称为columnNames所代表的数组。JTable类的其它形式的构造函数定义如下:

java swing 组件大全

import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.tree.*; import javax.swing.event.*; import javax.swing.border.*; import javax.swing.table.*; /** * Swing 组件测试程序 * 测试Swing所有组件及其相应的事件 * @author 天翼.李 2003.4.17 晚23:14 * @link https://www.doczj.com/doc/5717402023.html, * @link robococde@https://www.doczj.com/doc/5717402023.html, */ public class SwingT est extends JFrame { /** * 主模块,初始化所有子模块,并设置主框架的相关属性 */ public SwingTest() { // 初始化所有模块 MenuTest menuTest = new MenuTest(); LeftPanel leftPanel = new LeftPanel(); RightPanel rightPanel = new RightPanel(); BottomPanel bottomPanel = new BottomPanel(); CenterPanel centerPanel = new CenterPanel(); // 设置主框架的布局 Container c = this.getContentPane(); // c.setLayout(new BorderLayout()) this.setJMenuBar(menuTest); c.add(leftPanel,BorderLayout.WEST); c.add(rightPanel,BorderLayout.EAST); c.add(centerPanel,BorderLayout.CENTER); c.add(bottomPanel,BorderLayout.SOUTH); // 利用无名内隐类,增加窗口事件 this.addWindowListener(new WindowAdapter() { public void WindowClosing(WindowEvent e)

java任意窗口布局

package login; import java.awt.Color; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class Login extends JFrame{ /** * @param args * 登陆窗口 */ private JLabel userId_label; private JLabel userPass_label; private JTextField userId_field; private JTextField userPass_field; private JButton ok_button; private JButton cancle_button; private JPanel mainPanel; JFrame frame; int frame_width;//窗口的宽度 int frame_height;//窗口的高度 public Login(){ Toolkit toolKit = Toolkit.getDefaultToolkit(); Dimension dimension = toolKit.getScreenSize(); int width =dimension.width; //屏幕的宽度 int height =dimension.height;//屏幕的宽度 frame_width = width/3; frame_height = height/3; buildPanel(frame_width,frame_height);//新建面板 this.setTitle("酒店管理系统"); this.setSize(frame_width,frame_height); this.setLocation(frame_width, frame_height); this.setContentPane(mainPanel);

Java swing布局详解(附示例图)

当选择使用JPanel和顶层容器的content pane时,需要考虑布局管理。JPanel缺省是初始化一个FlowLayout,而content pane缺省是初始化一个BorderLayout。 下面将分别介绍几种最常用的布局管理器:FlowLayout、BorderLayout、BoxLayout、CardLayout、GridLayout和GridBagLayout。 代码演示 每一个布局管理器都会有一个代码演示,xxxLayoutDemo.java(见附件)。这些文件主要有三个方法组成: addComponentsT oPane()提供布局逻辑(依据不同的布局管理器和UI内容)。 Java代码 1public static void addComponentsT oPane(Container pane) {。。。} 2/** 3*createAndShowGUI()实例化一个JFrame,通过它的ContentPane加载布局逻辑内容。 4*/ 5private static void createAndShowGUI() { 6// Create and set up the window. 7JFrame frame = new JFrame("FlowLayoutDemo"); 8frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 9// Set up the content pane. 10addComponentsT oPane(frame.getContentPane()); 11// Display the window. 12frame.pack(); 13frame.setVisible(true); 14} 15//main()程序入口,单独起一个线程,实例化UI。 16public static void main(String[] args) {

java swing 好关系登录界面连接数据库代码

package com.kehuglxt.swing1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class Denglujdbc { //连接 Connection conn = null; //构造方法 public Connection getconn() { //连接时可能会出现异常所以要抛出异常 try { Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO: handle exception e.printStackTrace(); } //连接的数据库地址 String url = "jdbc:mysql://127.0.0.1:3306/shoping"; //用户名 String useName = "root"; //用户密码 String password = "admin"; try { //连接 conn = DriverManager.getConnection(url, useName, password); if (conn != null) { //打印输出测试一下能不能输出 //System.out.println("连接数据库成功"); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); }

Swing的用法以及实例

Swing的用法以及实例 使用swing时首先要导入一些相关的包: 01//首先导入Swing 需要的包 02 import javax.swing.*; 03 import java.awt.*; 04 import java.awt.event.*; 05 //创建HelloWorld类 06 public class HelloWorld { 07 //创建主方法 08 public static void main(String[] args) { 09 try { //try语句块,监视该段程序 10 //设置窗口风格 11 UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 12 } catch (Exception e) { //捕获异常 13 e.printStackTrace(); //异常信息输出 14 } 15 JFrame frame = new JFrame("Swing 第一个示例");//创建顶层容器并初始化 16 Container c = frame.getContentPane(); //获取面板容器 17 JPanel pane = new JPanel(); //创建面板panel 并初始化 18 c.add(pane); //将面板添加到窗口 19 pane.setLayout(new FlowLayout()); //设置布局管理器FlowLayout 20 final JLabel label = new JLabel(); //创建标签label 并初始化 21 JButton button = new JButton("按钮"); //创建button 并初始化 22 pane.add(label); //向容器中添加组件label 23 pane.add(button); //向容器中添加组件button 24 //对按钮事件的处理方法 25 button.addActionListener(new ActionListener() { 26 public void actionPerformed(ActionEvent e) { 27 label.setText("HelloWorld!"); //设置label 显示的内容 28 } 29 }); 30 //窗口设置结束,开始显示 31 frame.addWindowListener(new Window 32 //匿名类用于注册监听器 33 public void windowClosing(WindowEvent e) { 34 System.exit(0);} //程序退出 35 }); 36 frame.setSize(300,240); //设置窗口大小 37 frame.setVisible(true); //显示窗口 38 } 39 } 以上程序中完全按照前面所介绍到的流程,首先是将Swing 所需要的包导入(第1~4 行,然后在主方法中创建顶层容器frame 并初始化(第15 行)。

(总结)Swing组件的使用

(总结)Swing组件的使用 Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件.Swing 的基本组件:1.按钮(JButton): Swing 中的按钮可以显示图像,并且可以将按钮设置为窗口的默认图标,而且还可以将多个图像指定给一个按钮。 (1).JButton 常用的构造方法。 JButton(String text):按钮上显示字符。 JButton(Icon icon) :按钮上显示图标。 JButton(String text, Icon icon):按钮上既显示图标又显示字符。 (2).常用方法: b1.setEnabled(false); //使按钮当前不可用 b1.setToolTipText("..."): //设置按钮提示文本 b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键(3).案例代码: [java] view plain copy print?public class JButtonExample3 extends JPanel implements ActionListener { protected JButton b1, b2, b3; public JButtonExample3() { ImageIcon

leftButtonIcon = createImageIcon("right.gif"); ImageIcon middleButtonIcon = createImageIcon("middle.gif"); ImageIcon rightButtonIcon = createImageIcon("left.gif"); b1 = new JButton("失效中间按钮(D)", leftButtonIcon); b1.setVerticalTextPosition(AbstractButton.CENTER);// 水平中间对齐 b1.setHorizontalTextPosition(AbstractButton.LEADING);// 相当于LEFT b1.setMnemonic(KeyEvent.VK_D);// 将b1邦定alt+D键b1.setActionCommand("disable"); b2 = new JButton("M中间按钮", middleButtonIcon); b2.setVerticalTextPosition(AbstractButton.BOTTOM); b2.setHorizontalTextPosition(AbstractButton.CENTER); b2.setMnemonic(KeyEvent.VK_M);// 将b2邦定alt+M键b3 = new JButton("E激活中间按钮", rightButtonIcon); b3.setMnemonic(KeyEvent.VK_E);// 将b3邦定alt+E键 b3.setActionCommand("enable"); b3.setEnabled(false); // 给1和3添加事件监听b1.addActionListener(this); b3.addActionListener(this); // 设置按钮提示文本b1.setToolTipText("点击这个按钮,

Java Swing-图形化界面-菜单组件

//菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里/**JMenuBar菜单条 * JComponent类的子类JMenubar是负责创建菜单条的,即JMenuBar的一个实例就是一个菜单条。* JFrame类有一个将菜单条放置到窗口中的方法: * public void setJMenuBar(JMenuBar mmenubar); * 该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)*/ /**JMenu菜单 * JComponent的子类JMenu是负责创建菜单的,即JMenu的一个实例就是一个菜单。 * JMenu类的主要方法: * JMenu(String s)-建立一个指定标题菜单,标题由参数s确定 *public void add(MenuItem item)----向菜单增加由参数item指定的菜单选择对象*public void add(String s)----向菜单增加指定的选项 *public JMenuItem getItem(int n)----得到指定索引处的菜单选项 *public int getItemCount()----得到菜单选项数目 */ /**JMenuItem菜单项 * JMenuItem是JMenu的父类,该类负责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。 * JMenuItem类的主要方法: * JMenuItem(String s)----构造有标题的菜单项 * JMenuItem(String text,Icon icon)----构造有标题和图标的菜单项 * public void setEnabled(boolean b)----设置当前菜单项是否可被选择 * public String getLabel()----得到菜单项的名字 * public void setAccelerator(KeyStroke keyStroke)----为菜单项设置快捷键 * 注:为向该方法的参数传递一个KeyStroke对象,可以使用KeyStroke类的类方法public static Keystroke * getKeyStroke(char keychar)返回一个KeyStroke对象;也可以使用KeyStroke类的类方法public static * Keystroke getKeyStroke(int keyCode,int modifiers)返回一个Keystroke对象,其中参数KeyCode的 * 取值范围为KeyEvent.VK_A~KeyEvent.VK_Z,modifiers的取值如下:InputEvent.ALT_MASK,* InputEvent.CTRL_MASK,InputEvent.SHIFT_MASK */ /**嵌入子菜单 * JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。为了使菜单项有一个图标,可以用图标 * 类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如: * Icon icon=new ImageIcon("dog.gif") */JMenu JMenu 10.3 菜单组件 2020年1月1日21:03 分区 十.图形用户界面设计 的第1 页

应用Java Swing GUI界面技术实现的Java JDBC数据库操作技术的应用实例

应用Java Swing GUI界面技术实现的Java JDBC数据库操作技术的应用实例 1.1.1问题 设计一个实现对下面的EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)”操作的J2SE程序。物理数据库系统不限制,可以为MS SQLServer、MYSQL和Oracle等。 1.1.2本示例的源程序代码 1、DesktopApplication程序类的功能说明 实现对EBook数据库表进行CRUD-----“增(CREATE)、删(DELETE)、改(UPDATE)、查(READER)功能实现的基础上尝试了应用Java Swing GUI编程技术,理解了事件的监听机制的原理、桌面程序的布局等知识。 2、编程工具为NetBeans IDE 3、本示例的数据库为MySql数据库系统 4、本示例的源程序代码 import javax.swing.*; import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*; import java.sql.*; class Table extends JFrame implements ActionListener{ /*-------------------------------菜单栏的各项元素定义-----------------------*/ /*下拉菜单*/ private JMenuBar menubar;

private JMenu menu; private JMenuItem iselect,iinsert,idel,iupdate; /*插入时的输入框*/ private JTextField Tebook_id; private JTextField Tebook_name; private JTextField Tebook_kind; private JTextField Tebook_price; /*显示标签*/ private JLabel label_title; private JLabel label_id; private JLabel label_name; private JLabel label_kind; private JLabel label_price; private JLabel label_updateid; //显示更新的记录集号的标签 // 出错后的提示标签 private JLabel exception_interger=new JLabel("请输入数字!"); //提示出错为没有输入数字的标签 private JPanel panel; //面板 //private JTextArea textarea;//文本区域 private Container contrainer;//容器 private JButton insert_enter; // 插入确定按钮 private JButton del_enter; // 删除确定按钮 private JButton update_select_enter; // 更新选择按钮 private JButton update_detail_enter; // 更新确定按钮 //初始化表格 public Table(){ /*-------------------------------初始化界面----------------------*/ menubar= new JMenuBar(); menu = new JMenu("对数据表的处理"); iselect = new JMenuItem("显示数据表");

Java Swing-图形化界面-JFrame窗口

10.2 JFrame窗口 2019年12月31日16:25 /**JFrame类常用方法如下: JFrame()-创建一个无标题的窗口 JFrame(String s)-创建一个标题为s的窗口 public void setBounds(int a,int b,int width,int height)-设置出现在屏幕上时的初始化位置(a,b)窗口宽width、高height public void setSize(int width,int height)-设置窗口的大小,默认位置(0,0) public void setVisible(boolean b)-设置窗口是可见还是不可见,默认是不可见的 public void setResizeable(boolean b)-设置窗口是否可调大小,默认不可调大小 public void setDefaultCloseOperation(int operation)-设置单体窗体右上角的关闭图标后,程序会做出怎样的处理 */ 例子10-1 import javax.swing.*; public class E { public static void main(String args[]) { //参数为窗口名字 JFrame frame1 =new JFrame("第一个窗口"); JFrame frame2 =new JFrame("第二个窗口"); //设置窗口在屏幕上的位置和大小,分别为窗口 距屏幕的左面像素 frame1.setBounds(60, 100, 188, 108); frame2.setBounds(260, 100, 188, 108); frame1.setVisible(true); frame1.setDefaultCloseOperation(JFrame.DISP OSE_ON_CLOSE); frame2.setVisible(true); frame2.setDefaultCloseOperation(JFrame.DISP OSE_ON_CLOSE); } } 运行结果: 分区 十.图形用户界面设计 的第1 页

JAVA swing界面实现数据库增删改查

数据库程序设计 大作业 班级:2012级软件外包服务一班学号:201215140117 姓名:。。。 时间:2013-6-19

1.功能描述 1.1 功能简介 用swing做出图形化界面形式,实现数据库的增删改查把员工表跟部门表连接起来,实现数据的增加,删除,修改,查找。 1.2 实现步骤 (1)安装好虚拟机,并在其下确认oracle已安装成功(可以在dos下输入相关命令来检查是否安装成功)。 (2)在网络中心修改pc机上的VMware Network Adapter的IP、子网页码(默认)、网关。 (3)修改虚拟机的IP、网掩码(默认)、网关,确保PC机上的网关和虚拟机的IP一致。(在控制面板——>网络和共享中心——>本地连接3——>属性中,修改IP、网掩码)(4)在PC机的dos命令控制台ping虚拟机的IP,确保正常,能ping通(即将虚拟机内外ping通)。 (5)配置好虚拟机下的oracle的数据库和监听。 (6)在eclipse中编写相关代码,并用jtable实现图形化界面,用以实现与数据库的连接和操作数据库等功能。 (7)在eclipse中导入数据库的驱动。 (8)运行eclipse,查看运行结果。

2. 核心代码 2.1 1.数据库连接 package https://www.doczj.com/doc/5717402023.html,.dbc; import java.sql.Connection; import java.sql.DriverManager;

import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DatabaseConnection { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@192.168.0.128:1521/WFJ"; conn = DriverManager.getConnection(url, "hr", "hr"); stmt = conn.createStatement(); String sql = "select * from departments"; rs = stmt.executeQuery(sql); while (rs.next()) { System.out.print(rs.getInt("department_id")); System.out.print("\t"); System.out.print(rs.getString("department_name")); System.out.print("\t"); System.out.print(rs.getInt("manager_id")); System.out.print("\t"); System.out.print(rs.getInt("location_id")); System.out.println(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) {

Swing常见布局管理器总结

1、BorderLayout 边界布局管理器 北区:页首(PAGE_START)north 南区:页尾(PAGE_END)south 西区:行首(LINE_START) west 东区:行尾(LINE_END)east 我们也可以在内容窗格的顶头放置工具栏,底部放置状态栏 工具栏和状态栏的高度都是不变的,但长度随框架大小而改变 这正好是边界型布局的北区、南区的特点 因此,北区和南区可以放置工具栏和状态栏,同时会根据框架的大小自动调整面板、工具栏和状态栏的大小 对于此类界面,可以将主工作区放在中间区里,辅助工具区放在周边的东、南、西、北四个区域的某一个区域中: 缺省情况下,边界型布局的各区之间没有空隙,组件彼此靠在一起 可以指定区域间的水平间隙和垂直间隙: JPanel panel = new JPanel(); panel.setLayout(new BorderLayout(5, 5)); 2、BoxLayout(盒子布局器) 它没有空构造函数,必须给出两个参数: 需要它管理的容器对象 组件排列的轴线方向,轴线方向有两种: LINE_AXIS(或者X_AXIS)表示组件按横线排成一行; PAGE_AXIS(或者Y_AXIS)表示组件按纵向排成一列 组件的对齐方式(Alignment): 对于纵向排列的组件,有3种对齐方式: btn1.setAlignmentX(Component.LEFT_ALIGNMENT); btn1.setAlignmentX(Component.CENTER_ALIGNMENT); btn1.setAlignmentX(Component.RIGHT_ALIGNMENT); 对齐方式是组件本身的性质,而不是布局管理器的性质。因此,你需要调用每个组件本身的setAlignmentX函数来设定对齐方式

Swing组件的各种面板(JRootPane根面板,JLayeredPane层面板等)

主要参考文现: [美]Herbert Schildt 著 鄢爱兰 鹿江春译 《java 参考大全 J2SE 》 清华大学出版社 2006年1月 孙卫琴 《Java 面向对象编程》 出版社及日期不详 java API 开发人员文档 本文作者:黄邦勇帅 本文的说明:本文主要讲解了对大学初学Swing 时对根面板JRootPane ,内容面板containPane ,层面板JLayeredPane ,玻璃面板glassPnae 的困惑,本文对各种面板作了详尽的讨论,让读者能真正的明白根面板,内容面板,层面板到底是什么,他们在程序中的作用,以及他们之间的关系,透明性,可见性,作了讲解。本文内容完全属于个人见解与参考文现的作者无关,其中难免有误解之处,望指出更正。 Swing 组件的各种面板(JRootPane 根面板,JLayeredPane 层面板等) 第一部分:JFrame 中各面板间的关系,透明性与可见性问题 注:在某些地方把面板也叫做窗格,比如根面板,也叫根窗格,层面板也叫分层窗格等。注意窗格与窗体是不一样的。 在Swing 中的JFrame 窗体与AWT 中的Frame 窗体有一些不同。JFrame 由他的窗体本身加上其上的JRootPane 根面板,JLayeredPane 层面板,containPane 内容面板,glassPane 玻璃面板,JMenuBar 菜单栏(可选,不包括在内)四部分组成。其中根面板在JRootPane 类中实现,层面板在JLayeredPane 类中实现,他们都是JComponent 的子类。而containPane 和glassPane 没有专门对应的类。 1、各种面板(或称窗格)的关系及作用: JRootPane 根面板:该面板是在JFrame 窗体创建时就默认添加进来的,是所有其他面板的载体或父级,他覆盖窗体的除标题栏和边条之外的整个表面。根面板默认是不可见的。根面板负责管理其他面板(层面板,玻璃面板),如使其他面板覆盖整个JFrame 窗体等。 JLayeredPane 层面板:该面板是其他所有面板的父级,在JRootPane 面板的上面,他再次覆盖窗体的整个表面,内容面板和JMenuBar 菜单栏被添加到层面板上。当添加了菜单栏时,菜单栏被添加到JLayeredPane 面板的顶部,剩下的部分被内容面板填充。层面板是分很多层的,每一层使用一个相应的数字来表示,而内容面板就位于层面板中的某一层,在后面的内容中我们可以看到层面板可以让你设计出相互重叠的内部窗体,层面板将负责管理各种内部窗体的叠放问题,对于层面板的每一层都相当于是一个容器,因此可以直接向层面板中添加组件。层面板的内容后面会作具体介绍。 containPane 内容面板:由层面板的介绍可知,内容面板是层面板中的某一层。默认的内容面板是不透明的,而且是一个JPane 对象。该面板在窗体中起着工作区的作用,当我们向窗体添加组件时就应该添加到这一层上,而不能像AWT 那样直接添加到窗体上,若你那样做了,实际上该组件也是被添加到内容面板上的,若窗体未设置内容面板,则组件无法显示。比如要添加按钮jb 则正确的方式为,Container p=jframe.getContentPane(); p.add(jr); 或jframe.getContentPane().add(jr); 其中getContentPane()是JFrame 类中的方法,该方法将反回内容面板的引用,这是访问默认的内容面板的方法,因为默认的内容面板没有特定的名字,因此应使用该方法。 glassPane 玻璃面板:该面板总是存在的,而且他位于最上面,默认情况下玻璃面板是不可见的,玻璃面板用于接收鼠标事件和在其他组件上绘图。 2、各面板中使用的布局管理器: 在内容面板上使用的布局管理器默认是BorderLayout 。 在根面板上使用的布局管理器是一个自定义的LayoutManager(布局管理器),他的作用是布局根面板之上的其他面板。很明显如果你要向根面板中添加组件就应使用setLayout 方法为其设置合适的布局管理器或自已设定组件的大小和显示

Swing组件大全

一抛砖引玉 本文指在利用一个小程序”Swing 组件大全”来引导大家学习Java这门语言,熟悉Ja va Swing的各个组件。并在学习过程中参考作者设计这一程序的方法和思想,最终形成自己的思维方式和学习方式。你能举一返三是作者最开心的事情。小程序演示了Java Swing 大部分组件。最后附上了全部代码及详细的注释说明。希望本文能对大家学习Java有所帮助。 随着Java风潮席卷国内,学习Java的方法和路径越来越多。而在大量的书本前,在J ava庞大的类库前大大家都有点迷失方向的感觉,是学J2EE,J2ME还是。。。。。。然而所有的这些都或多或少的离不开J2SE。万丈高楼平地起。J2SE是整个Java的基础,学好了这个对Java的各个方向都是很有利的。而学习J2SE的最初点就在界面设计,因为界面编程是你来感觉最直接的手段,是提高大家编程兴趣的很好开始,因为你写完程序编译后可马上看到自己的成果。而不像后台编程做完了都感受不到效果。而好的界面也是你测试你其他程序的基础。 界面设计!不就是拖拉操作吗?如果是VB,VC等可视化的编程,的确只是一些拖拉操作,由于Java语言的设计中所有的东西都是程序代码,在Java中如果想要设计一个好的界面,可不是简单的拖拉操作能完成的。即使使用了如JBuilder这么强大的可视化工具,你也得亲自动手写一些界面设计代码才能很好的完成你的任务。如果你能在此基础上理解Java界面设计的思想,对你学习这门语言将有莫大的帮助。 Java界面设计主要涉及Awt,Swing两大类库,Swing是Awt的扩展和功能加强。下面我们就以Swing为基础来说说整个Java的界面设计。 二感受效果 在开始之前,让我们看看这篇文章要达到的效果,有了目标和成果才有学习的兴趣,起码我是这样认为和学习的。如下图所示,这就是我们设计的界面,它包括了Swing中大部分

简述Java图形用户界面设计(Swing)

简述Java图形用户界面设计(Swing) Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。 作为一个Java 程序员,从论坛上感受到使用Java 开发程序的人越来多,心中不免欣慰。但是,同样是从论坛中,看到多数人提到Java 就以为是网络开发——不是这样的,Java 也可以开发应用程序,而且可以开发出漂亮的图形用户界面的应用程序,也就是Windows/XWindow 应用程序。因此,我写下这篇文章,希望能带你进入Java 图形用户界面设计之门。 下面,让我们开始…… 说明:所有代码均在Windows XP + Eclipse 环境下编写和测试,示例图片均在Windows XP 下捕捉。 目录 一. AWT 和Swing 二. 框架、监听器和事件 三. 按钮、切换按钮、复选按钮和单选按钮 四. 文本输入框、密码输入框 五. 窗格、滚动窗格和布局管理 六. 后记——什么是SWT (2006年补充) 一. AWT 和Swing AWT 和Swing 是Java 设计GUI 用户界面的基础。与AWT 的重量级组件不同,Swing 中大部

分是轻量级组件。正是这个原因,Swing 几乎无所不能,不但有各式各样先进的组件,而且更为美观易用。所以一开始使用AWT 的程序员很快就转向使用Swing 了。 那为什么AWT 组件没有消亡呢?因为Swing 是架构在AWT 之上的,没有AWT 就没有Swing。所以程序员可以根据自己的习惯选择使用AWT 或者是Swing。但是,最好不要二者混用——除开显示风格不同不说,还很可能造成层次(Z-Order) 错乱,比如下例: 1/* 2 * AwtSwing.java 3 * @author Fancy 4 */ 5 6import java.awt.BorderLayout; 7import java.awt.Button; 8 9import javax.swing.JButton; 10import javax.swing.JDesktopPane; 11import javax.swing.JFrame; 12import javax.swing.JInternalFrame; 13import javax.swing.JPanel; 14 15public final class AwtSwing { 16 17public static void main(String[] args) { 18 AwtSwing as = new AwtSwing(); 19 as.show(); 20 } 21 22 JFrame frame = new JFrame("Test AWT and SWING"); 23 24 JDesktopPane jdp = new JDesktopPane(); 25 26 JInternalFrame jif1 = new JInternalFrame("controls"); 27 28 JInternalFrame jif2 = new JInternalFrame("cover"); 29 30public AwtSwing() { 31 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 frame.getContentPane().add(jdp); 33 34 jif1.setContentPane(new JPanel()); 35 jif2.setContentPane(new JPanel());

相关主题
文本预览
相关文档 最新文档