Java-JUI编程-Lesson3
一.JFrame
JFrame是javax.swing下的一个类,它也是一个窗体,它的大部分配置和Frame都是一样的,可以说JFrame继承了Frame类
JFrame类中又写了很多Frame没有的方法,属于是优化了Frame类
实例化一个JFrame对象:
//新建一个JFrame
JFrame jFrame = new JFrame("JFrame窗体");
给文本标记设置位置:
//新建一个文本标签
JLabel label = new JLabel("欢迎来到JUI");
//设置标签的水平位置,水平对齐
label.setHorizontalAlignment(SwingConstants.CENTER);
JFrame的窗口关闭事件:
//JFrame的自带关闭窗口事件
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
实例化JFream容器,关于JFrame自己的设置都需要实例化这个容器Container
//JFrame窗体的实例容器,要想窗口自己的设置显示就需要实例这个容器 Container contentPane = jFrame.getConte contentPane.setBackground(Color.cyan);
设置容器为绝对布局,即根据空间设置的位置定位:
//设置绝对布局 contentPane.setLayout(null);
JDialog弹窗,需要继承JDialog类,弹窗的设置和Frame是一样的,可以理解新建了一个窗体:
class myDialog extends JDialog{ public myDialog() { this.setVisible(true); this.setBounds(600,600,300,300); Container contentPane = this.getContentPane(); contentPane.setLayout(null); JLabel jLabel1 = new JLabel("action:这是一个弹窗!"); jLabel1.setHorizontalAlignment(SwingConstants.CENTER); contentPane.add(jLabel1); } }
二.图标Icon
JFrame中图标一共有两种,一种是利用画笔画一个图标出来,另外一种是直接加载一张本地图标出来
图标可以放在按钮或者标签上
- Icon图标需要实现Icon类,此类有三个方法分别是,paintIcon方法,用来画图标,getwidth获得图标的宽度,getheight获得图标的高度
public void paintIcon(Component c, Graphics g, int x, int y) { g.fillOval(x,y,width,height); }
public int getIconWidth() { return 0; }
public int getIconHeight() { return 0; }
这三个方法实现以后就可以画出图标,主要的还是实现paintIcon方法
然后在启动方法中将图标添加上去,我们使用标签来作为示例:
JLabel jLabel = new JLabel("label"); jLabel.setIcon(icon);
icon就是画出来的图标
- 另外一种图标是将图片作为图标放在标签或按钮上,它不需要实现Icon类,只需要拿到图片,然后利用ImageIcon对象将此图片加载为图标
获得图片的位置:
//获得图片地址 URL url = IconDemo.class.getResource("bcsz.png");
加载成为图片图标:
//加载成为ImageIcon图标 ImageIcon imageIcon = new ImageIcon(url);
将图片图标放在标签上:
//将图片图标放在标签上 label.setIcon(imageIcon);
三.JScrollPane滚动面板
这是一个很特殊的面板,当给予的窗口装不下此面板中的内容时,面板会根据大小自生成一个滚动条,利用滚动条的可以展示不可见的内容
此面板也是JFrame类下的,所以需要继承JFrame类
如果想看到滚动条的效果,就一定需要窗口显示大小小于面板大小
示例:
设置一个较大的文本域:
//创建一个文本域 JTextArea textArea = new JTextArea(20,50); //先写入一些内容 textArea.setText("This is textArea");
装入一个JScrollPane面板:
//创建一个JScrollPane面板,并将文本域装入,此面板会根据大小自生成滚动条 JScrollPane jScrollPane = new JScrollPane(textArea);
在容器中放入面板:
//在容器中放入面板 contentPane.add(jScrollPane);
四.单选框和复选框
单选框
在一组按钮中只能选择其中一个,常见的如性别选项:男,女,沃尔玛购物袋,只能选择其中一个,不可能存在一个人的性别即是男又是沃尔玛购物袋的
所以在JFrame中,单选框首先要入组,在组内唯一选择
新建单选框RadioButton:
//单选框 JRadioButton jRadioB1 = new JRadioButton("JRadioB1"); JRadioButton jRadioB2 = new JRadioButton("JRadioB2"); JRadioButton jRadioB3 = new JRadioButton("JRadioB3");
单选框入组:
//单选框入组,确保一组内只有一个单选框被选中 ButtonGroup group = new ButtonGroup(); group.add(jRadioB1); group.add(jRadioB2); group.add(jRadioB3);
装入面板和容器中:
//装入面板 JPanel jPanel1 = new JPanel(); jPanel1.setLayout(new GridLayout(3,1)); jPanel1.add(jRadioB1); jPanel1.add(jRadioB2); jPanel1.add(jRadioB3); //装入容器 contentPane.add(jPanel1,BorderLayout.NORTH);
复选框
复选框即一个定义域内可以有多个选择,比如我们的爱好,可以是唱歌,也可以是跳舞,也可以是篮球,难道有人只能有一个爱好嘛
复选框没有入组的操作,它不需要限定一个组只能由一个选择的选项所以不需要入组
新建复选框:
//复选框 JCheckBox jcBox1 = new JCheckBox("JCBox1"); JCheckBox jcBox2 = new JCheckBox("JCBox2");
装入面板中:
//装入面板 JPanel jPanel2 = new JPanel(); jPanel2.add(jcBox1,BorderLayout.NORTH); jPanel2.add(jcBox2,BorderLayout.SOUTH); contentPane.add(jPanel2,BorderLayout.SOUTH);
五.下拉框和列表框
下拉框和列表框展示的一般都是多个数据,如果数据比较少就不需要使用这两种按钮框了
下拉框会先隐藏一大部分数据,显示第一行,当你选择的时候在展示所有的数据,选择完了以后,就会收起来
- 创建下拉框JComboBox:
//创建JComboBox JComboBox box = new JComboBox();
往下来菜单中装填数据:
//装填数据,首行填null是个人习惯,也可以直接填数据 box.addItem(null); box.addItem("神里凌中"); box.addItem("神里凌华"); box.addItem("神里凌人"); box.addItem("神里凌民");
列表就是一下全部展示所有的数据,然后选择
- 创建列表JList:
//在字符串数组中预存数据 String[] num={"芙宁纳","拉维莱特","莱欧私利"}; //创建列表,需要传入数据,可以是字符串数字或链表,或集合 JList jList = new JList(num);
添加到面板或窗体:
//装入面板或窗体 jPanel2.add(jList);
六.文本框,密码框,文本域
文本框一般装的就是单独的一行文本数据
文本框的创建:
//文本框 JTextField t1 = new JTextField("i am gold"); //规定文本框长度 JTextField t2 = new JTextField("yep,you are right",20);
密码框也是文本框,但是它比较特殊,默认输入的数据会被小圆点替换,也可以自定义被替换的字符:
//密码框 JPasswordField password = new JPasswordField(); //替换输入的数据显示为* password.setEchoChar('*');
文本域就是多行文本框,可以支持大量的文本输入
文本域的创建:
//文本域,并设置大小为20行10列 JTextArea area = new JTextArea(20,10);