Swing基础

常用窗体

JFrame

JFrame窗体是一个容器,是swing程序中各个组件的载体
以下实例是继承JFrame创建一个简单的窗体

import javax.swing.*;
import java.awt.*;

public class CreateJFrame extends JFrame {
    public void createJF(String title){
        JFrame jf = new JFrame(title);//实例化一个JFrame对象
        Container container = jf.getContentPane();//获取一个容器
        JLabel jl = new JLabel("这是一个JFrame窗体");//创建一个标签
        jl.setHorizontalAlignment(SwingConstants.CENTER);//使标签文字在窗体中居中显示,等价于jl.setHorizontalAlignment(0);
        container.add(jl);//将标签添加到容器中
        container.setBackground(Color.cyan);//设置窗体背景颜色
        jf.setVisible(true);//使窗体可见
        jf.setSize(1400,700);//设置窗体大小
        jf.setResizable(false);//设置窗体不能调整大小
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式,等价于jf.setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new CreateJFrame().createJF("创建一个窗体");
    }
}

下面是效果图

在这里插入图片描述

窗口关闭方式有四种,在这里简单说一下区别(括号里是与之等价的书写方式)

WindowConstants.DO_NOTHING_ON_CLOSE(0)//控制台结束程序运行,窗体才会关闭
WindowConstants.HIDE_ON_CLOSE(1)//控制台一直运行
WindowConstants.DISPOSE_ON_CLOSE(2)//控制台延时结束运行
WindowConstants.EXIT_ON_CLOSE(3)//控制台立即结束运行

JDialog

JDialog窗体是Swing组件中的对话框,是从一个窗体中弹出另一个窗体
以下实例是以Jframe为基础,实现弹出窗体功能

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class MyJDialog extends JDialog {
    public MyJDialog(MyJFrame m){
        //实例化一个JDialog窗体,指定对话框的父类窗体(即有弹出按钮的那个窗体),标题及类型
        super(m,"这是一个对话框",true);
        Container container = getContentPane();//创建一个容器
        container.add(new JLabel("这是一个对话框"));
        setBounds(120,120,400,400);//设置对话框的坐标及大小
    }
}
public class MyJFrame extends JFrame{
    public MyJFrame(){
        Container container = this.getContentPane();//this可以省略
        container.setLayout(null);//取消布局管理器(后面会说)
        JLabel jl = new JLabel("这是一个JFrame窗体");
        jl.setHorizontalAlignment(0);
        container.add(jl);
        JButton jb = new JButton("弹出一个窗体");//创建一个按钮
        jb.setBounds(10,10,300,20);//按钮的坐标位置以及大小
        jb.addActionListener(new ActionListener() {//创建一个按钮的单击事件
            @Override
            public void actionPerformed(ActionEvent e) {
                new MyJDialog(MyJFrame.this).setVisible(true);//设置JDialog窗体可视
            }
        });
        container.add(jb);//创建的东西都需要添加到容器
        setSize(700,350);
        setVisible(true);
    }

    public static void main(String[] args) {
        new MyJFrame();
    }
}

下面是效果图

在这里插入图片描述

标签的使用

