Swing入门笔记

一、常见的组件名
名称组件名样式
窗体JFrame在这里插入图片描述
对话框JDialog在这里插入图片描述
面板JPanel在这里插入图片描述
按钮JButton在这里插入图片描述
标签JLabel在这里插入图片描述
多选按钮JCheckBox在这里插入图片描述
单选按钮JRadioButton在这里插入图片描述
文本框JTextField在这里插入图片描述
密码框JPassWord在这里插入图片描述
下拉框JComBOX在这里插入图片描述
文本域JTextArea在这里插入图片描述
列表框JList在这里插入图片描述
小对话框JOptionPane在这里插入图片描述
二、关于Swing你必须要知道的事
  1. 上面所提到的组件都是封装好的类,你可以通过new的形式创建对象后对上面的组件的属性进行获取或修改
  2. 除了通过对象来调用以上类的方法外,你也可以新建一个类来继承以上任意一个类,然后在构造器里直接就可以调用。下面举个栗子。
import javax.swing.*;

public class Demo {
    JFrame f=new JFrame("我是一个窗体");//所有的组件都可以通过构造方法给组件取一个title
}
import javax.swing.*;

public class Demo extends JFrame {
    public Demo(){
        setTitle("我是一个窗体");//用继承的方法,直接在构造器里创建组件,所以用setTitle方法给组件添加标题
    }
}
  1. 所有的组件都可以通过构造方法给组件取一个title,或者用setTitle方法。
  2. 所有的组件基本上都有相类似的get和set方法(或者干脆方法名一样,功能一样),设置属性统统用set,获取某个值统统用get。
  3. 一般的在创建窗体时都要先设置两个属性,一个是窗体是否可见,一个是窗体是否可关闭。下面会一一说到
三、你可能会需要用到的方法

*即泛指各种组件的名称

方法功能
J* *=new J*()创建一个组件
*.setTitle()设置组件的标题
*.setBounds()设置组件的位置和尺寸
*.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)设置窗体可关闭
*.setVisible(true)设置窗体可见
*.setLayout()设置组件的布局
c.setBackground(Color.WHITE)设置组件的背景颜色
*.setText()设置组件的内容
*.setFont(new Font(“微软雅黑”,Font.LAYOUT_LEFT_TO_RIGHT,16))设置组件中的字体
*.add(*)添加组件到另一个组件中

下面具体讲解吧,感觉这样说不明白

创建窗体对象
  1. JFrame f=new JFrame("窗体标题")
  2. 或者直接继承JFrame
设置窗体可见

f.setVisible(true);//设置窗体可见

设置窗体可关闭

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口是否可以关闭

其中主要是EXIT_ON_CLOSE这个参数

设置窗体大小和位置

f.setBounds(540,200,800,600);//设置窗口大小和位置

获取窗体容器

Container c=j.getContentpane();//获取窗体容器

2、修改容器背景颜色
c.setBackground(Color.BLUE);

创建标签

JLabel la=new JLabel("这是一个标签")

给窗体添加组件

c.add(la);//添加组件
2、删除组件
c.remove(la );//删除组件
3、验证容器中的组件(相当于刷新)
c.validate();

固定窗体大小,使其不可变

f.setResizable(false);

创建一个按钮

JButton btn=new JButton("按钮");

设置布局

c.setLayout(new FlowLayout());//设置布局为流布局
c.setLayout(null);//设置布局绝对布局

添加动作监听

组件名.addActionListener(使用匿名对象进行操作);//添加动作监听

