Java提供了类库方便图形用户界面(GUI)的开发,主要集中在javax.swing、java.awt、java.awt.event包下。
GUI程序开发分两步:界面设计和事件处理。本节介绍界面设计。
1、常用类和方法
(1)容器类:JFrame(窗口)和JPanel(面板)
(2)标签:JLabel
(3)文本框:JTextField
(4)命令按钮:JButton
(5)多行文本框:JTextArea
(6)流布局类FlowLayout:元素从左向右,从上向下排列,默认居中
(7)边界布局BorderLayout:把容器分为东西南北中五部分
(8)格布局GridLayout:把容器分成m行n列的格子
(9)容器设置布局的方法setLayout(),JFrame默认是边界布局,JPanel默认是流布局。
(10)容器添加元素的方法add()
(11)设置容器大小的方法setSize()
(12)设置容器可见的方法setVisible(true)
(13)设置窗口关闭的默认行为setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
2、程序基本框架
编写GUI程序,通常建立一个JFrame子类,在构造函数中完成界面的设计。
import javax.swing.JFrame; public class Test { public static void main(String[] ar) { new Fr(); } } class Fr extends JFrame { Fr() { //设置窗口标题 //设置窗口布局 //添加元素 //设置窗口大小 //设置窗口可见(默认不可见) //设置窗口关闭行为为退出(默认隐藏) } }
3、示例
(1)流布局
import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.JTextField; public class Test { public static void main(String[] ar) { new Fr(); } } class Fr extends JFrame { Fr() { this.setTitle("FlowLayout布局"); this.setLayout(new FlowLayout()); this.add(new JLabel("标签")); this.add(new JButton("命令按钮")); this.add(new JTextField("文本框", 10)); this.add(new JTextArea(8, 30)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(400, 250); this.setVisible(true); } }
(2)边界布局
import java.awt.BorderLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JTextField; public class Test { public static void main(String[] ar) { new Fr(); } } class Fr extends JFrame { Fr() { this.setTitle("BorderLayout布局"); this.setLayout(new BorderLayout()); this.add(new JTextField("NORTH"), "North"); this.add(new JTextField("SOUTH"), "South"); this.add(new JTextField("WEST"), "West"); this.add(new JTextField("EAST"), "East"); this.add(new JButton("CENTER"), "Center"); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(400, 400); this.setVisible(true); } }
(3)格布局
import java.awt.Font; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; public class Test { public static void main(String[] ar) { new Fr(); } } class Fr extends JFrame { Fr() { this.setTitle("GridLayout布局"); this.setLayout(new GridLayout(5, 6)); JButton[] btg = new JButton[30]; for (int i = 0; i < 30; i++) { btg[i] = new JButton(i + ""); btg[i].setFont(new Font("TimesRoman", Font.BOLD, 20)); add(btg[i]); } this.setSize(400, 400); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } }
(4)嵌套布局
有时单一的布局不能满足需要,可以采用JPanel作为中间容器实现嵌套布局。
import java.awt.Button; import java.awt.Checkbox; import java.awt.FlowLayout; import java.awt.Label; import java.awt.TextField; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; public class Test { public static void main(String[] ar) { new Fr(); } } class Fr extends JFrame { Fr() { this.setTitle("容器嵌套"); this.add("North", new TextField("NORTH")); this.add("South", new TextField("SOUTH")); this.add("West", new TextField("WEST")); this.add("East", new TextField("EAST")); JPanel pa = new JPanel(); pa.setLayout(new FlowLayout()); pa.add(new Label("标签")); pa.add(new Button("命令按钮")); pa.add(new TextField("文本框", 10)); pa.add(new Checkbox("复选框")); this.add("Center", pa); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setVisible(true); } }