标签有五个常用构造方法
public class lable extends JFrame {

1.空白标签

public void lable0(){
       JLabel l = new JLabel();//创建一个什么都不带的标签对象
       l.setOpaque(true);//设置标签为不透明状态
       JFrame jf = new JFrame("一个空白标签对象");
       Container container = jf.getContentPane();
       container.setBackground(Color.BLUE);//设置JFrame窗口的背景颜色
       container.add(l);
       jf.setSize(500,500);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(3);
   }

第一张图是将标签不透明那行注释了,显示的是窗体的背景颜色,第二张是设置了标签不透明,显示的是标签的颜色
main方法中:new lable().lable0();

在这里插入图片描述
在这里插入图片描述

2.带图标的标签对象(图标在标签结束后有实例代码)

public void lable1(Icon icon){
       JLabel l = new JLabel(icon);//创建一个带图标的标签对象
       JFrame jf = new JFrame("带有图标的标签对象");
       Container container = jf.getContentPane();
       container.setBackground(Color.yellow);
       container.add(l);
       jf.setSize(500,500);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(3);
   }

main方法中:new lable().lable1(icon);

带图标的标签对象

3.带图标并设置图标水平对齐方式

public void lable2(Icon icon,int aliament) {
       JLabel l = new JLabel(icon, aliament);//创建一个带图标的标签对象,并设置标签内容水平对齐方式
       JFrame jf = new JFrame("带有图标的标签对象并设置标签内容水平对齐方式");
       Container container = jf.getContentPane();
       container.setBackground(Color.red);
       container.add(l);
       jf.setSize(500,500);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(3);
   }

main方法中:new lable().lable2(icon,2);//设置图标水平居左

在这里插入图片描述

4.带文本并设置文字水平对齐方式

public void lable3(String text,int aliament){
       JLabel l = new JLabel(text,aliament);//创建一个带文本标签对象,并设置标签内容水平对齐方式
       JFrame jf = new JFrame();
       Container container = jf.getContentPane();
       container.setBackground(Color.green);
       container.add(l);
       jf.setSize(500,500);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(3);
   }

main方法中:new lable().lable3(“带有文本的标签对象并设置标签内容水平对齐方式”,0);//文本居中

在这里插入图片描述

5.带文本、图标并设置标签内容水平对齐方式

public void lable4(Icon icon,String text,int aliament){
       JLabel l = new JLabel(text,icon,aliament);//创建一个带文本,带图标的标签对象,并设置标签内容水平对齐方式
       JFrame jf = new JFrame();
       Container container = jf.getContentPane();
       container.setBackground(Color.magenta);
       container.add(l);
       jf.setSize(500,500);
       jf.setVisible(true);
       jf.setDefaultCloseOperation(3);
   }

min方法中:new lable().lable4(icon,“带有文本和图标的标签并设置标签内容水平对齐方式”,0);//居中显示

在这里插入图片描述

补充:aliament的值所代表的位置
在这里插入图片描述
用值不当会报错:java.lang.IllegalArgumentException: horizontalAlignment,不要担心,换个数字再试试

图标的使用

图标是通过实现接口重写接口中三个重要方法绘制,用以下实例浅浅了解以下

class DrawIcon implements Icon{
   private int width;//定义图标的宽
   private int height;//定义图标的长

   public DrawIcon(int width, int height) {
       this.width = width;
       this.height = height;
   }

   @Override
   public void paintIcon(Component c, Graphics g, int x, int y) {
       g.fillOval(x,y,width,height);//该方法是在坐标(x,y)上画一个圆
   }

   @Override
   public int getIconWidth() {
       return this.width;
   }

