首先我们要了解swing组件有哪些
JButton;代表按钮,按钮里面可以放图片和文字
JCheckBox;代表复选框组件
JComBox;代表的是下拉列表框
JFrame;代表框架类
JDialog;对话框
JLabel;标签组件
JButton;按钮组件
JRadioButton;单选钮组件
JList;显示一系列内容的组件
JTextField;文本框
JPasswordField;密码框
JTextArea;多行文本框,文本域
JOpionPanel;对话框
以上组件的方法和用处大多是一致的,所以就不举例了,我们下面看综合实例即可知道他们的用处
贴上一个简单的用户注册信息窗体,里面包含了JLabel,JCheckBox,JButton,JRadioButton组件的使用
package demo;
import java.awt.*;
import javax.swing.*;
public class Demo3 extends JFrame{
JLabel jl1,jl2;
JCheckBox jc1,jc2,jc3;
JRadioButton jr1,jr2;
JButton jb1,jb2;
JPanel jp1,jp2,jp3;
public static void main(String[] args) {
// TODO Auto-generated method stub
new Demo3();
}
public Demo3(){
//初始化组件
jl1=new JLabel("你的兴趣爱好");
jl2=new JLabel("你的性别");
jc1=new JCheckBox("篮球");
jc2=new JCheckBox("足球");
jc3=new JCheckBox("羽毛球");
jr1=new JRadioButton("男");
jr2=new JRadioButton("女");
ButtonGroup bGroup=new ButtonGroup();
bGroup.add(jr1);
bGroup.add(jr2);
jb1=new JButton("注册");
jb2=new JButton("取消");
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//组件的合并
jp1.add(jl1);
jp1.add(jc1);
jp1.add(jc2);
jp1.add(jc3);
jp2.add(jl2);
jp2.add(jr1);
jp2.add(jr2);
jp3.add(jb1);
jp3.add(jb2);
//设置布局管理器的模式
this.setLayout(new GridLayout(3,1));
this.add(jp1);
this.add(jp2);
this.add(jp3);
//设置属性
this.setTitle("注册用户信息");
this.setSize(300, 150);
this.setLocation(200, 200);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
上面的案例包括了布局管理器的使用,接下来让我们来学习一下常用的布局管理器有哪几种
边界布局管理;BorderLayout
流式布局管理;FlowLayout
网格布局管理;GridLayout
一般我们知道以上3种就可以了,在JFrame中,默认的是BorderLayout布局,而BorderLayout的特性是它以中,东,南,西,北的方式来布局,我们在放置组件时往往通过 .方向 (如:.SOUTH)来确定位置.
FlowLayout它是并排以行数来放置组件的,位置不够时自动换行。
GridLayout顾名思义就是网状来布局组件,通常我们在设置布局为网格布局时,往往会带上它的行列数。如:setLayout(new GridLayout(3,1)),设置了一个3行1列的网格布局。
学完了组件和布局,下面我们就来看下JPanel的使用
首先,JPanel也是一个容器,它默认的布局就是FlowLayout,它的作用往往是为了解决复杂布局的使用,下面看个例子来体验下综合布局中使用JPanel的效果。
package demo;
import java.awt.*;
import javax.swing.*;
public class Demo1 extends JFrame{
JPanel jp1,jp2;
JButton jb1,jb2,jb3,jb4,jb5,jb6;
public static void main(String[] args) {
new Demo1();
}
public Demo1(){
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里面去
jp1.add(jb1);
jp1.add(jb2);
jp2.add(jb3);
jp2.add(jb4);
jp2.add(jb5);
//把所有布局放到JFrame
this.add(jp1,BorderLayout.NORTH);
this.add(jb6,BorderLayout.CENTER);
this.add(jp2,BorderLayout.SOUTH);
//设置JFrame的属性
this.setTitle("多布局的混合使用");
this.setLocation(200, 200);
this.setSize(300, 150);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
JPanel的作用不中体现在一方面,后面我们学习到java绘图技术也能用到
好了,最后我们就学习一下监听器吧,所谓监听器就是组件的监听事件
在这里我还举例最常用的监听来说,因为这一章节的内容都是千篇一律的用法,我们掌握了最基本的就可以了。
/**
* 登陆窗体的实现,并响应按钮事件
*/
package com.demo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Test3 extends JFrame implements ActionListener{
JLabel jla1,jla2;
JTextField jf;
JPasswordField jps;
JButton jb1,jb2;
JPanel jp1,jp2,jp3;
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test3();
}
public Test3(){
jla1=new JLabel("用户名");
jla2=new JLabel("密 码");
jf=new JTextField(10);
jps=new JPasswordField(10);
jb1=new JButton("登陆");
jb1.addActionListener(this);
jb2=new JButton("退出");
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
//合并组件
jp1.add(jla1);
jp1.add(jf);
jp2.add(jla2);
jp2.add(jps);
jp3.add(jb1);
jp3.add(jb2);
//设置布局管理器
this.setLayout(new GridLayout(3,1));
//增加到管理器中
this.add(jp1);
this.add(jp2);
this.add(jp3);
//设置Jframe的相关属性
this.setTitle("登陆");
this.setSize(300, 200);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(jf.getText().equals("")|| jps.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "账号名或者密码不能为空");
}
else
JOptionPane.showMessageDialog(null, "登陆成功");
}}
/**
* 用按钮把数组的内容添加到下拉列表框里
*/
package com.demo;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Test2 extends JFrame implements ActionListener{
JButton jButton;
JComboBox jcBox;
String []str={"hello","what","bitch","fuck"};
public static void main(String[] args) {
// TODO Auto-generated method stub
new Test2();
}
public Test2(){
jButton=new JButton("add");
jButton.addActionListener(this);
jcBox=new JComboBox();
this.add(jcBox,BorderLayout.NORTH);
this.add(jButton,BorderLayout.SOUTH);
this.setTitle("hello");
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
for(int i=0;i<str.length;i++){
jcBox.addItem(str[i]);
}
}
}
最后说一句,现在java绘图和swimng相对不那么重要了,但基本的我们还是要了解的。