JButton btn=new JButton("按钮");
btu.addActionListener(new ActionListener(){
    public void actionperformed(ActionEvent e){
        new Demo;//Demo是写好的方法 
    }
}

这个可以普遍用到很多组件上,都是调用addActionListener方法,然后使用匿名内部类的方式实现ActionListener接口,并重写他的actionperformed方法。

阻塞

1.需要写一个类来继承JFrame类,然后在super();中分别添加三个参数。第一个是父窗体;第二个是对话框标题;第三个是bool变量,为true则阻塞。
2.或者写两个方法,然后通过子窗体的构造器来完成阻塞。举个栗子。
我们用窗体和对话框来演示一遍。
需求就是:在窗体里有一个按钮,点击过后会弹出一个对话框(用到动作监听)。如果我们不加阻塞,则既可以操作父窗体也可以操作对话框,一直点按钮的话就会一直弹出对话框,如果你这样搞这个显然是会被老板抄鱿鱼的,因此必须加个阻塞。ok上代码。
未加阻塞:

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

public class DialogDemo extends JDialog {

    public void dialog(){
        JDialog jDialog=new JDialog();//直接创建一个对话框。
        jDialog.setTitle("我是一个对话框");
        jDialog.setBounds(500,400,100,100);
        jDialog.setVisible(true);
    }
    public void frame(){
        JFrame f=new JFrame();
        f.setTitle("父窗体");
        f.setBounds(450, 180, 1000, 550);//设置窗体大小和位置
        f.setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体可关闭
        Container c=f.getContentPane();
        c.setBackground(Color.WHITE);//设置窗体的背景颜色
        JButton jb=new JButton("弹出对话框");
        jb.setBounds(450,180,100,50);
        jb.addActionListener(new ActionListener() {//添加监听
            @Override
            public void actionPerformed(ActionEvent e) {
                new DialogDemo().dialog();
            }
        });
        c.add(jb);
        f.setVisible(true);//设置窗体可见
    }

    public static void main(String[] args) {
        new DialogDemo().frame();
    }
}

结果:在这里插入图片描述
加阻塞:
方法一:

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

public class DialogDemo extends JDialog {

    public DialogDemo(JFrame f){
        super(f,"我是一个对话框",true);//方法一:继承JDialog后在构造器中通过super(三个参数)来阻塞
        setBounds(500,400,100,100);
        setVisible(true);
    }

    public static void main(String[] args) {
        JFrame f=new JFrame();
        f.setTitle("父窗体");
        f.setBounds(450, 180, 1000, 550);//设置窗体大小和位置
        f.setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体可关闭
        Container c=f.getContentPane();
        c.setBackground(Color.WHITE);//设置窗体的背景颜色
        JButton jb=new JButton("弹出对话框");
        jb.setBounds(450,180,100,50);
        jb.addActionListener(new ActionListener() {//添加监听
            @Override
            public void actionPerformed(ActionEvent e) {
                new DialogDemo(f);
            }
        });
        c.add(jb);
        f.setVisible(true);//设置窗体可见
    }
}

方法二:

import javax.swing.*;

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

public class DialogDemo{

    public void dialog(JFrame f){
        JDialog jDialog=new JDialog(f,"我是一个对话框",true);//方法二,普通方法,通过调用有参构造器来阻塞
        jDialog.setBounds(500,400,100,100);
        jDialog.setVisible(true);
    }
    public void frame(){
        JFrame f=new JFrame();
        f.setTitle("父窗体");
        f.setBounds(450, 180, 1000, 550);//设置窗体大小和位置
        f.setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体可关闭
        Container c=f.getContentPane();
        c.setBackground(Color.WHITE);//设置窗体的背景颜色
        JButton jb=new JButton("弹出对话框");
        jb.setBounds(450,180,100,50);
        jb.addActionListener(new ActionListener() {//添加监听
            @Override
            public void actionPerformed(ActionEvent e) {
                new DialogDemo().dialog(f);
            }
        });
        c.add(jb);
        f.setVisible(true);//设置窗体可见
    }

    public static void main(String[] args) {
        new DialogDemo().frame();
    }
}

焦点监听事件

组件名.addFocusListener(使用匿名对象进行操作);//添加动作监听

JButton btn=new JButton("按钮");
btu.addFocusListener(new FocusListener(){
    public void focusGained(FocusEvent e){//组件获得焦点时调用的方法
    }
    public void focusLost(FocusEvent e){//组件失去焦点时调用的方法
    }
}

这个可以普遍用到很多组件上,都是调用addFocusListener方法,然后使用匿名内部类的方式实现FocusListener接口,并重写他的focusGained方法和focusLost方法。
举个栗子:

import javax.swing.*;

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

public class DialogDemo extends JDialog {

    public void frame(){
        JFrame f=new JFrame();
        f.setTitle("测试");
        f.setBounds(450, 180, 1000, 550);//设置窗体大小和位置
        f.setLayout(null);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体可关闭
        Container c=f.getContentPane();
        c.setBackground(Color.WHITE);//设置窗体的背景颜色
        JTextField jt1=new JTextField();
        jt1.setBounds(100,100,100,30);
        jt1.addFocusListener(new FocusListener() {//焦点监听事件
            @Override
            public void focusGained(FocusEvent e) {
                jt1.setBackground(Color.pink);//获得焦点时背景为粉红
            }

            @Override
            public void focusLost(FocusEvent e) {//失去焦点时背景为灰色
                jt1.setBackground(Color.GRAY);
            }
        });
        JTextField jt2=new JTextField();
        jt2.setBounds(100,140,100,30);
        jt2.addFocusListener(new FocusListener() {//焦点监听事件
            @Override
            public void focusGained(FocusEvent e) {
                jt2.setBackground(Color.pink);//获得焦点时背景为粉红
            }

            @Override
            public void focusLost(FocusEvent e) {//失去焦点时背景为灰色
                jt2.setBackground(Color.GRAY);
            }
        });
        JTextField jt3=new JTextField();
        jt3.setBounds(100,180,100,30);
        jt3.addFocusListener(new FocusListener() {//焦点监听事件
            @Override
            public void focusGained(FocusEvent e) {
                jt3.setBackground(Color.pink);//获得焦点时背景为粉红
            }

            @Override
            public void focusLost(FocusEvent e) {//失去焦点时背景为灰色
                jt3.setBackground(Color.GRAY);
            }
        });

        c.add(jt1);
        c.add(jt2);
        c.add(jt3);
        f.setVisible(true);//设置窗体可见
    }

    public static void main(String[] args) {
        new DialogDemo().frame();
    }
}

效果图:在这里插入图片描述
有焦点的背景为粉红,没有焦点的背景为灰色

建议

学到这里之后建议大家去学学JTable这个组件,因为本人能力有限,这个组件还在摸索中,写了很多bug。所有JTable暂时不做介绍,以后再更新。
另外如果大家对Swing感兴趣的话推荐大家看一下xietansheng大神的swing合集,给大家放上传送门~~~Java Swing 图形界面开发(目录)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值