   @Override
   public int getIconHeight() {
       return this.height;
   }
}

具体使用方式,在标签的main方法中写在首行:DrawIcon icon = new DrawIcon(150,150);//150是图标的长宽尺寸
也可以用图片填充图标

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class Imageicon  extends JFrame {
    public Imageicon(){
        Container container = getContentPane();
        JLabel jl = new JLabel("这是一个JLabel窗体",JLabel.CENTER);//创建一个标签
        URL url = Imageicon.class.getResource("icon.jpg");//获取图片所在的url(图片需手动复制到.class文件存放的文件夹中,图片不宜过大)
        Icon icon = new ImageIcon(url);//实例化icon对象
        jl.setIcon(icon);//为标签设置图片
        jl.setHorizontalAlignment(0);//设置文字放在标签的中间
        jl.setOpaque(true);//设置标签不透明
        container.add(jl);
        setSize(500,300);
        setVisible(true);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new Imageicon();
    }
}

java.lang.Class类中的getResource()方法可以获取资源文件的URL路径,这个路径是相对于类文件的(.class文件),所以可将图片文件与类文件放在同一目录中
以下是效果图:

在这里插入图片描述

常用布局管理器

1.绝对布局(硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式指定组件的位置)

//Container container = getContentPane();
//container.setLayout(null);//使窗体取消布局管理器的设置
//组件名.setBounds(x,y,width,height);//设置按钮的位置(坐标)和大小(宽高)
import javax.swing.*;
import java.awt.*;

public class layout extends JFrame {
    public layout(){
        Container container = getContentPane();
        container.setLayout(null);//取消布局管理器的设置
        JButton jb = new JButton("按钮1");
        JButton jb2 = new JButton("按钮2");
        jb.setBounds(50,45,400,200);
        jb2.setBounds(500,45,200,100);
        container.add(jb);
        container.add(jb2);
        setSize(1400,700);
        setVisible(true);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new layout();
    }

}

下图是以上代码的运行结果:

在这里插入图片描述

2.流布局管理器(按指定规则一行一行排列,根据窗体大小自动换行)

//public FlowLayout(摆放规则-->int,组件之间的水平间隔-->单位像素,组件之间的垂直间隔-->单位像素)
//摆放规则有三个值:left-->0(从左向右排列),center==>1(居中对齐排列),right==>2(从右向左排列),
import javax.swing.*;
import java.awt.*;

public class flowLayout extends JFrame {
    public flowLayout(){
        Container c = getContentPane();
        setLayout(new FlowLayout(2,10,10));
        for (int i = 0; i < 10; i++) {
            c.add(new JButton("button"+i));
        }
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new flowLayout();
    }
}

在这里插入图片描述

3.边界布局管理器(默认的布局)

//边界划分为:东(east)南(south)西(west)北(north)中(center)五大块
import javax.swing.*;
import java.awt.*;

public class borderLayout extends JFrame {
    //定义组件摆放位置的数组
    String[] border = {BorderLayout.CENTER,BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.EAST};
    //定义按钮的名字
    String[] button = {"CENTER","NORTH","SOUTH","WEST","EAST"};
    public borderLayout(){
        Container c = getContentPane();
        setLayout(new BorderLayout());
        for (int i = 0; i <border.length; i++) {
            c.add(border[i],new JButton(button[i]));
        }
        setVisible(true);
        setSize(600,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new borderLayout();
    }
}

在这里插入图片描述

4.网格布局管理器

//public GridLayout(行,列,水平间距,垂直间距)-->全部是int类型的参数
import javax.swing.*;
import java.awt.*;

public class gridLayout extends JFrame {
    public gridLayout(){
        Container c = getContentPane();
        setLayout(new GridLayout(3,3,10,10));
        for (int i = 0; i < 8; i++) {
            c.add(new JButton("button"+i));
        }
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new gridLayout();
    }
}

改变窗体大小,按钮也会跟着缩小
在这里插入图片描述
在这里插入图片描述

常用面板

1.JPanel面板

JPanel面板可以聚集一些组件来布局,也是一种容器,用一张图来理解:
下图是n行n列的网格布局中,每个单元格存放一个面板,面板中有使用了n行n列的网格布局,存放组件

在这里插入图片描述

用代码书写一个小程序

import javax.swing.*;
import java.awt.*;

public class jPanel extends JFrame {
    public jPanel(){
        Container c = getContentPane();
        //将整个容器(即窗体)设置为2行1列的网格布局,水平和垂直间隙均为10像素
        c.setLayout(new GridLayout(2,1,10,10));
        //初始化面板,设置为网格布局
        JPanel p1 = new JPanel(new GridLayout(1,3,10,10));
        JPanel p2 = new JPanel(new GridLayout(1,2,10,10));
        JPanel p3 = new JPanel(new GridLayout(1,2,10,10));
        JPanel p4 = new JPanel(new GridLayout(2,1,10,10));
        //为面板添加组件
        p1.add(new JButton("1"));
        p1.add(new JButton("2"));
        p1.add(new JButton("3"));
        p2.add(new JButton("4"));
        p2.add(new JButton("5"));
        p3.add(new JButton("6"));
        p3.add(new JButton("7"));
        p4.add(new JButton("8"));
        p4.add(new JButton("9"));
        //将面板添加到窗体
        c.add(p1);
        c.add(p2);
        c.add(p3);
        c.add(p4);
        //设置窗体
        setVisible(true);
        setSize(700,350);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jPanel();
    }
}

上面代码的组件是按照面板布局一一添加,可自行复制修改来加深理解

在这里插入图片描述

2.JScrollPane面板

JScrollPane面板是自带滚动条的面板,一个JScrollPane面板只能添加一个组件。如果需要添加多个组件,可以将组件布置在JPanel面板上,然后将JPanel面板添加到JScrollPane面板中(只能添加一个)。

import javax.swing.*;
import java.awt.*;

public class jScrollPane extends JFrame {
    public jScrollPane(){
        Container c = getContentPane();
        //创建一个20行50列的文本域组件
        JTextArea jt = new JTextArea(20,50);
        JScrollPane j = new JScrollPane(jt);//等于j.add(jt)
        c.add(j);
        setVisible(true);
        setSize(200,200);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jScrollPane();
    }
}

在这里插入图片描述

按钮组件

1.提交按钮组件

JButton组件的构造方法参数有text和icon,下面例子在窗体中指定一个带文本和图标的按钮

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class jButton extends JFrame {
    public jButton(){
        Container c = getContentPane();
        URL url = Imageicon.class.getResource("icon.jpg");
        Icon icon = new ImageIcon(url);
        setLayout(new GridLayout(1,3,10,10));
        JButton jb1 = new JButton("这是一个带有图标的按钮1",icon);
        JButton jb2 = new JButton("这是一个带有图标的按钮2",icon);
        jb2.setEnabled(false);//设置按钮不可用
        JButton jb3 = new JButton();
        jb3.setMaximumSize(new Dimension(434,101));//设置图片与按钮相同大小
        jb3.setIcon(icon);//为按钮设置图标
        jb3.setToolTipText("图片按钮");
        jb3.setHideActionText(true);//设置隐藏文本控件
        jb3.setBorderPainted(false);//设置按钮边界不显示
        jb3.addActionListener(new ActionListener() {//为按钮添加一个监听事件
            @Override
            public void actionPerformed(ActionEvent e) {
                
                JOptionPane.showMessageDialog(null,"弹出对话框");
            }
        });
        c.add(jb1);
        c.add(jb2);
        c.add(jb3);
        setVisible(true);
        setSize(2000,700);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jButton();
    }
}

在这里插入图片描述

2.单选按钮组件

JRadioButton默认是圆形图标,有text,icon,selected(默认选中)三个参数
下面写一个小例子

import javax.swing.*;
import java.awt.*;
import java.net.URL;

public class jRadioButton extends JFrame {
    public jRadioButton(){
        Container c = getContentPane();
        URL url = Imageicon.class.getResource("icon.jpg");
        Icon icon = new ImageIcon(url);
        setLayout(new GridLayout(4,1,10,10));
        JRadioButton j1 = new JRadioButton();
        JRadioButton j2 = new JRadioButton("单选按钮2");
        JRadioButton j3 = new JRadioButton("单选按钮3",true);//默认选中
        JRadioButton j4 = new JRadioButton("单选按钮4",icon);
        ButtonGroup bg1 = new ButtonGroup();//按钮组
        ButtonGroup bg2 = new ButtonGroup();
        bg1.add(j1);
        bg1.add(j2);
        bg2.add(j3);
        bg2.add(j4);
        //将按钮添加到窗体容器
        c.add(j1);
        c.add(j2);
        c.add(j3);
        c.add(j4);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jRadioButton();
    }
}

在这里插入图片描述

3.复选框组件

JCheckBox有text,icon,checked三个参数,下面用边界布局管理器写一个小实例

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class jCheckBox extends JFrame {
    public jCheckBox(){
        Container c = getContentPane();
        setLayout(new BorderLayout());
        URL url = Imageicon.class.getResource("icon.jpg");
        Icon icon = new ImageIcon(url);
        JCheckBox jc1 = new JCheckBox("1");
        JCheckBox jc2 = new JCheckBox();
        JCheckBox jc3 = new JCheckBox("3",true);
        JCheckBox jc4 = new JCheckBox("4",icon,true);
        JTextArea jt = new JTextArea(5,30);
        JScrollPane js = new JScrollPane(jt);
        JPanel p1 = new JPanel();
        JPanel p2 = new JPanel();
        p2.add(js);
        p1.add(jc1);
        p1.add(jc2);
        p1.add(jc3);
        p1.add(jc4);
        c.add(p1,BorderLayout.SOUTH);
        c.add(p2,BorderLayout.NORTH);
        jc1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jc1.isSelected()){
                    jt.append("复选框1被选中\n");
                }else{
                    jt.append("复选框1取消选中\n");
                }
            }
        });
        jc2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jc2.isSelected()){
                    jt.append("复选框2被选中\n");
                }else{
                    jt.append("复选框2取消选中\n");
                }
            }
        });
        jc3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jc3.isSelected()){
                    jt.append("复选框3被选中\n");
                }else{
                    jt.append("复选框3取消选中\n");
                }
            }
        });
        jc4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (jc4.isSelected()){
                    jt.append("复选框4被选中\n");
                }else{
                    jt.append("复选框4取消选中\n");
                }
            }
        });
        setVisible(true);
        setSize(400,200);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jCheckBox();
    }
}

