常用方法:
注意:在实际使用JFrame的时候,都是用自定义类来继承JFrame,然后在自定义类的构造方法中对窗体进行初始化
常用方法与上面类似
示例代码:保证弹出对话框后阻塞父窗体
package Demo01;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Demo extends JDialog{
public Demo(JFrame frame) {
/*
*第一个参数:父窗体对象
*第二个参数:对话框标题
* 第三个参数:是否阻塞父窗体
*/
super(frame,"对话框",true);
//获取对话框窗体容器
Container c = getContentPane();
//添加一个对话框
c.add(new JLabel("这是一个对话框"));
//设置对话框窗体的坐标和大小
setBounds(100,100,100,100);
}
public static void main(String[] args) {
//创建一个窗体
JFrame f = new JFrame("父窗体");
//设置窗体的坐标和大小
f.setBounds(50,50,300,300);
//获取窗体f的容器
Container c = f.getContentPane();
//创建一个按钮
JButton btn = new JButton("弹出对话框");
//使用流布局设置布局
c.setLayout(new FlowLayout());
//将按钮添加到窗体中
c.add(btn);
//设置窗体可见
f.setVisible(true);
//设置窗体点击x号关闭程序
f.setDefaultCloseOperation(EXIT_ON_CLOSE);
//对按钮添加监听事件
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Demo dialog = new Demo(f);
dialog.setVisible(true);
}
});
}
}
作用:在窗体上添加文字或图片
常用方法:
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyJFrame extends JFrame {
//创建标签的引用
private JLabel label01;
private JLabel label02;
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("JLabel组件");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
label01 = new JLabel("你好");
label01.setSize(200,100);
label01.setLocation(0,0);
//字体的大小:以磅作为单位
//setFont是很多组件都有的
label01.setFont(new Font("微软雅黑", Font.BOLD, 40));
label02 = new JLabel();
label02.setSize(300,300);
label02.setLocation(220,0);
//在标签中添加图片
//图片本身的像素大小 > 标签的大小:只显示图片的一部分
//在实际开发中,我们会首先设计好界面,然后然后确定好图片的大小,用制图软件去改变图片的像素大小
label02.setIcon(new ImageIcon("前进.png"));
//为鼠标进入标签区域变换形状
//Cursor类表示鼠标的各种形状,可以通过Cursor类的静态属性当作参数指定形状
label02.setCursor(new Cursor(Cursor.HAND_CURSOR));
//为标签添加tip提示框:即鼠标放在标签上,就会显示提示框
label02.setToolTipText("这是一个Tip");
container.add(label01);
container.add(label02);
}
public static void main(String[] args) {
MyJFrame frame =new MyJFrame();
frame.setVisible(true);
}
}
作用:输入单行文本或密码
常用方法:
import java.awt.Container;
import java.awt.Font;
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.JPasswordField;
import javax.swing.JTextField;
public class MyJFrame extends JFrame {
//创建标签的引用
private JLabel userName_Label;
private JLabel password_Label;
private JTextField userName_TextField;
private JPasswordField passwordField;
private JButton login_Button;
private JButton cancel_Button;
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("JLabel组件");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
//对6个组件进行实例化
userName_Label = new JLabel("用户名");
password_Label = new JLabel("密码");
userName_TextField = new JTextField();
passwordField = new JPasswordField();
login_Button = new JButton("登录");
cancel_Button = new JButton("取消");
//设置用户名标签的大小、位置、字体
userName_Label.setSize(70,40);
userName_Label.setLocation(100,60);
userName_Label.setFont(new Font("微软雅黑",Font.PLAIN,20));
//设置密码标签的大小、位置、字体
password_Label.setSize(70,40);
password_Label.setLocation(100,160);
password_Label.setFont(new Font("微软雅黑",Font.PLAIN,20));
//设置用户名输入框的大小、位置
userName_TextField.setSize(300,40);
userName_TextField.setLocation(200,60);
//设置文本输入框中的限制字符的个数,该方法对null布局不起作用
//只能输入5个字符(在非null布局下),但是每个字符的宽度不一样,该方法,以字符m为标准限制字符个数
userName_TextField.setColumns(5);
//实现在用户名输入框中按下回车键时,光标切换到密码输入框中
userName_TextField.addActionListener(new ActionListener() { //文本框中使用频率最高的事件是按下回车键
@Override
public void actionPerformed(ActionEvent e) {
//将光标切换到密码框当中
passwordField.requestFocus();
}
});
//设置密码输入框的大小、位置
passwordField.setSize(300,40);
passwordField.setLocation(200,160);
//设置密码输入框中的回显字符,即在密码框中显示的字符
passwordField.setEchoChar('*');
//实现在密码输入框中按下回车后直接登录
passwordField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login_Button.doClick(); //点击按钮
}
});
//设置登录按钮的大小和位置
login_Button.setSize(150,40);
login_Button.setLocation(130,240);
login_Button.setFont(new Font("微软雅黑",Font.PLAIN,20));
//模拟登录
login_Button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String userName = userName_TextField.getText();
String password = new String(passwordField.getPassword());
System.out.println("用户名:"+userName);
System.out.println("密码:"+password);
System.out.println("登录中。。。");
}
});
//设置取消按钮的大小和位置
cancel_Button.setSize(150,40);
cancel_Button.setLocation(320,240);
cancel_Button.setFont(new Font("微软雅黑",Font.PLAIN,20));
//将6个组件添加到界面容器当中
container.add(userName_Label);
container.add(password_Label);
container.add(passwordField);
container.add(userName_TextField);
container.add(login_Button);
container.add(cancel_Button);
}
public static void main(String[] args) {
MyJFrame frame =new MyJFrame();
frame.setVisible(true);
}
}
(3)文本区JTextArea
复选框和按钮有一个共同的祖先:AbstractButton
常用方法:
复选框本身就是一个按钮,只要点在按钮区域点击哪里都是一样的,都会被选中
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class MyJFrame extends JFrame {
//作用一:检查框
private JCheckBox confirm_CheckBox;
private JButton next_Button;
//作用二:
private String[] city_names;
private JCheckBox[] cities_CheckBoxs;
private JButton ok_Button;
private JLabel cities_Label;
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("复选框演示");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
//对组件进行实例化
confirm_CheckBox = new JCheckBox("我已经阅读并接受条款");
next_Button = new JButton("下一步");
cities_Label = new JLabel();
city_names = new String[]{"北京","上海","广州","深圳"};
cities_CheckBoxs = new JCheckBox[city_names.length];
ok_Button = new JButton("提交");
//设置复选框的大小、位置、字体
confirm_CheckBox.setSize(250, 40);
confirm_CheckBox.setLocation(30, 30);
confirm_CheckBox.setFont(new Font("微软雅黑",Font.PLAIN,20));
//设置复选框选中按钮为可用状态,复选框未被选中为不可用状态
// confirm_CheckBox.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// //复选框是否被选中
// boolean flag = confirm_CheckBox.isSelected();
// next_Button.setEnabled(flag);
// }
// });
confirm_CheckBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//复选框是否被选中
boolean flag = confirm_CheckBox.isSelected();
next_Button.setEnabled(flag);
}
});
//设置按钮的大小、位置、字体、不可见
next_Button.setSize(100, 40);
next_Button.setLocation(30, 80);
next_Button.setFont(new Font("微软雅黑",Font.PLAIN,20));
next_Button.setEnabled(false);
//设置标签
cities_Label.setSize(200, 40);
cities_Label.setLocation(30, 150);
cities_Label.setFont(new Font("微软雅黑",Font.PLAIN,20));
//设置复选框
for(int i=0;i
待补充
待补充
常见方法:
列表框只是展示数据的窗口,我们看到的列表框的数据并不是来自于列表本身,这些数据来自于它所创建的数据容器
有三种可以传递给列表的数据容器
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
public class MyJFrame extends JFrame {
private JLabel select_Label;
private JList left_List;
//String[] leftData;
//Vector leftData;
DefaultListModel leftData;
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("创建列表框演示");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
//要传递给JList的数据容器
//leftData = new String[]{"关羽","赵云","黄忠","马超","魏延","张飞"};
//leftData =new Vector(); //Vector并不能像数组一次性添加数据,必须通过add方法添加
//leftData.add("孙悟空");
//leftData.add("猪八戒");
//leftData.add("沙僧");
leftData = new DefaultListModel();
leftData.addElement("孙悟空");
leftData.addElement("猪八戒");
leftData.addElement("沙僧");
//对组件进行实例化
select_Label = new JLabel("你准备带谁出征?");
//left_List = new JList(leftData);
//left_List = new JList();
//left_List.setListData(leftData);
//left_List = new JList(leftData);
left_List = new JList();
left_List.setModel(leftData);
//设置标签
select_Label.setSize(200, 40);
select_Label.setLocation(30, 30);
select_Label.setFont(new Font("微软雅黑",Font.PLAIN,20));
//设置列表
left_List.setSize(200, 240);
left_List.setLocation(30, 80);
left_List.setFont(new Font("微软雅黑",Font.PLAIN,20));
left_List.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
//将6个组件添加到界面容器当中
container.add(select_Label);
container.add(left_List);
}
public static void main(String[] args) {
MyJFrame frame =new MyJFrame();
frame.setVisible(true);
}
}
创建树形组件,只能是先添加根结点,然后再逐层去添加子节点
此种方式用户不能新增,删除任何结点
import java.awt.Container;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class MyJFrame extends JFrame {
private JTree familyTree;
private JScrollPane family_JScrollPane;
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("创建列表框演示");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
//创建一个根节点
DefaultMutableTreeNode root = new DefaultMutableTreeNode("曹操");
DefaultMutableTreeNode a1 = new DefaultMutableTreeNode("曹昂");
DefaultMutableTreeNode a2 = new DefaultMutableTreeNode("曹丕");
DefaultMutableTreeNode a3 = new DefaultMutableTreeNode("曹植");
DefaultMutableTreeNode a4 = new DefaultMutableTreeNode("曹彰");
root.add(a1);
root.add(a2);
root.add(a3);
root.add(a4);
DefaultMutableTreeNode b1 = new DefaultMutableTreeNode("曹睿");
DefaultMutableTreeNode b2 = new DefaultMutableTreeNode("曹霖");
DefaultMutableTreeNode b3 = new DefaultMutableTreeNode("曹志");
a2.add(b1);
a2.add(b2);
a3.add(b3);
DefaultMutableTreeNode c1 = new DefaultMutableTreeNode("曹芳");
b1.add(c1);
//创建树形组件
familyTree = new JTree(root);
familyTree.setFont(new Font("微软雅黑",Font.PLAIN,20));
//创建滚动面板
family_JScrollPane = new JScrollPane(familyTree);
family_JScrollPane.setSize(300,250);
family_JScrollPane.setLocation(30, 30);
container.add(family_JScrollPane);
}
public static void main(String[] args) {
MyJFrame frame =new MyJFrame();
frame.setVisible(true);
}
}
常用方法:
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import javax.xml.transform.Templates;
public class MyJFrame extends JFrame {
private JTree dynTree;
private JScrollPane dyn_JScrollPane;
private DefaultMutableTreeNode rooTreeNode;
private DefaultMutableTreeNode selectedNode;
private JTextField nodeName_TextField;
private JButton createButton;
private JButton renameButton;
private JButton deleteButton;
private TreePath path; //用户选择的结点到根结点的路径
//在构造界面的时候就进行初始化界面
public MyJFrame() {
init();
}
//初始化界面
private void init()
{
//设置窗体
this.setSize(600,400);//设置窗体大小
this.setLocationRelativeTo(null);//设置窗体居中显示
this.setTitle("创建列表框演示");//设置窗体标题
this.setDefaultCloseOperation(EXIT_ON_CLOSE);//设置点击窗体x号时退出程序
Container container=this.getContentPane();
container.setLayout(null);
//实例化组件
rooTreeNode = new DefaultMutableTreeNode("根节点"); //创建根节点
dynTree = new JTree(rooTreeNode); //创建一颗以rootTreeNode为根节点的树形组件
dyn_JScrollPane = new JScrollPane(dynTree);
createButton = new JButton("新增");
deleteButton = new JButton("删除");
renameButton = new JButton("修改");
nodeName_TextField = new JTextField();
//设置树形组件
dynTree.setFont(new Font("微软雅黑",Font.PLAIN,18));
//设置树形组件的单选模式,只能同时被选中一个结点
//先获得树形组件的选择模型对象,然后选择对象模型的单选模式
dynTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//为树形组件添加选中结点的监听器
dynTree.addTreeSelectionListener(new TreeSelectionListener() {
//一旦用户选中结点的状态发生变化,立刻执行此方法
//用户必须两次选择的结点不同才会起作用,因为这样才代表结点状态改变
@Override
public void valueChanged(TreeSelectionEvent e) {
//当我们从树形组件上选择了一条结点的时候,那么从根结点到它的路径是确定的(因为是单继承)
path = e.getPath(); //获得根节点到被选中的结点的唯一路径
}
});
//设置滚动面板
dyn_JScrollPane.setSize(350, 250);
dyn_JScrollPane.setLocation(200,30);
dyn_JScrollPane.setFont(new Font("微软雅黑",Font.PLAIN,18));
//设置文本框
nodeName_TextField.setSize(80, 30);
nodeName_TextField.setLocation(290,300);
nodeName_TextField.setFont(new Font("微软雅黑",Font.PLAIN,18));
//设置新增按钮
createButton.setSize(80, 30);
createButton.setLocation(290,300);
createButton.setFont(new Font("微软雅黑",Font.PLAIN,18));
createButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//获得树形组件中被选中的结点
//这个方法的返回值是Object类型,此处需要强制类型转换
selectedNode = (DefaultMutableTreeNode)dynTree.getLastSelectedPathComponent();
String nameString = nodeName_TextField.getText();
if(checkNode_or_checkInput(selectedNode,nameString))
{
selectedNode.add(new DefaultMutableTreeNode(nameString));
//展开被选中结点的路径上的所有结点
dynTree.expandPath(path);
//当我们给树形组件新增一个结点的时候,树形图上不会立刻显示新增的结点
//调用以下方法刷新树形组件
dynTree.updateUI();
//创建之后清空文本域
nodeName_TextField.setText("");
}
}
});
//设置删除按钮
deleteButton.setSize(80, 30);
deleteButton.setLocation(380,300);
deleteButton.setFont(new Font("微软雅黑",Font.PLAIN,18));
deleteButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
selectedNode = (DefaultMutableTreeNode)dynTree.getLastSelectedPathComponent();
if(selectedNode == null)
{
System.out.println("请选中一个结点");
return;
}
if(selectedNode.isRoot())
{
System.out.println("不能删除根节点哦");
return;
}
selectedNode.removeFromParent();
dynTree.updateUI();
}
});
//设置修改按钮
renameButton.setSize(80, 30);
renameButton.setLocation(470,300);
renameButton.setFont(new Font("微软雅黑",Font.PLAIN,18));
renameButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//获得树形组件中被选中的结点
//这个方法的返回值是Object类型,此处需要强制类型转换
selectedNode = (DefaultMutableTreeNode)dynTree.getLastSelectedPathComponent();
String nameString = nodeName_TextField.getText();
//不将上述两行代码进行封装的原因是因为上面两行是采集数据,而checkNode_or_checkInput是验证数据
//从逻辑上来说,我们不应该把采集数据和验证数据放在一个功能中
if(checkNode_or_checkInput(selectedNode,nameString)){
selectedNode.setUserObject(nameString);
dynTree.updateUI();
//修改之后清空文本域
nodeName_TextField.setText("");
}
}
});
//设置文本域
nodeName_TextField.setSize(80, 30);
nodeName_TextField.setLocation(200,300);
nodeName_TextField.setFont(new Font("微软雅黑",Font.PLAIN,18));
//将组件添加到容器中
container.add(dyn_JScrollPane);
container.add(createButton);
container.add(deleteButton);
container.add(renameButton);
container.add(nodeName_TextField);
}
public static void main(String[] args) {
MyJFrame frame =new MyJFrame();
frame.setVisible(true);
}
//检验用户是否选择了结点或进行了输入
private boolean checkNode_or_checkInput(DefaultMutableTreeNode node,String name)
{
//判断用户是否选择了一个结点
if(node == null)
{
System.out.println("请选择一个结点");
return false;
}
//判断用户是否进行了输入
if("".equals(name))
{
System.out.println("请填写结点名称");
return false;
}
return true;
}
}