1、创建容器和面板
package day05;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
//JFrame窗口应用
public class JFrameDemo {
public static void main(String[] args) {
//创建窗口对象
JFrame frame=new JFrame("用户注册");
//设置窗口大小
frame.setSize(600,600);
//设置窗口关闭时退出运行程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口的显示的位置
frame.setLocationRelativeTo(null);
//创建面板对象 Jpanel(容器
JPanel panel=new JPanel();
//创建JLabel的标签,JLabel是组件
JLabel label=new JLabel("用户名");
//向面板添加组件
panel.add(label);
//将面板添加到窗口
frame.add(panel);
//显示窗口
frame.setVisible(true);
}
}
测试:
2、改进
更多时候主函数最好不要写这么多内容,因此可将面板另起一类进行编写。同时通过测试类进行测试(启动类)。
代码如下
窗口类(添加组件等):
package day05;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
public class MyFrame extends JFrame{
public MyFrame() {
//创建面板JPanel
JPanel p=new JPanel();
//向面板添加组件
JLabel label=new JLabel("用户名:");
label.setPreferredSize(new Dimension(60,30));
//设置背景为不透明
label.setOpaque(true);
//设置背景颜色
label.setBackground(Color.gray);
//20表示一个字符的计算单位,并不是表示字符个数
JTextField textField=new JTextField(20);
textField.setPreferredSize(new Dimension(0,35));
//创建JBUTTON对象
JButton btn=new JButton("登录");
//创建单选按钮
JRadioButton rb=new JRadioButton("男");
JRadioButton rb1=new JRadioButton("女");
//添加复选框
JCheckBox chb=new JCheckBox("听音乐");
JCheckBox chb1=new JCheckBox("唱歌");
JCheckBox chb2=new JCheckBox("看电影");
JCheckBox chb3=new JCheckBox("睡觉");
//添加下拉列表<E> <>泛型 E占位符
JComboBox<String> jcb=new JComboBox<String>();
//给下拉列表添加数据项
jcb.addItem("珠海市");
jcb.addItem("如皋市");
jcb.addItem("广州市");
//添加密码输入框
JPasswordField password=new JPasswordField("密码");
//设置密码输入框的宽度
password.setPreferredSize(new Dimension(100,30));
//添加这个JLabel到密码输入框的前面
JLabel label1=new JLabel("请输入密码");
//创建开关对象
JToggleButton btn2=new JToggleButton("开关");
//JTextArea
JTextArea area=new JTextArea("这是文本框");
area.setPreferredSize(new Dimension(100,100));
//给文本域添加内容
area.setText("今天是个好日子");
//DefaultListModel<String> listModel=new DefaultListModel<>();
String[] data= {"小明","小刘","小芳"};
//创建列表对象
JList<String> jList=new JList<String>();
//给jList添加数据
jList.setPreferredSize(new Dimension(200,200));
//将两个组件添加到面板中
p.add(label);
p.add(textField);
p.add(btn);
p.add(rb);
p.add(rb1);
p.add(chb);
p.add(chb1);
p.add(chb2);
p.add(chb3);
p.add(jcb);
p.add(label1);
p.add(password);
p.add(btn2);
p.add(area);
p.add(jList);
//this表示当前类对象
this.add(p);
}
}
启动类(用于测试):
package day05;
import javax.swing.JFrame;
public class TestFrame01 {
public static void main(String[] args) {
//创建窗口
MyFrame mf=new MyFrame();
//给窗口设置标题
mf.setTitle("用户登录");
mf.setSize(400, 300);
mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mf.setVisible(true);
}
}
测试:
3、事件的相关操作
事件:事件可以理解为用户在某一时刻做的某种操作,比如鼠标点击按钮,按下或弹起。
代码:(本代码实现监测用户输入的内容,传入到文本框中)
1、窗口类:
package day05;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
/*
* 组件和事件
*/
public class MyFrame2 extends JFrame{
//将控件放到类中
JLabel label=new JLabel("用户名");
JTextField text=new JTextField(16);
JButton btn=new JButton("登录");
JTextArea area=new JTextArea();
//创建对象时执行构造函数,初始化数据
public MyFrame2() {
//创建面板
JPanel panel=new JPanel();
//设置文本域的宽高
area.setPreferredSize(new Dimension(200,200));
area.setText("数据显示区域");
//向面板添加组件
panel.add(label);
panel.add(text);
panel.add(btn);
panel.add(area);
//给按钮添加事件
/*
* 事件是什么?
* 事件可以理解为用户在某一时刻做的某种操作
* 比如:鼠标点击按钮,按下,弹起
*
*/
MyActionListener myListener=new MyActionListener();
btn.addActionListener(myListener);
this.add(panel);
}
private class MyActionListener implements ActionListener {
@Override
//点击按钮之后要处理的业务,就写在这个方法中
//这个方法由系统来调
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//获取文本输入信息
String str=text.getText();
String str1=area.getText();
//str1="";//清空
area.setText("");
area.setText(str);
}
}
}
2、测试类:
package day05;
import javax.swing.JFrame;
public class Test02 {
public static void main(String[] args) {
//创建窗口
MyFrame2 mf=new MyFrame2();
//给窗口设置标题
mf.setTitle("测试");
mf.setSize(400, 300);
mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mf.setVisible(true);
}
}
测试:
总结:老师有说这种技术目前已不常用,但当前作为初学者,还是要把基础夯实一点的。