刚开始写代码重复量非常大,熟悉之后可利用数组+循环提交代码实用

在这里插入图片描述

列表组件

1.下拉列表框组件

JComboBoxd的常用参数:ComboBoxModel模型,数组,Vector

import javax.swing.*;
import java.awt.*;

public class jComboBox extends JFrame {
    JComboBox<String> j = new JComboBox<>(new Myjc());
    JLabel jl = new JLabel("请选择:");
    public jComboBox(){
        Container c = getContentPane();
        c.setLayout(new FlowLayout());
        c.add(jl);
        c.add(j);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }
    public static void main(String[] args) {
        new jComboBox();
    }
}
class Myjc extends AbstractListModel<String> implements ComboBoxModel<String>{

    String selectedItem = null;
    String[] text = {
            "选项1",
            "选项2",
            "选项3",
            "选项4"
    };

    @Override
    public void setSelectedItem(Object anItem) {
        selectedItem = (String)anItem;
    }

    @Override
    public Object getSelectedItem() {
        return selectedItem;
    }

    @Override
    public int getSize() {
        return text.length;
    }

    @Override
    public String getElementAt(int index) {
        return text[index];
    }
}

这个例子传入的是一个ComboBoxModel模型数据

在这里插入图片描述

2.列表框组件

JList在窗体上占用固定大小,如果需要带有滚动条,可以将其放入盾冬面板中。有数组,Vector,ListModel模型三个可选参数

