关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例。
程序是为了方便用户使用的,Java引入图形化界面编程。
1.JFrame 是容器类
2.AWT 是抽象窗口组件工具包,是 Java 最早的用于编写图形节目应用程序的开发包。
3.Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。
代码实例1:
package com.zhouzhou;
//练习网格布局
import java.awt.*;
import javax.swing.*; public class Demo9 extends JFrame {
// 定义组件
int size = 9;
JButton jbs[] = new JButton[size]; public static void main(String[] args) {
// 创建实例
Demo9 de = new Demo9();
} // 构造函数
public Demo9() { // 创建组件
for (int i = 0; i < size; i++) {
jbs[i] = new JButton(String.valueOf(i));
}
// 设置网格布局,这里只有前两个参数(行/列)3和3 的话,网格没有空隙
this.setLayout(new GridLayout(3, 3, 10, 10)); // 添加组件
for (int i = 0; i < size; i++) {
this.add(jbs[i]);
}
// 设置窗体属性
this.setTitle("网格布局案例");
this.setSize(300, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200, 200); // 显示
this.setVisible(true);
}
}
代码实例2:
package com.zhouzhou; import java.awt.*;
import javax.swing.*; public class Demo10 extends JFrame {
// 定义组件
JPanel jp1, jp2;
JButton jb1, jb2, jb3, jb4, jb5, jb6; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo10 de = new Demo10();
} // 构造函数
public Demo10() {
// 创建组件 jp1 = new JPanel();
jp2 = new JPanel(); jb1 = new JButton("西瓜");
jb2 = new JButton("苹果");
jb3 = new JButton("荔枝");
jb4 = new JButton("葡萄");
jb5 = new JButton("桔子");
jb6 = new JButton("香蕉"); // 设置布局管理器,
//JPanel布局默认是BorderLoyout// 添加JPanel
//JPanel属于容器类组件,可以加入别的组件
jp1.add(jb1);
jp1.add(jb2); jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5); // 把jpanel 加入JFrame
this.add(jp1, BorderLayout.NORTH);
this.add(jb6, BorderLayout.CENTER);
this.add(jp2, BorderLayout.SOUTH); this.setSize(300, 400);
this.setLocation(200, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
代码实例3:
package com.zhouzhou; import java.awt.*; import javax.swing.*; public class Demo11 extends JFrame { // 定义组件
JPanel jp1, jp2, jp3;
JLabel jlb1, jlb2;
JButton jb1, jb2;
JTextField jtf1;
JPasswordField jpf1; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo11 d1 = new Demo11(); } // 构造函数
public Demo11() { jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel(); jlb1 = new JLabel("用户名");
jlb2 = new JLabel("密 码"); jb1 = new JButton("登录");
jb2 = new JButton("取消"); jtf1 = new JTextField(10); jpf1 = new JPasswordField(10);// 设置布局管理(上面忘记:extends JFrame,这里出错了)
this.setLayout(new GridLayout(3, 1)); // 加入各个组件
jp1.add(jlb1);
jp1.add(jtf1); jp2.add(jlb2);
jp2.add(jpf1); jp3.add(jb1);
jp3.add(jb2); // 加入到JFrame
this.add(jp1);
this.add(jp2);
this.add(jp3); this.setSize(250, 150);
this.setTitle("登录");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
代码实例4:
package com.zhouzhou; import java.awt.*; import javax.swing.*; public class Demo12 extends JFrame { // 定义组件
JPanel jp1, jp2, jp3;
JLabel jlb1, jlb2;
JCheckBox jcb1, jcb2, jcb3;
JRadioButton jrb1, jrb2;
JButton jb1, jb2;
// 单选设置
ButtonGroup bg, bg2; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo12 d2 = new Demo12(); } // 构造函数
public Demo12() {
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel(); jlb1 = new JLabel("你喜欢的运动");
jlb2 = new JLabel("你的性别"); jcb1 = new JCheckBox("足球");
jcb2 = new JCheckBox("篮球");
jcb3 = new JCheckBox("网球");
// 下面可以设置单选
// ButtonGroup bg2=new ButtonGroup();
// bg2.add(jcb1);
// bg2.add(jcb2);
// bg2.add(jcb2); jrb1 = new JRadioButton("男");
jrb2 = new JRadioButton("女");
// 一定要把jrb1,jrb2放入到一个ButtonGroup里面
ButtonGroup bg = new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2); jb1 = new JButton("注册用户");
jb2 = new JButton("取消用户"); this.setLayout(new GridLayout(3, 1)); jp1.add(jlb1);
jp1.add(jcb1);
jp1.add(jcb2);
jp1.add(jcb3); jp2.add(jlb2);
jp2.add(jrb1);
jp2.add(jrb2); jp3.add(jb1);
jp3.add(jb2); // 加入到JFrame
this.add(jp1);
this.add(jp2);
this.add(jp3); this.setSize(300, 200);
this.setTitle("用户注册界面");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); }
}
代码实例5:
package com.zhouzhou; import java.awt.*; import javax.swing.*; public class Demo13 extends JFrame {
// 定义组件
JPanel jp1, jp2;
JLabel jlb1, jlb2;
JComboBox jcb1;
JList jl1;
JScrollPane jsp; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo13 d3 = new Demo13();
} public Demo13() { jp1 = new JPanel();
jp2 = new JPanel(); jlb1 = new JLabel("您的籍贯是");
jlb2 = new JLabel("您喜欢旅游的地区"); String[] jg = { "北京", "上海", "天津", "重庆", "江苏" };
jcb1 = new JComboBox(jg); String[] jg2 = { "故宫", "长城", "九寨沟", "*", "火星" };
jl1 = new JList(jg2);
// 设置你希望显示多少个选项
jl1.setVisibleRowCount(1);
jsp = new JScrollPane(jl1); // 布局管理
this.setLayout(new GridLayout(3, 1)); // 添加组件
jp1.add(jlb1);
jp1.add(jcb1); jp2.add(jlb2);
jp2.add(jsp); this.add(jp1);
this.add(jp2); this.setSize(300, 400);
this.setTitle("下拉框练习");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); } }
代码实例6:
package com.zhouzhou; import java.awt.*;
import javax.swing.*; public class Demo14 extends JFrame { // 定义组件
JSplitPane jsp;
JList jList;
JLabel jl1; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo14 d4 = new Demo14(); } public Demo14() { // 创建组件
String[] words = { "boy", "gril", "bird", "box" };
jList = new JList(words); // JLabel可以放置图片
jl1 = new JLabel(new ImageIcon("images/1.jpeg")); // 拆分窗格
jsp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, jList, jl1);
// 可以手动伸缩变化
jsp.setOneTouchExpandable(true); // 设置布局管理器,它本身就是borderLayout布局,就不用再设置了 // 添加组件
this.add(jsp); this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); }
}
代码实例7:
package com.zhouzhou; import java.awt.*; import javax.swing.*; public class Demo15 extends JFrame { // 定义组件
JTextArea jta = null;// 多行文本框
JScrollPane jsp = null;
JPanel jp1 = null;// 面板
JComboBox jcb = null;// 下拉框组件
JTextField jtf = null;// 文本框
JButton jb = null; public static void main(String[] args) {
// TODO Auto-generated method stub
Demo15 d5 = new Demo15(); } // 构造函数
public Demo15() {
// 多行文本框会根据情况自己调节大小
jta = new JTextArea();
jsp = new JScrollPane(jta);
jp1 = new JPanel();
String j2[] = { "北京", "商行", "农行", "师大", "附中", "哈尔滨" };
jcb = new JComboBox(j2);
// 文本框最好设置初值
jtf = new JTextField(10);
jb = new JButton("发送");
// 布局管理
// this.setLayout(new GridLayout(1, 1));
// 添加
jp1.add(jcb);
jp1.add(jtf);
jp1.add(jb);
// 多行文本框是放在这里(JFrame)的!!!
// 因为上面又添加可以滚动的功能,这里传入jsp,而不是jta
this.add(jsp);
// 下面这里就需要定位处理
this.add(jp1, BorderLayout.SOUTH); // 设置窗体属性,z这里很厉害!!
this.setIconImage((new ImageIcon("images\\3.jpg")).getImage()); this.setSize(300, 200);
this.setTitle("QQ登录");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); }
}
代码实例8:
package com.zhouzhou; //QQ登录界面制作
import java.awt.*;
import javax.swing.*; public class Demo16 extends JFrame { // 北部区域
JLabel jl1; // 南部区域
JButton jb1, jb2, jb3;
JPanel jp1; // 中部区域
JTabbedPane jtp;// 选项卡窗格
JPanel jp2, jp3, jp4; JLabel jl2, jl3, jl4, jl5;
// 号码输入文本框
JTextField jtf;
// 密码
JPasswordField jpf;
// 清除号码
JButton jb4;
// 隐身登录、记住密码
JCheckBox jcb1, jcb2; public static void main(String[] args) {
// TODO Auto-generated method stub
new Demo16(); } public Demo16() { // 创建组件
jl2 = new JLabel("QQ号码", JLabel.CENTER);
jl3 = new JLabel("QQ密码", JLabel.CENTER);
jl4 = new JLabel("忘记密码", JLabel.CENTER);
jl4.setFont(new Font("宋体", Font.PLAIN, 16));// 设置字体样式
jl4.setForeground(Color.BLUE);// 设置字体颜色
jl5 = new JLabel("<html><a href='www.qq.com'>申请密码保护</a></html>");
// 鼠标触发变化
jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); jtf = new JTextField();
jpf = new JPasswordField();
jb4 = new JButton(new ImageIcon("images\\login.png")); jcb1 = new JCheckBox("隐身登录");
jcb2 = new JCheckBox("记住密码"); // 北部区域
jl1 = new JLabel(new ImageIcon("images\\headpicture.jpg")); // 南部区域
jp1 = new JPanel();
jb1 = new JButton(new ImageIcon("images\\login.png"));
jb2 = new JButton(new ImageIcon("images\\delete.png"));
jb3 = new JButton(new ImageIcon("images\\register.png")); // 中部区域
jtp = new JTabbedPane();
jp2 = new JPanel();
jp3 = new JPanel();
jp3.setBackground(Color.RED);// 给面板设置背景
jp4 = new JPanel();
jp4.setBackground(new Color(0, 0, 255)); // 将面板添加到选项卡窗格上
jtp.add("QQ号码", jp2);// 参数:选项卡名称,面板
jtp.add("手机号码", jp3);
jtp.add("电子邮箱", jp4); // 设置布局
jp2.setLayout(new GridLayout(3, 3)); // 添加组件
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3); jp2.add(jl2);
jp2.add(jtf);
jp2.add(jb4);
jp2.add(jl3);
jp2.add(jpf);
jp2.add(jl4);
jp2.add(jcb1);
jp2.add(jcb2);
jp2.add(jl5); this.add(jp1, BorderLayout.SOUTH);
this.add(jl1, BorderLayout.NORTH);
this.add(jtp, BorderLayout.CENTER); // 展示组件
ImageIcon icon = new ImageIcon("images\\qq.png");
this.setIconImage(icon.getImage());// 给窗体设置图标方法
this.setSize(400, 380);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); }
}
代码实例9:
package com.zhouzhou; //记事本界面
import java.awt.*;
import javax.swing.*; import java.awt.event.*; public class Demo17 extends JFrame { // 工具条
JToolBar jtb;
JButton jb1, jb2, jb3, jb4, jb5, jb6; // 菜单条组件
JMenuBar jmb;
JMenu menu1, menu2, menu3, menu4, menu5;
JMenuItem item2, item3, item4, item5, item6, item7;
JMenu xinjian;// 二级菜单
JMenuItem file, project; JTextArea jta; public static void main(String[] args) {
// TODO Auto-generated method stub
new Demo17(); } public Demo17() { // 创建工具条
jtb = new JToolBar();
jb1 = new JButton(new ImageIcon("images\\11.png"));
jb1.setToolTipText("新建");
jb2 = new JButton(new ImageIcon("images\\22.png"));
jb2.setToolTipText("打开");
jb3 = new JButton(new ImageIcon("images\\33.png"));
jb3.setToolTipText("等待");
jb4 = new JButton(new ImageIcon("images\\44.png"));
jb4.setToolTipText("统计");
jb5 = new JButton(new ImageIcon("images\\55.png"));
jb5.setToolTipText("参与");
jb6 = new JButton(new ImageIcon("images\\66.png"));
jb6.setToolTipText("旁观"); jmb = new JMenuBar(); menu1 = new JMenu("文件(F)");
menu1.setMnemonic('F');// 设置助记符
menu2 = new JMenu("编辑(E)");
menu2.setMnemonic('E');
menu3 = new JMenu("格式(O)");
menu3.setMnemonic('O');
menu4 = new JMenu("查看(V)");
menu4.setMnemonic('V');
menu5 = new JMenu("帮助(H)");
menu5.setMnemonic('H'); // item1=new JMenuItem(“新建”)
xinjian = new JMenu("新建");
file = new JMenuItem("文件");
project = new JMenuItem("工程"); item2 = new JMenuItem("打开", new ImageIcon("images\\77.png"));
item3 = new JMenuItem("保存(S)");
item3.setMnemonic('S');
// 给菜单选项添加快捷方式
item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.ALT_MASK));
item4 = new JMenuItem("另存为");
item5 = new JMenuItem("页面设置");
item6 = new JMenuItem("打印");
item7 = new JMenuItem("退出"); jta = new JTextArea(); // 设置布局 // 添加组件
// 将按钮添加到工具条上
jtb.add(jb1);
jtb.add(jb2);
jtb.add(jb3);
jtb.add(jb4);
jtb.add(jb5);
jtb.add(jb6); // 将菜单添加到菜单栏上
xinjian.add(file);
xinjian.add(project); menu1.add(xinjian);
menu1.add(item2);
menu1.add(item3);
menu1.add(item4);
menu1.addSeparator();// 添加分割线
menu1.add(item5);
menu1.add(item6);
menu1.addSeparator();
menu1.add(item7); // 将菜单添加到菜单条上
jmb.add(menu1);
jmb.add(menu2);
jmb.add(menu3);
jmb.add(menu4);
jmb.add(menu5); // 将菜单添加到窗体上
this.setJMenuBar(jmb); // 将工具条添加到窗体
this.add(jtb, BorderLayout.NORTH); JScrollPane jsp = new JScrollPane(jta);
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(jsp); // 展示
this.setTitle("记事本");
ImageIcon icon = new ImageIcon("images\\jsb.png");
this.setIconImage(icon.getImage());
this.setSize(1200, 900);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true); } }