{相关信息}
1. 程序结构
Swing 的程序设计一般可按照以下流程进行:
(1)通过 import 引入 swing 包。
(2)设置 GUI 的“外观界面风格”。
(3)创建顶层容器。
(4)创建按钮和标签等组件。
(5)将组件添加到顶层容器。
(6)在组件周围添加边界。
(7)进行事件处理。
2. 组件分类
Jcomponent
类派生于 Container 类。并不是 Swing 的所有组件都继承了 JComponent 类,凡是派生于 Container
类的组件都可以作为容器使用。Swing 组件从功能上可分为顶层容器、中间容器、特殊容器、基本控件、信息显示组件和编辑信息组件。
顶层容器:Jframe、Japplet、Jdialog、JWindow。
中间容器:Jpanel、JscrollPane、JsplitPane、JToolBar。
特殊容器:GUI 中特殊作用的中间层,例如 JinternalFrame、JlayeredPane、JRootPane。
基本控件:人机交互的基本组件,如 Jbutton、JcomboBox、Jlist、Jmenu、Jslider、JtextField。
信息显示组件:组件仅仅为显示信息,但不能编辑,如 Jlabel、JprogressBar、ToolTip。
编辑信息组件:向用户显示可被编辑信息的组件,例如 JcolorChooser、JfileChoose、JfileChooser、Jtable、JtextArea。
另外,JComponent 类的一些特殊功能包括边框设置、双缓冲区、提示信息、键盘导航和支持布局。
边框设置:使用 setBorder()方法设置组件外围边框,如果不设置边框就会为组件的外围留出空白。
双缓冲区:为了改善组件的显示效果,采用双缓冲技术。JComponent 组件默认是双缓冲的,不必要自己写代码,可以通过 setDoubleBuffered(false)关闭双缓冲区。
提示信息:setTooltipText()方法可为组件设置提示信息,为用户提供帮助。
键盘导航:registerKeyboardAction()方法可以实现键盘代替鼠标操作。
支持布局:用户可以设置组件最大、最小和设置对齐参数值等方法,指定布局管理器的约束条件。
3)使用Swing的基本规则
与 AWT 组件不同,Swing 不能直接在顶层容器中添加组件。Swing 组件必须添加到与顶层容器相关的内容面板上,内容面板是一个普通的轻量级组件,还要避免使用非 Swing 轻量级组件。在顶层容器 JFrame 对象中添加组件有以下两种方式:
(1)用 getContentPane()方法获得容器的内容面板,直接添加组件,格式如下:
Container c = frame.getContentPane(); //获取窗口内容面板 JPanel pane = new JPanel(); //创建面板 c.add(pane); //在容器中添加面板
(2)建立一个中间容器对象(Jpanel 或 JdesktopPane),将组件添加到中间容器对象内,然后通过 setContentPane()方法将该容器设置为顶层容器 frame 的内容面板。
JPanel pane = new JPanel(); pane.add(new JButton("OK")); frame.setContentPane(pane);
{相关代码}
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /** * Created by re-x on 11/4/14. */ public class SwingApplication { public static void main(String[] args) { // 2) set GUI looking style try { // set window style UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } // 3) create top container final JFrame frame = new JFrame("Swing app"); Container c = frame.getContentPane(); JPanel panel = new JPanel(); c.add(panel); panel.setLayout(new FlowLayout()); // 4) create component final JLabel label = new JLabel(); Button button = new Button("click me"); panel.add(label); panel.add(button); // 5) action process button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { label.setText("Welcome"); } }); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { super.windowClosing(e); frame.dispose(); System.exit(0); } }); frame.setSize(300, 250); frame.setVisible(true); } }