import javax.swing.*;
import java.awt.*;
import java.util.Vector;

public class jList extends JFrame {
    //本实例使用Vecoto类型数据作为列表框初始化参数
    public jList(){
        Container c = getContentPane();
        Vector v = new Vector();
        JList l = new JList(v);
        v.add("列表1");
        v.add("列表2");
        v.add("列表3");
        v.add("列表4");
        c.add(l);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jList();
    }
}

在这里插入图片描述

可以修改以下代码实现单击将选中的选项在文本框中显示


import javax.swing.*;
import javax.swing.event.ListDataListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class jList2 extends JFrame {
    //本实例使用Listodel对象作为参数,并做滚动条效果
    public jList2(){
        Container c = getContentPane();
        JTextField jf = new JTextField(20);
        c.setLayout(null);
        JList<String> l = new JList<>(new listModel());
        l.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (l.getValueIsAdjusting()) jf.setText(l.getSelectedValue()+"被选中");
            }
        });
        JScrollPane js = new JScrollPane(l);
        js.setBounds(10,10,100,100);//指定组件的位置和大小
        jf.setBounds(10,200,200,40);//指定组件的位置和大小
        c.add(js);
        c.add(jf);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jList2();
    }
}
class listModel extends AbstractListModel<String>{
    private String[] text = {
        "选项1", "选项2", "选项3", "选项4","选项5", "选项6", "选项7", "选项8", "选项9", "选项0",
    };

    @Override
    public int getSize() {
        return text.length;
    }

    @Override
    public String getElementAt(int index) {
        if (index<text.length) return text[index++];
        return null;
    }
}

在这里插入图片描述

import javax.swing.*;
import java.awt.*;

public class jList3 extends JFrame {
    //本实例使用DefaultListModel
    public jList3(){
        Container c = getContentPane();
        String[] text = {"选项1", "选项2", "选项3", "选项4","选项5", "选项6"};
        DefaultListModel df = new DefaultListModel();
        JList jl = new JList(df);
        for (int i = 0; i < text.length; i++) {
            df.addElement(text[i]);//为模型添加数据
        }
        c.add(jl);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jList3();
    }
}

在这里插入图片描述

列表框的其他功能就靠自己一个一个试啦!

文本组件

1.文本框组件

上面的例子2中用到了JTextField,和文本域相比,文本框是单行的
xx.setText(“内容”);用代码来修改文本内容
文本框.requestFocus();文本框获取焦点

2.密码框组件

JPasswordField,和文本框/文本域初始化方式相同
密码框.setEchoChar(‘回显字符’);//指定回显字符,默认是圆点

3.文本域组件

JTextArea,上文用到过
文本框.setLineWrap(true);//设置文本框自动换行

常用事件监听器

Swing事件模型中由3个分离的对象完成对事件的处理,分别是–>事件源,事件以及监听程序

1.动作事件监听

事件名称 ActionEvent
事件源 JButton JList JTextField等
监听接口 ActionListener
添加(删除)监听 add(remove)ActionListener()

2.焦点事件监听

**事件名称 FocusEvent
事件源 Component及派生类
监听接口 FocusListener
添加或删除和动作时间监听一致
一个小实例就看得明白啦

import javax.swing.*;
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

public class jdsj extends JFrame {
    public jdsj(){
        Container c = getContentPane();
        JTextField j1 = new JTextField("框1");
        JTextField j2 = new JTextField();
        j1.addFocusListener(new FocusListener() {
            @Override
            public void focusGained(FocusEvent e) {
                j2.setText("框1得到焦点");
            }

            @Override
            public void focusLost(FocusEvent e) {
                j2.setText("框1失去焦点");
            }
        });
        setLayout(null);
        j1.setBounds(10,10,200,40);
        j2.setBounds(10,100,200,40);
        c.add(j1);
        c.add(j2);
        setVisible(true);
        setSize(500,500);
        setDefaultCloseOperation(3);
    }

    public static void main(String[] args) {
        new jdsj();
    }
}

在这里插入图片描述
在这里插入图片描述

小结

	**本章主要讲解Swing基本要素,包括各种常用的组件、窗体、布局、事件监听等。**
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尢词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值